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.
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:
- Seznamte se s oddíly a škálováním ve službě Azure Cosmos DB.
- Přečtěte si o podpoře Gremlin v rozhraní API pro Gremlin.
- Další informace o úvodu k rozhraní API pro Gremlin