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

PLATÍ PRO: Skřítek

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 škálovat nezávisle na úložišti a propustnosti. Ve službě Azure Cosmos DB můžete vytvářet kontejnery, které se dají automaticky škálovat, aby ukládaly data grafu. Data se automaticky vyrovná na základě zadaného klíče oddílu.

Dělení probíhá interně, pokud se očekává, že kontejner uloží více než 20 GB velikosti nebo pokud chcete přidělit více než 10 000 jednotek žádostí za sekundu (RU). Data se automaticky rozdělí na základě zadaného klíče oddílu. Klíč oddílu se vyžaduje, pokud vytváříte kontejnery grafů z webu Azure Portal nebo ovladače Gremlin verze 3.x nebo vyšší. Klíč oddílu se nevyžaduje, pokud používáte ovladače Gremlin verze 2.x nebo nižší.

Stejné obecné principy z mechanismu dělení služby Azure Cosmos DB platí s několika optimalizacemi specifickými pro grafy, které jsou popsané níže.

Dělení grafů

Mechanismus dělení grafů

Následující pokyny popisují, jak strategie dělení ve službě Azure Cosmos DB funguje:

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

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

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

  • Hrany obsahují odkazy na vrcholy, na které odkazují. Všechny hrany se ukládají s klíči oddílů a ID vrcholů, na které odkazují. Díky tomuto výpočtu budou všechny out() směrové dotazy vždy rozděleným dotazem s vymezeným oborem, a ne jako nevidomý dotaz 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ěli byste klíč oddílu zadat při výběru jednoho vrcholu, kdykoli je to možné. Následují 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.

    • Výběr vrcholu podle ID a následné použití .has() kroku k určení vlastnosti 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 oddílu na začátku dotazu a zadání oddílu pro obor zbytku dotazu Gremlin:

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

Osvědčené postupy při použití děleného grafu

Následující pokyny vám použijí k zajištění výkonu a škálovatelnosti při používání dělených grafů s neomezenými kontejnery:

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

  • Při dotazování okrajů použijte výstupní směr, kdykoli je to možné. Jak je uvedeno výše, hrany jsou uloženy s jejich zdrojovými vrcholy v odchozím směru. Takže šance, že se uchýlíte k dotazům napříč oddíly, se minimalizují, když jsou data a dotazy navrženy s ohledem na tento vzor. Naopak in() dotaz bude vždy nákladným fanouškem.

  • Zvolte klíč oddílu, který rovnoměrně distribuuje data mezi oddíly. Toto rozhodnutí silně 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 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 sladěna 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: