Co je Azure Cosmos DB pro Apache Gremlin?

PLATÍ PRO: Gremlin

Azure Cosmos DB je plně spravovaná noSQL a relační databáze pro moderní vývoj aplikací.

Azure Cosmos DB pro Apache Gremlin je služba grafové databáze, která se dá použít k ukládání obrovských grafů s miliardami vrcholů a hran. Můžete se dotazovat na grafy s latencí milisekund a snadno vyvíjet strukturu grafu. Rozhraní API pro Gremlin je založené na Apache TinkerPop, architektuře grafových výpočtů, která používá dotazovací jazyk Gremlin.

Důležité

Grafový modul Azure Cosmos DB úzce dodržuje specifikaci Apache TinkerPop. V podrobnostech implementace ale existují určité rozdíly, které jsou specifické pro službu Azure Cosmos DB. Některé funkce podporované Apache TinkerPop nejsou ve službě Azure Cosmos DB k dispozici. Další informace o nepodporovaných funkcích najdete v článku o kompatibilitě s Apache TinkerPop .

Rozhraní API pro Gremlin kombinuje výkon algoritmů grafových databází s vysoce škálovatelnou a spravovanou infrastrukturou. Tento přístup poskytuje jedinečné a flexibilní řešení běžných problémů s daty spojenými s nepružnými nebo relačními omezeními.

Tip

Chcete vyzkoušet rozhraní API pro Gremlin bez závazku? Vytvořte účet služby Azure Cosmos DB pomocí bezplatného vyzkoušení služby Azure Cosmos DB .

Výhody rozhraní API pro Gremlin

Rozhraní API pro Gremlin přidalo výhody, které jsou založené na službě Azure Cosmos DB:

  • Elasticky škálovatelná propustnost a úložiště: Grafy v reálném světě se musí škálovat nad rámec kapacity jednoho serveru. Azure Cosmos DB podporuje horizontálně škálovatelné grafové databáze, které můžou mít neomezenou velikost z hlediska úložiště a zřízené propustnosti. S rostoucím škálováním grafové databáze se data automaticky distribuují pomocí dělení grafu.

  • Replikace ve více oblastech: Azure Cosmos DB dokáže automaticky replikovat data grafu do libovolné oblasti Azure po celém světě. Globální replikace zjednodušuje vývoj aplikací, které vyžadují globální přístup k datům. Kromě minimalizace latence čtení a zápisu kdekoli na světě poskytuje Azure Cosmos DB mechanismus regionálního převzetí služeb při selhání. Tento mechanismus může zajistit kontinuitu vaší aplikace ve výjimečných případech přerušení služby v určité oblasti.

  • Rychlé dotazy a procházení s nejrozšířenějším standardem grafových dotazů: Ukládejte heterogenní vrcholy a hrany a dotazujte se na ně pomocí známé syntaxe Gremlin. Gremlin je imperativní funkční dotazovací jazyk, který poskytuje bohaté rozhraní pro implementaci běžných algoritmů grafů. Rozhraní API pro Gremlin umožňuje bohaté dotazy a procházení v reálném čase, aniž by bylo nutné zadávat rady schématu, sekundární indexy nebo zobrazení. Další informace najdete v grafech dotazů pomocí Gremlin.

  • Plně spravovaná grafová databáze: Azure Cosmos DB eliminuje potřebu správy prostředků databáze a počítačů. Většina stávajících platforem grafových databází je vázána na omezení jejich infrastruktury a často vyžaduje vysokou úroveň údržby, aby se zajistila její provoz. Cosmos DB jako plně spravovaná služba eliminuje potřebu správy virtuálních počítačů, aktualizace softwaru runtime, správy horizontálního dělení nebo replikace nebo řešení složitých upgradů datové vrstvy. Každý graf je automaticky zálohovaný a chráněný proti selháním v dané oblasti. Tato správa umožňuje vývojářům soustředit se na poskytování hodnoty aplikace místo provozu a správy grafových databází.

  • Automatické indexování: Ve výchozím nastavení rozhraní API pro Gremlin automaticky indexuje všechny vlastnosti v uzlech (označované také jako vrcholy) a hrany v grafu a neočekává ani nevyžaduje žádné schéma ani vytvoření sekundárních indexů. Další informace najdete v tématu indexování ve službě Azure Cosmos DB.

  • Kompatibilita s Apache TinkerPop: Rozhraní API pro Gremlin podporuje open source standard Apache TinkerPop. Standard Apache TinkerPop má řadu ekosystému aplikací a knihoven, které lze snadno integrovat s rozhraním API.

  • Nastavitelné úrovně konzistence: Azure Cosmos DB poskytuje pět jasně definovaných úrovní konzistence, které umožňují dosáhnout správného kompromisu mezi konzistencí a výkonem vaší aplikace. Pro dotazy a operace čtení nabízí služba Azure Cosmos DB pět různých úrovní konzistence: silná, omezená neaktuálnost, relace, konzistentní předpona a konečný výsledek. Tyto podrobné a jasně definované úrovně konzistence umožňují zvolit vhodný kompromis mezi konzistencí, dostupností a latencí. Další informace najdete v tématu Vyladěné úrovně konzistence dat ve službě Azure Cosmos DB.

Běžné scénáře pro rozhraní API pro Gremlin

Tady je několik scénářů, ve kterých může být užitečná podpora grafů služby Azure Cosmos DB:

  • Sociální sítě / Zákazník 365: Kombinováním dat o vašich zákaznících a jejich interakcích s jinými lidmi můžete vyvíjet přizpůsobená prostředí, předpovídat chování zákazníků nebo spojit lidi s ostatními s podobnými zájmy. Azure Cosmos DB lze použít ke správě sociálních sítí a sledování zákaznických preferencí a dat.

  • Moduly doporučení: Tento scénář se běžně používá v maloobchodě. Zkombinováním informací o produktech, uživatelích a interakcích uživatelů (jako je nákup, procházení nebo hodnocení položky) můžete vytvořit přizpůsobená doporučení. Pro tyto scénáře je ideální nízká latence, elastické škálování a nativní podpora grafů služby Azure Cosmos DB.

  • Geoprostorová: Mnoho aplikací v telekomunikačních, logistických a cestovních plánech musí najít lokalitu zájmu v rámci oblasti nebo najít nejkratší/optimální trasu mezi dvěma místy. Azure Cosmos DB se k řešení těchto problémů skvěle hodí.

  • Internet věcí: Díky síti a připojením mezi zařízeními IoT, která jsou modelovaná jako graf, můžete lépe porozumět stavu zařízení a prostředků. Zároveň zjistíte, jak změny v jedné části sítě mohou potenciálně ovlivnit jinou část.

Úvod do grafových databází

Data, která existují v reálném světě, jsou přirozeně propojená. Tradiční modelování dat se zaměřuje na definování entit samostatně a výpočty vztahů za běhu. I když má tento model své výhody, vysoce propojená data mohou být náročná na správu v rámci omezení.

Přístup k grafové databázi využívá místo toho trvalé vztahy ve vrstvě úložiště, což vede k vysoce efektivním operacím načítání grafů. Rozhraní API pro Gremlin podporuje model grafu vlastností.

Objekty grafu vlastností

Graf vlastností je struktura složená z vrcholů a hran. Oba objekty můžou mít libovolný počet dvojic klíč-hodnota jako vlastnosti.

  • Vrcholy/uzly: Vrcholy označují diskrétní entity, jako je osoba, místo nebo událost.

  • Hrany/relace: Hrany označují relace mezi vrcholy. Například osoba může znát jinou osobu, být zapojena do události nebo nedávno byla na místě.

  • Vlastnosti: Vlastnosti vyjadřují informace (nebo metadata) o vrcholech a hranách. Ve vrcholech nebo hranách může být libovolný počet vlastností a lze je použít k popisu a filtrování objektů v dotazu. Příklady vlastností zahrnují vrchol, který má název a věk, nebo hranu, která může mít časové razítko nebo váhu.

  • Popisek – Popisek je název nebo identifikátor vrcholu nebo okraje. Popisky můžou seskupit několik vrcholů nebo hran tak, aby všechny vrcholy nebo hrany ve skupině měly určitý popisek. Graf může mít například více vrcholů s popiskem "person".

