Particionált gráfok használata az Azure Cosmos DB-ben
A KÖVETKEZŐKRE VONATKOZIK: Gremlin
Az Azure Cosmos DB Gremlin API-jának egyik fő funkciója a nagyméretű gráfok vízszintes skálázáson keresztüli kezelése. A tárolók a tárolás és az átviteli sebesség szempontjából egymástól függetlenül méretezhetők. Létrehozhat tárolókat az Azure Cosmos DB-ben, amelyek automatikusan skálázhatók gráfadatok tárolására. Az adatok automatikusan kiegyensúlyozottak a megadott partíciókulcs alapján.
A particionálás belsőleg történik, ha a tároló mérete várhatóan meghaladja a 20 GB-ot, vagy ha másodpercenként több mint 10 000 kérelemegységet (kérelemegységet) szeretne lefoglalni. A rendszer automatikusan particionálja az adatokat a megadott partíciókulcs alapján. Partíciókulcsra akkor van szükség, ha a Gremlin-illesztőprogramok Azure Portal vagy 3.x vagy újabb verzióiból hoz létre gráftárolókat. A Partíciókulcs nem szükséges, ha a Gremlin-illesztőprogramok 2.x vagy alacsonyabb verzióját használja.
Az Azure Cosmos DB particionálási mechanizmusának általános alapelvei az alábbiakban ismertetett néhány gráfspecifikus optimalizálással érvényesek.
Gráfparticionálási mechanizmus
Az alábbi irányelvek ismertetik, hogyan működik a particionálási stratégia az Azure Cosmos DB-ben:
A csúcsok és az élek JSON-dokumentumokként vannak tárolva.
A csúcspontokhoz partíciókulcs szükséges. Ez a kulcs határozza meg, hogy a csúcspont melyik partícióban lesz tárolva egy kivonatoló algoritmuson keresztül. A partíciókulcs tulajdonságának neve új tároló létrehozásakor van definiálva, és formátuma a következő:
/partitioning-key-name
.Az élek a forrás csúcspontjukkal lesznek tárolva. Más szóval minden csúcsponthoz a partíciókulcs határozza meg, hogy hol vannak tárolva a kimenő élekkel együtt. Ez az optimalizálás azért történik, hogy elkerülje a partíciók közötti lekérdezéseket, amikor a számosságot használja a
out()
gráfos lekérdezésekben.Az élek azokra a csúcsokra mutató hivatkozásokat tartalmaznak, amelyekre mutatnak. Minden él a partíciókulcsokkal és a csúcspontok azonosítóival van tárolva, amelyekre mutatnak. Ezzel a számítással minden
out()
irány lekérdezés mindig hatókörrel rendelkező particionált lekérdezés lesz, nem pedig vak keresztpartíciós lekérdezés.A gráf lekérdezéseinek meg kell adniuk egy partíciókulcsot. Az Azure Cosmos DB horizontális particionálásának teljes kihasználásához a partíciókulcsot egyetlen csúcspont kijelölésekor kell megadni, amikor csak lehetséges. Az alábbiakban egy vagy több csúcspontot választunk ki egy particionált gráfban:
/id
és/label
nem támogatott partíciókulcsként a Gremlin API-ban lévő tárolókhoz.Válasszon ki egy csúcspontot azonosító szerint, majd a
.has()
lépéssel adja meg a partíciókulcs tulajdonságát:g.V('vertex_id').has('partitionKey', 'partitionKey_value')
Csúcspont kiválasztása rekord megadásával, beleértve a partíciókulcs értékét és az azonosítót:
g.V(['partitionKey_value', 'vertex_id'])
Csúcspontok halmazának kiválasztása az azonosítókkal és a partíciókulcs-értékek listájának megadása:
g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
A lekérdezés elején található partícióstratégia használata és egy partíció megadása a Gremlin-lekérdezés többi részének hatóköréhez:
g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
Ajánlott eljárások particionált gráfok használatakor
A következő irányelvekkel biztosíthatja a teljesítményt és a méretezhetőséget a korlátlan tárolókkal rendelkező particionált gráfok használatakor:
Csúcspont lekérdezésekor mindig adja meg a partíciókulcs értékét. A csúcspont egy ismert partícióról való lekérése a teljesítmény elérésének egyik módja. Az ezt követő szomszédos műveletek mindig egy partícióra lesznek kiterjesztve, mivel az Edge-k referenciaazonosítót és partíciókulcsot tartalmaznak a cél csúcspontjaikhoz.
Használja a kimenő irányt az élek lekérdezéséhez, amikor csak lehetséges. Ahogy fentebb említettük, a rendszer az éleket a forrás csúcsaival együtt tárolja a kimenő irányban. Így a partíciók közötti lekérdezések kihasználtsága minimálisra csökken, ha az adatok és a lekérdezések ezt a mintát szem előtt tartva vannak kialakítva. Éppen ellenkezőleg, a
in()
lekérdezés mindig drága fan-out lekérdezés lesz.Válasszon egy partíciókulcsot, amely egyenletesen osztja el az adatokat a partíciók között. Ez a döntés nagymértékben függ a megoldás adatmodelljától. További információ a megfelelő partíciókulcs létrehozásáról a Particionálás és skálázás az Azure Cosmos DB-ben című témakörben.
Lekérdezések optimalizálása a partíciók határain belüli adatok lekéréséhez. Az optimális particionálási stratégia a lekérdezési mintákhoz lenne igazítva. Azok a lekérdezések, amelyek egyetlen partícióról szereznek be adatokat, a lehető legjobb teljesítményt nyújtják.
Következő lépések
Ezután a következő cikkeket olvashatja el:
- Tudnivalók az Azure Cosmos DB particionálásáról és skálázásáról.
- További információ a Gremlin API Gremlinhez való támogatásáról.
- További információ a Gremlin API bemutatása című témakörben.