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

PLATÍ PRO: Gremlin API

Jednou z klíčových funkcí rozhraní Gremlin API 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. Kontejnery můžete vytvářet ve službě Azure Cosmos DB, které se dají automaticky škálovat pro ukládání dat grafu. Data jsou automaticky vyvážená na základě zadaného klíče oddílu.

Dělení probíhá interně, pokud se u kontejneru očekává, že bude 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 základě zadaného klíče oddílu. Klíč oddílu se vyžaduje, pokud vytváříte kontejnery grafů z Azure Portal nebo 3.x nebo vyšších verzí ovladačů Gremlin. 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í grafu

Mechanismus dělení grafu

Následující pokyny popisují, jak funguje 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 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í, aby se při použití out() kardinality v dotazech grafu vyhnuly dotazům napříč oddíly.

  • Hrany obsahují odkazy na vrcholy, na které odkazují. Všechny hrany se ukládají s klíči oddílu a ID vrcholů, na které ukazují. Tento výpočet provádí všechny out() směrové dotazy vždy jako dělený dotaz s vymezeným oborem, nikoli nevidomý dotaz napříč oddíly.

  • Grafové dotazy musí zadat klíč oddílu. Aby bylo možné plně využít horizontální 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ásleduje dotaz 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í Gremlin API.

    • Výběrem vrcholu 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ů se svými ID a určení 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 určení 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 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 k cílovým vrcholům.

  • Při dotazování okrajů vždy, když je to možné, použijte směr odchozí pošty. 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ěná 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: