Erstellen gespeicherter Prozeduren
Azure Cosmos DB bietet sprachintegrierte, transaktionsbasierte Ausführung von JavaScript, mit der Sie gespeicherten Prozeduren, Triggerund benutzerdefinierte Funktionen (UDFs)schreiben können. Um eine gespeicherte Prozedur, einen Trigger oder eine benutzerdefinierte Funktion aufzurufen, müssen Sie sie registrieren. Weitere Informationen finden Sie unter Arbeiten mit gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen in Azure Cosmos DB.
Anmerkung
Diese Einheit konzentriert sich auf gespeicherte Prozeduren, die folgende Einheit deckt Trigger und benutzerdefinierte Funktionen ab.
Schreiben gespeicherter Prozeduren
Gespeicherte Prozeduren können Elemente in einem Azure Cosmos-Container erstellen, aktualisieren, lesen, abfragen und löschen. Gespeicherte Prozeduren werden pro Sammlung registriert und können für jedes Dokument oder eine Anlage verwendet werden, die in dieser Auflistung vorhanden ist.
Hier ist eine einfache gespeicherte Prozedur, die eine Antwort "Hello World" zurückgibt.
var helloWorldStoredProc = {
id: "helloWorld",
serverScript: function () {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
}
Das Kontextobjekt bietet Zugriff auf alle Vorgänge, die in Azure Cosmos DB ausgeführt werden können, und zugriff auf die Anforderungs- und Antwortobjekte. In diesem Fall verwenden Sie das Antwortobjekt, um den Textkörper der Antwort festzulegen, die an den Client zurückgesendet werden soll.
Erstellen eines Elements mithilfe einer gespeicherten Prozedur
Wenn Sie ein Element mithilfe einer gespeicherten Prozedur erstellen, wird das Element in den Azure Cosmos DB-Container eingefügt und eine ID für das neu erstellte Element zurückgegeben. Das Erstellen eines Elements ist ein asynchroner Vorgang und hängt von den JavaScript-Rückruffunktionen ab. Die Rückruffunktion weist zwei Parameter auf: eines für das Fehlerobjekt, falls der Vorgang fehlschlägt, und ein anderer für einen Rückgabewert, in diesem Fall das erstellte Objekt. Innerhalb der Callback-Funktion können Sie entweder die Ausnahme behandeln oder einen Fehler werfen. Wenn kein Rückruf bereitgestellt wird und ein Fehler auftritt, löst die Azure Cosmos DB-Laufzeit einen Fehler aus.
Die gespeicherte Prozedur enthält auch einen Parameter, um die Beschreibung als booleschen Wert festzulegen. Wenn der Parameter auf "true" festgelegt ist und die Beschreibung fehlt, löst die gespeicherte Prozedur eine Ausnahme aus. Andernfalls wird der Rest der gespeicherten Prozedur weiterhin ausgeführt.
Diese gespeicherte Prozedur übernimmt als Eingabe documentToCreate
, den Textkörper eines Dokuments, das in der aktuellen Auflistung erstellt werden soll. Alle diese Vorgänge sind asynchron und hängen von JavaScript-Funktionsrückrufen ab.
var createDocumentStoredProc = {
id: "createMyDocument",
body: function createMyDocument(documentToCreate) {
var context = getContext();
var collection = context.getCollection();
var accepted = collection.createDocument(collection.getSelfLink(),
documentToCreate,
function (err, documentCreated) {
if (err) throw new Error('Error' + err.message);
context.getResponse().setBody(documentCreated.id)
});
if (!accepted) return;
}
}
Arrays als Eingabeparameter für gespeicherte Prozeduren
Beim Definieren einer gespeicherten Prozedur im Azure-Portal werden Eingabeparameter immer als Zeichenfolge an die gespeicherte Prozedur gesendet. Auch wenn Sie ein Array von Zeichenfolgen als Eingabe übergeben, wird das Array in eine Zeichenfolge konvertiert und an die gespeicherte Prozedur gesendet. Um dies zu umgehen, können Sie eine Funktion innerhalb Der gespeicherten Prozedur definieren, um die Zeichenfolge als Array zu analysieren. Der folgende Code zeigt, wie Sie einen Zeichenfolgeneingabeparameter als Array analysieren:
function sample(arr) {
if (typeof arr === "string") arr = JSON.parse(arr);
arr.forEach(function(a) {
// do something here
console.log(a);
});
}
Begrenzte Ausführung
Alle Azure Cosmos DB-Vorgänge müssen innerhalb eines begrenzten Zeitraums abgeschlossen werden. Gespeicherte Prozeduren haben eine begrenzte Zeit für die Ausführung auf dem Server. Alle Auflistungsfunktionen geben einen booleschen Wert zurück, der angibt, ob dieser Vorgang abgeschlossen ist oder nicht.
Transaktionen in gespeicherten Prozeduren
Sie können Transaktionen für Elemente in einem Container mithilfe einer gespeicherten Prozedur implementieren. JavaScript-Funktionen können ein fortsetzungsbasiertes Modell implementieren, um die Ausführung stapelweise zu verarbeiten oder fortzusetzen. Der Fortsetzungswert kann ein beliebiger Wert Ihrer Wahl sein, und Ihre Anwendungen können dann diesen Wert verwenden, um eine Transaktion von einem neuen Ausgangspunkt aus fortzusetzen. Das folgende Diagramm zeigt, wie das Transaktionsfortsetzungsmodell verwendet werden kann, um eine serverseitige Funktion zu wiederholen, bis die Funktion die gesamte Verarbeitungsauslastung beendet hat.