Grafové databáze jsou často zahrnuty do kategorie NoSQL nebo nerelační databáze, protože není závislá na schématu nebo omezeném datovém modelu. Tato absence schématu umožňuje modelování a ukládání propojených struktur přirozeně a efektivně.

Příklad grafové databáze

Ukázkový graf vám pomůže pochopit, jak lze v jazyce Gremlin vyjádřit dotazy. Na následujícím obrázku je znázorněna obchodní aplikace, která spravuje data o uživatelích, zájmech a zařízeních v podobě grafu.

Ukázkový graf vlastností zobrazující osoby, zařízení a zájmy

Tento graf obsahuje následující typy vrcholů . Tyto typy se také označují jako popisky v Gremlin:

  • Lidé: Graf má tři osoby; Robine, Thomase a Bena.

  • Zájmy: Jejich zájmy, v tomto příkladu, zahrnují hru fotbalu.

  • Zařízení: Zařízení, která uživatelé používají.

  • Operační systémy: Operační systémy, na kterých zařízení běží.

  • Místo: Místo, kde jsou zařízení přístupná.

Vztahy mezi těmito entitami představujeme prostřednictvím následujících hraničních typů:

  • : Reprezentovat znalost. Například "Thomas zná Robina".

  • Zájem: Představuje zájmy lidí v našem grafu. Například "Ben má zájem o fotbal".

  • SpuštěníOS: Představuje, jaký operační systém zařízení běží. Například "Přenosný počítač používá operační systém Windows".

  • Použití: Představuje zařízení, které osoba používá. Například "Robin používá telefon Motorola s pořadovým číslem 77".

  • Umístění: Představuje umístění, ze kterého jsou zařízení přístupná.

Konzola Gremlin je interaktivní terminál, který nabízí Apache TinkerPop a tento terminál slouží k interakci s daty grafu. Další informace najdete v rychlém startu konzoly Gremlin. K jejich provedení můžete také použít ovladače Gremlin na platformě dle vlastního výběru (Java, Node.js, Python nebo .NET). Následující příklady ukazují, jak spouštět dotazy na tato data grafu pomocí konzoly Gremlin.

Nejprve se podíváme na vytvoření, čtení, aktualizaci a odstranění (CRUD). Následující příkaz Gremlin vloží vrchol Thomase do grafu s několika vlastnostmi:

g.addV('person').
  property('id', 'thomas.1').
  property('firstName', 'Thomas').
  property('lastName', 'Andersen').
  property('age', 44)

Tip

Pokud sledujete společně s těmito příklady, můžete při vytváření grafu použít některou z těchto vlastností (age, firstName, lastName) jako klíč oddílu. Vlastnost id není v grafu podporovaná jako klíč oddílu.

V dalším kroku následující příkaz Gremlin vloží mezi Thomase a Robina ohraničí.

g.V('thomas.1').
  addE('knows').
  to(g.V('robin.1'))

Následující dotaz vrátí vrcholy osob v sestupném pořadí křestních jmen:

g.V().
  hasLabel('person').
  order().
  by('firstName', decr)

Graf je užitečný zejména v případě, kdy potřebujete získat odpověď na otázky, jako je Které operační systémy přátelé Thomase používají? Tuto procházení Gremlin můžete spustit, abyste získali tyto informace z grafu:

g.V('thomas.1').
  out('knows').
  out('uses').
  out('runsos').
  group().
  by('name').
  by(count())

Další kroky