Tárolt eljárások
Az Azure Cosmos DB egy globálisan elosztott többmodelles adatbázis, amely támogatja a dokumentum-, gráf- és kulcs-érték adatmodelleket. Ebben a szakaszban a dokumentum-erőforrások REST-en keresztüli létrehozására, lekérdezésére és kezelésére van lehetőség az SQL API használatával.
A tárolt eljárás egy JavaScriptben írt alkalmazáslogika, amelyet a rendszer egyetlen tranzakcióként regisztrál és hajt végre egy gyűjteményen. Az Azure Cosmos DB-ben a JavaScript az adatbázissal megegyező memóriaterületen található. Ezért a tárolt eljárásokban végrehajtott kérések az adatbázis-munkamenet azonos hatókörében futnak. Ez a folyamat lehetővé teszi, hogy az Azure Cosmos DB garantálja az ACID-t minden olyan művelet esetében, amely egyetlen tárolt eljárás része.
A tárolt eljárás erőforrását sprocsok képviselik az Azure Cosmos DB-erőforrásmodellben.
A tárolt eljárás erőforrása rögzített sémával rendelkezik. A body tulajdonság tartalmazza az alkalmazás logikáját. Az alábbi példa egy tárolt eljárás JSON-szerkezetét szemlélteti.
{
"id":"SimpleStoredProc",
"body":"function (docToCreate, addedPropertyName, addedPropertyValue {getContext().getResponse().setBody('Hello World');}",
"_rid":"hLEEAI1YjgcBAAAAAAAAgA==",
"_ts":1408058682,
"_self":"dbs\/hLEEAA==\/colls\/hLEEAI1Yjgc=\/sprocs\/hLEEAI1YjgcBAAAAAAAAgA==\/",
"_etag":"00004100-0000-0000-0000-53ed453a0000"
}
Egy adott tárolt eljárás minden hozzáférési módjának használata nem teszi lehetővé, hogy a felhasználó végrehajtsa a tárolt eljárást. Ehelyett a felhasználónak minden hozzáférési móddal rendelkeznie kell a gyűjtemény szintjén egy tárolt eljárás végrehajtásához.
Tulajdonság | Leírás |
---|---|
id | Kötelező. Ez egy felhasználó által beállított tábla tulajdonság. Ez a tárolt eljárás azonosítására használt egyedi név. Az azonosító nem haladhatja meg a 255 karaktert. |
Szervezet | Kötelező. Ez egy felhasználó által beállított tábla tulajdonság. Ez a tárolt eljárás törzse. |
_Megszabadulni | Ez egy rendszer által létrehozott tulajdonság. Az erőforrás-azonosító (_rid) egy egyedi azonosító, amely szintén hierarchikus az erőforrásmodell erőforrás-vermében. Belsőleg használják a tárolt eljárás erőforrásának elhelyezésére és navigációjára. |
_Ts | Ez egy rendszer által létrehozott tulajdonság. Meghatározza az erőforrás utolsó frissített időbélyegét. Az érték egy időbélyeg. |
_Önálló | Ez egy rendszer által létrehozott tulajdonság. Ez az erőforrás egyedi címezhető URI-ja. |
_Etag | Ez egy rendszer által létrehozott tulajdonság, amely meghatározza az optimista egyidejűség-vezérléshez szükséges erőforrás-etaget. |
A tárolt eljárások a Cosmos DB JavaScript kiszolgálóoldali SDK-val olyan adatbázis-műveleteket hajthatnak végre, mint a dokumentumok létrehozása, olvasása, frissítése, törlése és lekérdezése, valamint a kérelemtörzsből való olvasás és a tárolt eljárás választörzsébe való írás. További információt a Cosmos DB kiszolgálóoldali programozási oktatóanyagában talál.
Íme például a ""Helló világ!" alkalmazás" tárolt eljárása:
var helloWorldStoredProc = {
id: "helloWorld",
body: function () {
var context = getContext();
var response = context.getResponse();
response.setBody("Hello, World");
}
}
Az alábbi példa egy dokumentumot hoz létre a tárolt eljárásban:
{
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;
}
}
Az alábbi példa két elemet cserél fel egy tárolt eljárásban:
// JavaScript source code
var exchangeItemsSproc = {
name: "exchangeItems",
body: function (playerId1, playerId2) {
var context = getContext();
var collection = context.getCollection();
var response = context.getResponse();
var player1Document, player2Document;
// query for players
var filterQuery = 'SELECT * FROM Players p where p.id = "' + playerId1 + '"';
var accept = collection.queryDocuments(collection.getSelfLink(), filterQuery, {},
function (err, documents, responseOptions) {
if (err) throw new Error("Error" + err.message);
if (documents.length != 1) throw "Unable to find both names";
player1Document = documents[0];
var filterQuery2 = 'SELECT * FROM Players p where p.id = "' + playerId2 + '"';
var accept2 = collection.queryDocuments(collection.getSelfLink(), filterQuery2, {},
function (err2, documents2, responseOptions2) {
if (err2) throw new Error("Error" + err2.message);
if (documents2.length != 1) throw "Unable to find both names";
player2Document = documents2[0];
swapItems(player1Document, player2Document);
return;
});
if (!accept2) throw "Unable to read player details, abort ";
});
if (!accept) throw "Unable to read player details, abort ";
// swap the two players’ items
function swapItems(player1, player2) {
var player1ItemSave = player1.item;
player1.item = player2.item;
player2.item = player1ItemSave;
var accept = collection.replaceDocument(player1._self, player1,
function (err, docReplaced) {
if (err) throw "Unable to update player 1, abort ";
var accept2 = collection.replaceDocument(player2._self, player2,
function (err2, docReplaced2) {
if (err) throw "Unable to update player 2, abort"
});
if (!accept2) throw "Unable to update player 2, abort";
});
if (!accept) throw "Unable to update player 1, abort";
}
}
}
Feladatok
A tárolt eljárásokkal a következő műveleteket végezheti el:
A tárolt eljárások működésével kapcsolatos információkért, beleértve a tárolt eljárások végrehajtását, tekintse meg az Azure Cosmos DB programozása: Tárolt eljárások, eseményindítók és UDF-ek című témakört.