změna datových proudů v rozhraní Azure Cosmos DB API pro MongoDB
PLATÍ pro:
Azure Cosmos DB API pro MongoDB
podpora kanálů změn v rozhraní Azure Cosmos DB api pro MongoDB je k dispozici prostřednictvím rozhraní api change streams. Pomocí rozhraní Change Streams API můžou vaše aplikace získat změny provedené v kolekci nebo na položky v jednom horizontálních oddílů. Později můžete na základě výsledků provádět další akce. Změny položek v kolekci jsou zachyceny v pořadí podle doby jejich úpravy a je zaručeno pořadí řazení podle horizontálních oddílů klíče.
Poznámka
pokud chcete použít změny streamů, vytvořte účet API Azure Cosmos DB pro účet MongoDB se serverem verze 3,6 nebo vyšší. Pokud spustíte příklady streamování změn v předchozí verzi, může se zobrazit nerozpoznaný název fáze kanálu: $changeStream chyba.
Příklady
Následující příklad ukazuje, jak získat datové proudy změn pro všechny položky v kolekci. Tento příklad vytvoří kurzor pro sledování položek při jejich vložení, aktualizaci nebo nahrazení. $match $project fullDocument K získání datových proudů změn jsou vyžadovány fáze, fáze a možnosti. Sledování operací odstranění pomocí datových proudů není aktuálně podporováno. Jako alternativní řešení můžete přidat měkké označení pro položky, které se odstraňují. Můžete například přidat atribut v položce s názvem "odstraněno". Pokud chcete položku odstranit, můžete nastavit hodnotu "odstraněno" na true a nastavit hodnotu TTL pro položku. Vzhledem k tomu, že aktualizace "Deleted" na true aktualizaci je aktualizace, tato změna se zobrazí v datovém proudu 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ích oddílů
Následující příklad ukazuje, jak získat změny položek v rámci jednoho horizontálních oddílů. Tento příklad načte změny položek, které mají klíč horizontálních oddílů se rovná "a" a hodnotu klíče horizontálních oddílů rovnající se 1. Je možné, že různé klienty č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í změn v datových proudech
Při používání změn ve velkém měřítku je nejlepší rovnoměrně rozprostře zatížení. K rozložení zátěže mezi fyzickými horizontálních oddílů/oddíly Využijte vlastní příkaz GetChangeStreamTokens .
Aktuální omezení
Při použití datových proudů změn platí následující omezení:
operationTypeVlastnosti aupdateDescriptionse zatím nepodporují ve výstupním dokumentu.insertupdateTypy operací, areplacejsou aktuálně podporovány. Operace odstranění nebo jiné události se ale ještě nepodporují.
V důsledku těchto omezení jsou vyžadovány $match fáze, $project fáze a možnosti fullDocument, jak je znázorněno v předchozích příkladech.
na rozdíl od kanálu změn v rozhraní SQL API Azure Cosmos DB není k dispozici samostatná knihovna pro změnu kanálu , která by mohla využívat datové proudy změn, nebo vyžaduje kontejner zapůjčení. V současné době není podporovaná podpora pro Azure Functions triggery pro zpracování datových proudů změn.
Zpracování chyb
Při použití datových proudů změn jsou podporovány následující chybové kódy a zprávy:
Kód chyby HTTP 16500 – Pokud je datový proud změny omezený, vrátí prázdnou stránku.
NamespaceNotFound (typem operace OperationType unvalidate) – Pokud spustíte datový proud změn v kolekci, která neexistuje, nebo pokud je kolekce vyřazena,
NamespaceNotFoundvrátí se chyba. Vzhledem k tomu, žeoperationTypevlastnost nemůže být vrácena ve výstupním dokumentu, místooperationType Invalidatechyby seNamespaceNotFoundvrátí chyba.