Tárolt eljárások létrehozása

Befejeződött

Az Azure Cosmos DB a JavaScript nyelvvel integrált tranzakciós végrehajtását biztosítja, amellyel tárolt eljárásokat, eseményindítókat és felhasználó által definiált függvényeket (UDF-eket) írhat. Tárolt eljárás, eseményindító vagy felhasználó által definiált függvény meghívásához regisztrálnia kell azt. További információ : Tárolt eljárások, eseményindítók és felhasználó által definiált függvények használata az Azure Cosmos DB-ben.

Feljegyzés

Ez az egység a tárolt eljárásokra összpontosít, az alábbi egység az eseményindítókat és a felhasználó által definiált függvényeket ismerteti.

Tárolt eljárások írása

A tárolt eljárások létrehozhatnak, frissíthetnek, olvashatnak, lekérdezhetnek és törölhetnek elemeket egy Azure Cosmos-tárolóban. A tárolt eljárások gyűjteményenként vannak regisztrálva, és a gyűjteményben található bármely dokumentumon vagy mellékleten működhetnek.

Íme egy egyszerű tárolt eljárás, amely egy ""Helló világ!" alkalmazás" választ ad vissza.

var helloWorldStoredProc = {
    id: "helloWorld",
    serverScript: function () {
        var context = getContext();
        var response = context.getResponse();

        response.setBody("Hello, World");
    }
}

A környezeti objektum hozzáférést biztosít az Azure Cosmos DB-ben elvégezhető összes művelethez, valamint hozzáférést biztosít a kérés- és válaszobjektumokhoz. Ebben az esetben a válaszobjektum használatával állítja be a válasz törzsét, amelyet vissza szeretne küldeni az ügyfélnek.

Elem létrehozása tárolt eljárással

Amikor tárolt eljárással hoz létre egy elemet, a rendszer beszúrja az elemet az Azure Cosmos DB-tárolóba, és visszaadja az újonnan létrehozott elem azonosítóját. Az elem létrehozása aszinkron művelet, és a JavaScript visszahívási függvényétől függ. A visszahívási függvénynek két paramétere van: az egyik a hibaobjektumhoz, ha a művelet meghiúsul, a másik pedig egy visszatérési értékhez, ebben az esetben a létrehozott objektumhoz. A visszahíváson belül kezelheti a kivételt, vagy hibát jelezhet. Ha nincs megadva visszahívás, és hiba történik, az Azure Cosmos DB-futtatókörnyezet hibát jelez.

A tárolt eljárás tartalmaz egy paramétert is, amely logikai értékként állítja be a leírást. Ha a paraméter igaz értékre van állítva, és a leírás hiányzik, a tárolt eljárás kivételt eredményez. Ellenkező esetben a tárolt eljárás többi része továbbra is fut.

Ez a tárolt eljárás bemenetként documentToCreateveszi fel az aktuális gyűjteményben létrehozandó dokumentum törzsét. Minden ilyen művelet aszinkron, és a JavaScript-függvény visszahívásától függ.

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;
    }
}

Tömbök bemeneti paraméterként tárolt eljárásokhoz

Az Azure Portalon tárolt eljárás definiálásakor a bemeneti paraméterek mindig sztringként lesznek elküldve a tárolt eljárásnak. A rendszer akkor is sztringek tömböt ad át bemenetként, ha a tömböt sztringgé alakítja, és elküldi a tárolt eljárásnak. Ennek megkerüléséhez definiálhat egy függvényt a tárolt eljárásban a sztring tömbként való elemzéséhez. Az alábbi kód bemutatja, hogyan elemezhet egy sztringbemeneti paramétert tömbként:

function sample(arr) {
    if (typeof arr === "string") arr = JSON.parse(arr);

    arr.forEach(function(a) {
        // do something here
        console.log(a);
    });
}

Kötött végrehajtás

Minden Azure Cosmos DB-műveletnek korlátozott időn belül végre kell hajtania. A tárolt eljárásoknak korlátozott ideig kell futniuk a kiszolgálón. Minden gyűjteményfüggvény egy logikai értéket ad vissza, amely azt jelzi, hogy a művelet befejeződött-e vagy sem

Tárolt eljárásokon belüli tranzakciók

A tárolón belüli elemek tranzakcióit tárolt eljárással valósíthatja meg. A JavaScript-függvények folytatásalapú modellt implementálhatnak a végrehajtás kötegeléséhez vagy folytatásához. A folytatási érték tetszőleges érték lehet, és az alkalmazások ezt az értéket használva folytathatják a tranzakciót egy új kiindulási pontról. Az alábbi ábra bemutatja, hogyan használható a tranzakció-folytatási modell egy kiszolgálóoldali függvény ismétlésére, amíg a függvény be nem fejezi a teljes feldolgozási számítási feladatot.

This diagram depicts how the transaction continuation model can be used to repeat a server-side function until the function finishes its entire processing workload.