Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Azure Cosmos DB output az Azure Stream Analytics-ben a stream processing eredményeket JSON dokumentumként írja egy Azure Cosmos DB konténerbe. Támogatja az adatarchiválást és alacsony késleltetésű lekérdezéseket strukturálatlan JSON adatokon. Annak megértése, hogyan viselkedik ez a kimenet, segít úgy konfigurálni, hogy biztosítsa az adott forgatókönyv által megkövetelt áteresztőképességet, konzisztenciát és particionálást.
Az Azure Cosmos DB kimeneti célként való használatának alapjai
Az Azure Cosmos DB kimenete a Stream Analytics-ben JSON kimenetként írja le a stream feldolgozási eredményeit az Azure Cosmos DB konténereibe. Ha nem ismeri az Azure Cosmos DB-t, első lépésként tekintse meg az Azure Cosmos DB dokumentációját .
A Stream Analytics csak az SQL API-n keresztül csatlakozik az Azure Cosmos DB-hez. Más Azure Cosmos DB API-k még nem támogatottak. Ha a Stream Analyticset más API-kkal létrehozott Azure Cosmos DB-fiókokra mutatja, előfordulhat, hogy az adatok nem lesznek megfelelően tárolva. Amikor Azure Cosmos DB-t használsz kimenetként, állítsd be a feladatodat 1.2-es kompatibilitási szintre.
A Stream Analytics nem hoz létre tárolókat az adatbázisban. Ehelyett előbb létre kell hoznia őket. Ezután szabályozhatja az Azure Cosmos DB-tárolók számlázási költségeit. A tárolók teljesítményét, konzisztenciáját és kapacitását közvetlenül is hangolhatja az Azure Cosmos DB API-k használatával. Az alábbi szakaszok részletesen ismertetik az Azure Cosmos DB tárolóbeállításait.
Konzisztencia, rendelkezésre állás és késés finomhangolása
Az alkalmazás követelményeinek megfelelése érdekében finomhangolja az adatbázist és a konténereket az Azure Cosmos DB-ben, és kompromisszumot köt konzisztencia, elérhetőség, késleltetés és áteresztés között.
Attól függően, milyen olvasási konzisztenciát igényel a forgatókönyved olvasási és írási késleltetés ellen, válassz egy konzisztens szintet az adatbázis fiókodban. Az áteresztőképesség javítása érdekében skálázd fel a konténeren a Request Units (RU) számát. Az Azure Cosmos DB alapértelmezés szerint lehetővé teszi az egyes CRUD-műveletek szinkron indexelését a tárolóhoz. Ez az opció egy másik hasznos módja az olvasási és írási teljesítmény szabályozásának az Azure Cosmos DB-ben. További információkért tekintse át az adatbázis és a lekérdezés konzisztenciaszintjeinek módosítása című cikket.
Upserts a Stream Analyticsből
Az Azure Cosmos DB-vel való Stream Analytics integrációval a konténerbe beilleszthető vagy frissíthető rekordokat egy adott Document ID oszlop alapján. Ezt a műveletet upsert-nek is nevezik. A Stream Analytics optimista upsert megközelítést használ. A frissítések csak akkor történnek meg, ha egy beszúrás dokumentumazonosító-ütközéssel meghiúsul.
A kompatibilitási szint 1.0 használatával a Stream Analytics PATCH műveletként végzi el ezt a frissítést, így támogatja a dokumentum részleges frissítéseit. A Stream Analytics új tulajdonságokat ad hozzá, vagy növekményesen lecserél egy meglévő tulajdonságot. A JSON-dokumentumban a tömbtulajdonságok értékeinek módosítása azonban a teljes tömb felülírását eredményezi. Vagyis a tömb nincs egyesítve.
A kompatibilitási szint 1.2-es használatával az upsert viselkedése változik, hogy beillesztse vagy helyettesítse a dokumentumot. Ezt a viselkedést az 1.2-es kompatibilitási szintről szóló későbbi szakasz ismerteti.
Ha a bejövő JSON dokumentumnak van egy meglévő azonosító mezője, az Azure Cosmos DB automatikusan ezt a mezőt használja Dokumentumazonosító oszlopként. A Stream Analytics minden későbbi írást így kezel, ami az egyik ilyen helyzethez vezet:
- Az egyedi azonosítók a beillesztéshez vezetnek.
- Duplikált azonosítók és a dokumentumazonosító az ID-re van állítva, ami upserthez vezet.
- A duplikált azonosítók és a dokumentumazonosító nem vezet hibához az első dokumentum után.
Ha menteni szeretné az összes dokumentumot, beleértve azokat is, amelyek duplikált azonosítóval rendelkeznek, nevezze át a lekérdezés azonosító mezőjét (az AS kulcsszó használatával). Hagyja, hogy az Azure Cosmos DB létrehozza az AZONOSÍTÓ mezőt, vagy cserélje le az azonosítót egy másik oszlop értékére (az AS kulcsszó vagy a Dokumentumazonosító beállítás használatával).
Adatparticionálás az Azure Cosmos DB-ben
Az Azure Cosmos DB automatikusan skálázza a partíciókat a számítási feladat alapján. Használj korlátlan konténereket az adatok partíciójához. Amikor a Stream Analytics korlátlan tárolókba ír, annyi párhuzamos írót használ, mint az előző lekérdezési lépés vagy bemeneti particionálási séma.
Feljegyzés
Az Azure Stream Analytics csak a legfelső szintű partíciókulcsokkal rendelkező korlátlan tárolókat támogatja. Például /region támogatott. A beágyazott partíciós kulcsok (például, /region/name) nem támogatottak.
A partíciókulcs kiválasztásától függően a következő figyelmeztetés jelenhet meg:
CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.
Válassz egy olyan partíciós kulcstulajdonságot, amelynek sok különböző értéke van, és a munkaterhelést egyenletesen oszlatja el ezekre az értékekre. A partíció természetes artefaktumaként egyetlen partíció maximális áteresztőképessége korlátozza azokat a kéréseket, amelyek ugyanazt a partíciós kulcsot érintik.
Az azonos partíciókulcs-értékhez tartozó dokumentumok tárolási mérete 20 GB-ra korlátozódik (a fizikai partícióméret korlátja 50 GB). Az ideális partíciós kulcs olyan, amely gyakran megjelenik szűrőként a lekérdezéseidben, és elég kardinalitással rendelkezik ahhoz, hogy a megoldásod skálázható legyen.
A Stream Analytics-lekérdezésekhez használt partíciókulcsoknak és az Azure Cosmos DB-nek nem kell azonosnak lenniük. Teljesen párhuzamos topológiák esetén használjuk az Input Partition kulcsotPartitionId, , mint a Stream Analytics lekérdezés partíciókulcsát, de ez a választás nem feltétlenül a Azure Cosmos DB konténer partíciókulcsához ajánlott.
A partíciókulcs az Azure Cosmos DB tárolt eljárásaiban és eseményindítóiban lévő tranzakciók határa is. Válaszd ki a partíciókulcsot, hogy a tranzakciókban együtt megjelenő dokumentumok ugyanazt a partíciókulcs értéket osztják meg. A particionálás az Azure Cosmos DB-ben című cikk további részleteket tartalmaz a partíciókulcs kiválasztásáról.
A fix Azure Cosmos DB konténerek esetén a Stream Analytics nem kínál lehetőséget a skáládozásra vagy kibővítésre, miután azok megteltek. Ezek felső korlátja 10 GB és 10 000 RU/s átviteli sebesség. Ha egy rögzített tárolóból korlátlan tárolóba szeretné migrálni az adatokat (például egy legalább 1000 RU/s-val és egy partíciókulcsmal rendelkezőt), használja az adatmigrálási eszközt vagy a változáscsatorna-kódtárat.
A több rögzített tárolóba való írás lehetősége elavult. Ne használd a Stream Analytics feladatod kiskálására.
Továbbfejlesztett átviteli sebesség az 1.2-es kompatibilitási szinttel
A kompatibilitási szint 1.2-es használatával a Stream Analytics támogatja a natív integrációt az Azure Cosmos DB-be történő tömeges íráshoz. Ezzel az integrációval a Stream Analytics hatékonyan ír az Azure Cosmos DB-be, miközben maximalizálja az áteresztőképességet és hatékonyan kezeli a korlátozó kéréseket.
A továbbfejlesztett írási mechanizmus új kompatibilitási szinten érhető el, mivel a upsert viselkedése eltér. Ha a 1.2 előtti szinteket használjuk, az upsert viselkedése az, hogy beillesztjük vagy egyesítjük a dokumentumot. Az 1.2 használatával az upsert működése úgy változik, hogy beszúrja vagy lecseréli a dokumentumot.
Az 1.2 előtti szintek használatakor a Stream Analytics egyéni tárolt eljárást használ a dokumentumok partíciókulcsonkénti tömeges upsertjéhez az Azure Cosmos DB-ben. Ott a Stream Analytics egy köteget tranzakcióként írja. Még akkor is, ha egyetlen rekord átmeneti hibába ütközik (szabályozás miatt), a Stream Analyticsnek újra kell próbálnia a teljes köteget. Ez a viselkedés lelassítja a helyzeteket még az ésszerű throttling-rel is.
Az alábbi példa két azonos Stream Analytics-feladatot mutat be, amely ugyanabból az Azure Event Hubs-bemenetből olvas be. Mindkét Stream Analytics-feladat teljes mértékben particionált egy átmenő lekérdezéssel, és azonos Azure Cosmos DB-tárolókba írható. A bal oldali metrikák az 1.0 kompatibilitási szinttel konfigurált feladatból származnak. A jobb oldali mutatók a 1.2-es verzióval konfigurált munkából származnak. Az Azure Cosmos DB-tároló partíciókulcsa egy egyedi GUID, amely a bemeneti eseményből származik.
Az Event Hubsba bejövő események sebessége kétszer akkora, mint amennyit az Azure Cosmos DB-tárolók (20 000 RU) fogadására konfigurálva vannak, ezért az Azure Cosmos DB-ben fojtásra lehet számítani. Az 1.2-vel rendelkező feladat azonban folyamatosan magasabb átviteli rátával (percenkénti kimeneti események) és alacsonyabb átlagos SU%-kihasználtsággal működik. A te környezetedben ez a különbség még néhány tényezőtől függ. Ezek a tényezők közé tartozik az eseményformátum kiválasztása, a bemeneti esemény/üzenet mérete, a partíciókulcsok és a lekérdezés.
Az 1.2 használatával a Stream Analytics intelligensebben használja az Azure Cosmos DB elérhető áteresztőképességének 100 százalékát, kevés újraküldéssel a korlátozás vagy a sebességkorlátozás miatt. Ez a viselkedés jobb élményt nyújt más számítási feladatok, például a tárolón egyszerre futó lekérdezések számára. Ha látni szeretné, hogy a Stream Analytics hogyan méretezhető fel fogadóként az Azure Cosmos DB-vel másodpercenként 1000-10 000 üzenethez, próbálja ki ezt az Azure-mintaprojektet.
Az Azure Cosmos DB kimenetének áteresztőképessége azonos, ha az 1.0 és 1.1 verziókat használjuk. Határozottan javasoljuk , hogy az 1.2-es kompatibilitási szintet használja a Stream Analyticsben az Azure Cosmos DB-vel.
Azure Cosmos DB-beállítások JSON-kimenethez
Amikor az Azure Cosmos DB-t kimenetként konfigurálod a Stream Analytics-ben, a következő tulajdonságok határozzák meg a kimenetet.
| Mező | Leírás |
|---|---|
| Kimeneti alias | Egy alias, amely erre a kimenetre hivatkozik a Stream Analytics-lekérdezésben. |
| Előfizetés | Az Azure-előfizetés. |
| Számlaazonosító | Az Azure Cosmos DB-fiók neve vagy végpont URI-ja. |
| Fiókkulcs | Az Azure Cosmos DB-fiók megosztott hozzáférési kulcsa. |
| Adatbázis | Az Azure Cosmos DB-adatbázis neve. |
| Konténer név | A tároló neve, például MyContainer. Egy névvel ellátott MyContainer tárolónak léteznie kell. |
| Dokumentumazonosító | Opcionális. Az oszlopnév a kimeneti eseményekben, amely egyedi kulcsként szolgál a beillesztési vagy frissítési műveletekhez. Ha üresen hagyod, a Stream Analytics minden eseményt beilleszt frissítés nélkül. |
Miután konfigurálta az Azure Cosmos DB-kimenetet, használhatja azt a lekérdezésben egy INTO utasítás céljaként. Amikor Azure Cosmos DB kimenetet használsz így, kifejezetten be kell állítanod a partíciós kulcsot.
A kimeneti rekordnak tartalmaznia kell egy kis- és nagybetűket megkülönböztető oszlopot, amelyet az Azure Cosmos DB partíciókulcsa után neveztek el. A nagyobb párhuzamosság érdekében az utasításhoz szükség lehet egy PARTÍCIÓ BY záradékra , amely ugyanazt az oszlopot használja.
Íme egy minta lekérdezés:
SELECT TollBoothId, PartitionId
INTO CosmosDBOutput
FROM Input1 PARTITION BY PartitionId
Hibakezelés és újrapróbálkozások
Ha átmeneti hiba, szolgáltatáskimaradás vagy korlátozás történik, miközben a Stream Analytics eseményeket küld az Azure Cosmos DB-be, a Stream Analytics korlátlan ideig újrapróbálkozik a művelet sikeres befejezése érdekében. De nem próbálkozik újra a Jogosulatlan (HTTP-hibakód: 401), Nem található (HTTP-hibakód: 404), Tiltott (HTTP-hibakód: 403) vagy Hibás kérés (HTTP-hibakód: 400) hibákra.
Gyakori problémák, amelyek miatt az Azure Cosmos DB kimenete meghibásodik
Számos feltétel okozhatja az Azure Cosmos DB kimenetének meghibásodását. A Stream Analytics kimeneti adatai megsérthetik a konténer egyedi indexkorlátozását, az PartitionKey oszlop nem létezhet, vagy az Id oszlop nem is létezik. Az egyedi indexkorlátozásokról további információért lásd: Egyedi kulcskorlátok az Azure Cosmos DB-ben.