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ás.

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: