Tworzenie procedur składowanych
Usługa Azure Cosmos DB zapewnia zintegrowane z językiem, transakcyjne wykonywanie kodu JavaScript, które umożliwia pisanie procedur składowanych, wyzwalaczy i funkcji zdefiniowanych przez użytkownika (UDF). Aby wywołać procedurę składowaną, wyzwalacz lub funkcję zdefiniowaną przez użytkownika, należy ją zarejestrować. Aby uzyskać więcej informacji, zobacz Jak pracować z procedurami składowanymi, wyzwalaczami i funkcjami zdefiniowanymi przez użytkownika w usłudze Azure Cosmos DB.
Uwaga
Ta lekcja koncentruje się na procedurach składowanych. W poniższej lekcji omówiono wyzwalacze i funkcje zdefiniowane przez użytkownika.
Pisanie procedur składowanych
Procedury składowane mogą tworzyć, aktualizować, odczytywać, wykonywać zapytania i usuwać elementy wewnątrz kontenera usługi Azure Cosmos. Procedury składowane są rejestrowane w danej kolekcji i mogą operować na dowolnych dokumentach lub załącznikach znajdujących się w tej kolekcji.
Oto prosta procedura składowana zwracająca odpowiedź "Hello World".
var helloWorldStoredProc = {
id: "helloWorld",
serverScript: function () {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
}
Obiekt kontekstu zapewnia dostęp do wszystkich operacji, które można wykonać w usłudze Azure Cosmos DB, oraz dostępu do obiektów żądania i odpowiedzi. W tym przypadku obiekt odpowiedzi jest używany w celu ustawienia wysłania treści odpowiedzi z powrotem do klienta.
Tworzenie elementu za pomocą procedury składowanej
Podczas tworzenia elementu przy użyciu procedury składowanej element jest wstawiany do kontenera usługi Azure Cosmos DB i zwracany jest identyfikator nowo utworzonego elementu. Tworzenie elementu jest operacją asynchroniczną i zależy od funkcji wywołania zwrotnego języka JavaScript. Funkcja wywołania zwrotnego ma dwa parametry: jeden dla obiektu błędu w przypadku niepowodzenia operacji, a drugi dla wartości zwracanej, w tym przypadku utworzonego obiektu. Wewnątrz wywołania zwrotnego można obsłużyć wyjątek lub zgłosić błąd. Jeśli wywołanie zwrotne nie zostanie podane i wystąpi błąd, środowisko uruchomieniowe usługi Azure Cosmos DB zgłasza błąd.
Procedura składowana zawiera również parametr służący do ustawiania opisu jako wartości logicznej. Gdy parametr ma wartość true i brakuje opisu, procedura składowana zgłasza wyjątek. W przeciwnym razie pozostała część procedury składowanej zostanie wykonana.
Ta procedura składowana przyjmuje jako dane wejściowe documentToCreate
, treść dokumentu, który ma zostać utworzony w bieżącej kolekcji. Wszystkie takie operacje są asynchroniczne i zależą od wywołań zwrotnych funkcji Języka JavaScript.
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;
}
}
Tablice jako parametry wejściowe dla procedur składowanych
Podczas definiowania procedury składowanej w witrynie Azure Portal parametry wejściowe są zawsze wysyłane jako ciąg do procedury składowanej. Nawet jeśli jako dane wejściowe przekażesz tablicę ciągów, tablica jest konwertowana na ciąg i wysyłana do procedury składowanej. Aby to obejść, można zdefiniować funkcję w swojej procedurze składowanej, aby przeanalizować ciąg jako tablicę. Poniższy kod pokazuje, jak można przeanalizować parametr wejściowy ciągu jako tablicę:
function sample(arr) {
if (typeof arr === "string") arr = JSON.parse(arr);
arr.forEach(function(a) {
// do something here
console.log(a);
});
}
Powiązane wykonywanie
Wszystkie operacje usługi Azure Cosmos DB muszą zostać ukończone w ograniczonym czasie. Procedury składowane mają ograniczony czas do uruchomienia na serwerze. Wszystkie funkcje kolekcji zwracają wartość logiczną, która reprezentuje, czy ta operacja zostanie ukończona, czy nie
Transakcje w ramach procedur składowanych
Za pomocą procedury składowanej można zaimplementować transakcje na elementach w kontenerze. Funkcje języka JavaScript mogą implementować model oparty na kontynuacji do wykonywania wsadowego lub wznawiania wykonywania. Wartość kontynuacji może być dowolną wybraną wartością, a aplikacje mogą następnie użyć tej wartości, aby wznowić transakcję od nowego punktu wyjścia. Na poniższym diagramie przedstawiono sposób użycia modelu kontynuacji transakcji w celu powtórzenia funkcji po stronie serwera do momentu zakończenia całego obciążenia przetwarzania przez funkcję.