Streamek módosítása az Azure Cosmos DB MongoDB-hez készült API-jában
A KÖVETKEZŐKRE VONATKOZIK: MongoDB
A változáscsatorna támogatása az Azure Cosmos DB MongoDB-hez készült API-jában a change streams API használatával érhető el. A change streams API használatával az alkalmazások lekérhetik a gyűjteményben vagy a szegmensben lévő elemeken végrehajtott módosításokat. Később további műveleteket is végrehajthat az eredmények alapján. A gyűjtemény elemeinek módosításait a módosítási idő sorrendjében rögzíti a rendszer, a rendezési sorrend pedig szegmenskulcsonként garantált.
Feljegyzés
A streamek módosításához hozza létre az Azure Cosmos DB Api for MongoDB-fiókját a kiszolgáló 3.6-os vagy újabb verziójával. Ha a változásfolyam-példákat egy korábbi verzióval futtatja, előfordulhat, hogy a nem felismert folyamatszakasz neve jelenik meg: $changeStream hiba.
Példák
Az alábbi példa bemutatja, hogyan kérhet le változásstreameket a gyűjtemény összes elemére. Ez a példa egy kurzort hoz létre az elemek beszúrása, frissítése vagy cseréjekor. A $match
változásstreamek lekéréséhez szükség van a fázisra, $project
a fázisra és fullDocument
a beállításra. A módosítási streamekkel végzett törlési műveletek figyelése jelenleg nem támogatott. Áthidaló megoldásként hozzáadhat egy helyreállítható jelölőt a törölt elemekhez. Hozzáadhat például egy attribútumot a "törölt" nevű elemhez. Ha törölni szeretné az elemet, beállíthatja a "törölt" true
értéket, és beállíthat egy TTL-t az elemen. Mivel a "törölt" true
frissítés egy frissítés, ez a módosítás látható lesz a változásstreamben.
var cursor = db.coll.watch(
[
{ $match: { "operationType": { $in: ["insert", "update", "replace"] } } },
{ $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }
],
{ fullDocument: "updateLookup" });
while (!cursor.isExhausted()) {
if (cursor.hasNext()) {
printjson(cursor.next());
}
}
Módosítások egyetlen szegmensen belül
Az alábbi példa bemutatja, hogyan kérhet le módosításokat az egyes szegmensek elemein. Ez a példa beolvasja azokat az elemeket, amelyeknél a szegmenskulcs értéke "a" és a szegmenskulcs értéke "1". Lehetséges, hogy a különböző ügyfelek párhuzamosan olvassák a különböző szegmensek módosításait.
var cursor = db.coll.watch(
[
{
$match: {
$and: [
{ "fullDocument.a": 1 },
{ "operationType": { $in: ["insert", "update", "replace"] } }
]
}
},
{ $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1} }
],
{ fullDocument: "updateLookup" });
Streamek módosítása skálázása
A változásstreamek nagy léptékű használata esetén a legjobb, ha egyenletesen elosztja a terhelést. Használja a GetChangeStreamTokens egyéni parancsot a terhelés fizikai szegmensek/partíciók közötti elosztásához.
Jelenlegi korlátozások
A változásstreamek használatakor a következő korlátozások érvényesek:
- A
operationType
kimeneti dokumentum még nem támogatja a tulajdonságokat ésupdateDescription
a tulajdonságokat. - A
insert
,update
ésreplace
a művelettípusok jelenleg támogatottak. A törlési művelet vagy más események azonban még nem támogatottak.
Ezen korlátozások miatt a $match szakasz, a $project szakasz és a fullDocument beállítások szükségesek az előző példákban látható módon.
Az Azure Cosmos DB NOSQL-hez készült API-jának változáscsatornájával ellentétben nincs külön változáscsatorna-feldolgozó kódtár a változásstreamek használatához, vagy nincs szükség bérlettárolóra. Az Azure Functions-eseményindítók jelenleg nem támogatják a változásstreamek feldolgozását.
Hibakezelés
A változásstreamek használatakor a következő hibakódok és üzenetek támogatottak:
HTTP-hibakód: 16500 – A változásstream szabályozása után üres lapot ad vissza.
NamespaceNotFound (OperationType Invalidate) – Ha nem létező gyűjteményen futtatja a változásstreamet, vagy ha a gyűjtemény elvetve van, a
NamespaceNotFound
rendszer hibát ad vissza. Mivel aoperationType
tulajdonság nem adható vissza a kimeneti dokumentumban, aoperationType Invalidate
hiba helyett a rendszer aNamespaceNotFound
hibát adja vissza.