Použití děleného grafu ve službě Azure Cosmos DB

PLATÍ PRO: Gremlin

Jednou z klíčových funkcí rozhraní API pro Gremlin ve službě Azure Cosmos DB je schopnost zpracovávat rozsáhlé grafy prostřednictvím horizontálního škálování. Kontejnery se můžou nezávisle škálovat z hlediska úložiště a propustnosti. Ve službě Azure Cosmos DB můžete vytvořit kontejnery, které je možné automaticky škálovat a ukládat data grafu. Data se automaticky vyrovná na základě zadaného klíče oddílu.

Dělení se provádí interně, pokud se očekává, že kontejner bude mít velikost větší než 20 GB nebo pokud chcete přidělit více než 10 000 jednotek žádostí za sekundu (RU). Data se automaticky rozdělí na oddíly na základě klíče oddílu, který zadáte. Klíč oddílu se vyžaduje, pokud vytváříte kontejnery grafu z Azure Portal nebo 3.x nebo vyšší verze ovladačů Gremlin. Klíč oddílu se nevyžaduje, pokud používáte ovladače Gremlin verze 2.x nebo nižší.

Stejné obecné principy jako mechanismus dělení služby Azure Cosmos DB platí pro několik níže popsaných optimalizací specifických pro grafy.

Dělení grafů.

Mechanismus dělení grafů

Následující pokyny popisují fungování strategie dělení ve službě Azure Cosmos DB:

  • Vrcholy i hrany se ukládají jako dokumenty JSON.

  • Vrcholy vyžadují klíč oddílu. Tento klíč určí, ve kterém oddílu bude vrchol uložen prostřednictvím algoritmu hash. Název vlastnosti klíče oddílu se definuje při vytváření nového kontejneru a má formát : /partitioning-key-name.

  • Hrany budou uloženy se zdrojovým vrcholem. Jinými slovy, pro každý vrchol jeho klíč oddílu definuje, kde jsou uloženy spolu s jeho odchozími hrany. Tato optimalizace se provádí, aby se při použití out() kardinality v grafových dotazech zabránilo dotazům napříč oddíly.

  • Hrany obsahují odkazy na vrcholy, na které odkazují. Všechny hrany jsou uložené s klíči oddílů a ID vrcholů, na které odkazují. Díky tomuto výpočtu jsou dotazy všech out() směrů vždy dotazem s vymezeným oddílem, a ne slepým dotazem napříč oddíly.

  • Grafové dotazy musí zadat klíč oddílu. Pokud chcete plně využít výhod horizontálního dělení ve službě Azure Cosmos DB, měl by se klíč oddílu zadat při výběru jednoho vrcholu, kdykoli je to možné. Níže jsou uvedené dotazy pro výběr jednoho nebo více vrcholů v děleném grafu:

    • /id a /label nejsou podporované jako klíče oddílů pro kontejner v rozhraní API pro Gremlin.

    • Vyberte vrchol podle ID a pak pomocí .has() kroku určete vlastnost klíče oddílu:

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Výběr vrcholu zadáním řazené kolekce členů včetně hodnoty klíče oddílu a ID:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Výběr sady vrcholů s jejich ID a zadání seznamu hodnot klíče oddílu:

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • Použití strategie dělení na začátku dotazu a určení oddílu pro obor zbývající části dotazu Gremlin:

      g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
      

Osvědčené postupy při používání dělených grafů

Pomocí následujících pokynů zajistíte výkon a škálovatelnost při používání dělených grafů s neomezeným počtem kontejnerů:

  • Při dotazování vrcholu vždy zadejte hodnotu klíče oddílu. Získání vrcholu ze známého oddílu je způsob, jak dosáhnout výkonu. Všechny následné operace sousedství budou vždy vymezeny na oddíl, protože hrany obsahují ID odkazu a klíč oddílu na cílové vrcholy.

  • Při dotazování na hrany použijte odchozí směr, kdykoli je to možné. Jak je uvedeno výše, hrany jsou uloženy se zdrojovými vrcholy v odchozím směru. Proto se pravděpodobnost použití dotazů napříč oddíly minimalizuje, když jsou data a dotazy navrženy s ohledem na tento vzor. Naopak, in() dotaz bude vždy nákladný fan-out dotaz.

  • Zvolte klíč oddílu, který bude rovnoměrně distribuovat data mezi oddíly. Toto rozhodnutí do značné míry závisí na datovém modelu řešení. Přečtěte si další informace o vytvoření vhodného klíče oddílu v tématu Dělení a škálování ve službě Azure Cosmos DB.

  • Optimalizujte dotazy pro získání dat v rámci hranic oddílu. Optimální strategie dělení by byla zarovnaná se vzory dotazování. Dotazy, které získávají data z jednoho oddílu, poskytují nejlepší možný výkon.

Další kroky

Dále si můžete přečíst následující články: