Sdílet prostřednictvím


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 a updateDescription vlastnosti.
  • Typy insertoperací a replace , updatejsou 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ísto operationType Invalidate chyby, vrátí se NamespaceNotFound chyba.

Další kroky