Změna datových proudů v rozhraní API služby Azure Cosmos DB pro MongoDB
PLATÍ PRO: MongoDB
Podpora kanálu změn v rozhraní API služby Azure Cosmos DB pro MongoDB je dostupná pomocí rozhraní API streamů změn. Pomocí rozhraní API streamů změn můžou vaše aplikace získat změny provedené v kolekci nebo v položkách v jednom horizontálním oddílu. Později můžete na základě výsledků provést další akce. Změny položek v kolekci se zaznamenávají v pořadí jejich času úprav a pořadí řazení je zaručeno na klíč horizontálního oddílu.
Poznámka:
Pokud chcete použít streamy změn, vytvořte účet rozhraní API služby Azure Cosmos DB pro MongoDB se serverem verze 3.6 nebo vyšší. Pokud spustíte příklady streamu změn u starší verze, může se zobrazit nerozpoznaný název fáze kanálu: $changeStream chyba.
Příklady
Následující příklad ukazuje, jak získat streamy změn u všech položek v kolekci. Tento příklad vytvoří kurzor pro sledování položek při jejich vložení, aktualizaci nebo nahrazení. Fáze $match
, $project
fáze a fullDocument
možnost jsou potřeba k získání streamů změn. Sledování operací odstranění pomocí streamů změn se v současné době nepodporuje. Jako alternativní řešení můžete přidat obnovitelné značky k odstraněným položkám. Do položky s názvem "odstraněno" můžete například přidat atribut. Pokud chcete položku odstranit, můžete u položky nastavit hodnotu true
TTL a nastavit na ní hodnotu TTL. Vzhledem k tomu, že aktualizace odstraněné na true
aktualizaci je aktualizace, bude tato změna viditelná ve streamu změn.
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());
}
}
Změny v rámci jednoho horizontálního oddílu
Následující příklad ukazuje, jak získat změny položek v rámci jednoho horizontálního oddílu. Tento příklad získá změny položek, které mají klíč horizontálního oddílu rovno "a" a hodnota klíče horizontálního oddílu se rovná "1". Je možné mít různé klienty, kteří čtou změny z různých horizontálních oddílů paralelně.
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" });
Škálování datových proudů změn
Při použití streamů změn ve velkém měřítku je nejlepší rovnoměrně rozložit zatížení. Pomocí vlastního příkazu GetChangeStreamTokens rozdělte zatížení mezi fyzické horizontální oddíly nebo oddíly.
Aktuální omezení
Při použití streamů změn platí následující omezení:
- Výstupní dokument zatím nepodporuje vlastnosti
operationType
aupdateDescription
vlastnosti. - Typy
insert
operací areplace
,update
jsou v současné době podporovány. Operace odstranění nebo jiné události se ale zatím nepodporují.
Vzhledem k těmto omezením se vyžadují možnosti $match fáze, fáze $project a fullDocument, jak je znázorněno v předchozích příkladech.
Na rozdíl od kanálu změn v rozhraní API služby Azure Cosmos DB pro NoSQL neexistuje samostatná knihovna procesoru kanálu změn, která by spotřebovávat streamy změn nebo potřebovala kontejner zapůjčení. Triggery Azure Functions v současné době nepodporují zpracování streamů změn.
Zpracování chyb
Při použití streamů změn se podporují následující kódy chyb a zprávy:
Kód chyby HTTP 16500 – Pokud je omezený datový proud změn, vrátí prázdnou stránku.
NamespaceNotFound (OperationType Invalidate) – Pokud spustíte stream změn v kolekci, která neexistuje nebo pokud je kolekce vyřazena,
NamespaceNotFound
vrátí se chyba.operationType
Vzhledem k tomu, že vlastnost nelze vrátit ve výstupním dokumentu místooperationType Invalidate
chyby, vrátí seNamespaceNotFound
chyba.