Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Important
Hledáte databázové řešení pro scénáře ve velkém měřítku s 99,999% smlouvou o úrovni služeb (SLA), okamžitým automatickým škálováním a automatickým převzetím služeb při selhání napříč několika oblastmi? Zvažte Azure Cosmos DB pro NoSQL.
Chcete implementovat graf online analytického zpracování (OLAP) nebo migrovat existující aplikaci Apache Gremlin? Zvažte Graph v Microsoft Fabricu.
Azure Cosmos DB podporuje Apache Tinkerpop jazyk procházení grafu, označovaný jako Gremlin. Pomocí jazyka Gremlin můžete vytvářet grafové entity (vrcholy a okraje), upravovat vlastnosti v rámci těchto entit, provádět dotazy a přechody a odstraňovat entity.
Azure Cosmos DB modul Graphu úzce sleduje specifikaci kroků procházení Apache TinkerPop, ale implementace je specifická pro Azure Cosmos DB. V tomto článku poskytujeme rychlý návod pro Gremlin a výčet funkcí Gremlin podporovaných rozhraním API pro Gremlin.
Kompatibilní klientské knihovny
Následující tabulka ukazuje oblíbené ovladače Gremlin, které můžete použít pro Azure Cosmos DB:
| Download | Source | Začínáme | Podporovaná/doporučená verze konektoru |
|---|---|---|---|
| .NET | Gremlin.NET na GitHub | Kreate Graph pomocí .NET | 3.4.13 |
| Java | Gremlin JavaDoc | Kreate Graph pomocí Java | 3.4.13 |
| Python | Gremlin-Python na GitHub | Kreate Graph pomocí Python | 3.4.13 |
| Konzola Gremlin | Dokumentace k TinkerPop | Vytvoření grafu pomocí konzoly Gremlin | 3.4.13 |
| Node.js | Gremlin-JavaScript na GitHubu | Vytvoření grafu pomocí jazyka Node.js | 3.4.13 |
| PHP | Gremlin-PHP GitHub | Vytvoření grafu pomocí jazyka PHP | 3.1.0 |
| Go | Go | Tuto knihovnu vytvářejí externí přispěvatelé. Tým Azure Cosmos DB nenabízí žádnou podporu ani knihovnu neudržuje. |
Note
Verze klientského ovladače Gremlin pro verzi 3.5.*, 3.6.* mají známé problémy s kompatibilitou, proto doporučujeme používat nejnovější podporované verze ovladače 3.4.* uvedené výše. Tato tabulka bude aktualizována, pokud byly problémy s kompatibilitou vyřešeny pro tyto novější verze ovladačů.
Podporované objekty grafu
TinkerPop je standard, který zahrnuje širokou řadu grafových technologií. Proto má standardní terminologii popisující, které funkce poskytovatel grafu nabízí. Azure Cosmos DB poskytuje trvalou, vysokou souběžnost a zapisovatelnou grafovou databázi, kterou je možné rozdělit na více serverů nebo clusterů.
Následující tabulka uvádí funkce TinkerPop implementované Azure Cosmos DB:
| Kategorie | implementace Azure Cosmos DB | Poznámky |
|---|---|---|
| Funkce grafů | Poskytuje trvalost a souběžný přístup. Navrženo k podpoře transakcí. | Počítačové metody je možné implementovat prostřednictvím konektoru Spark. |
| Proměnné vlastnosti | Podporuje logickou hodnotu, celé číslo, bajt, Double, Float, Long, String. | Podporuje primitivní typy, prostřednictvím datového modelu je kompatibilní s komplexními typy. |
| Vlastnosti vrcholů | Podporuje RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty. | Podporuje vytváření, upravování a odstraňování vrcholů. |
| Vlastnosti vrcholů | StringIds, UserSuppliedIds, AddProperty (Přidat vlastnost), RemoveProperty (Odebrat vlastnost), BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Podporuje vytváření, úpravy a odstraňování vlastností vrcholů. |
| Funkce okrajů | PřidatHrany, OdebratHrany, ŘetězcovéId, UživatelskyPoskytnutéId, PřidatVlastnost, OdebratVlastnost | Podporuje vytváření, úpravy a odstraňování okrajů. |
| Funkce vlastností okrajů | Vlastnosti, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Podporuje vytváření, úpravy a odstraňování vlastností okrajů. |
Formát drátu Gremlin
Azure Cosmos DB při vracení výsledků z operací Gremlin používá formát JSON. Azure Cosmos DB aktuálně podporuje formát JSON. Například následující ukázka zobrazuje JSONovou reprezentaci vrcholu vráceného klientovi z Azure Cosmos DB.
{
"id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0",
"label": "person",
"type": "vertex",
"outE": {
"knows": [
{
"id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef",
"inV": "04779300-1c8e-489d-9493-50fd1325a658"
},
{
"id": "21984248-ee9e-43a8-a7f6-30642bc14609",
"inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc"
}
]
},
"properties": {
"firstName": [
{
"value": "Thomas"
}
],
"lastName": [
{
"value": "Andersen"
}
],
"age": [
{
"value": 45
}
]
}
}
Vlastnosti používané ve formátu JSON pro vrcholy jsou popsány níže:
| Vlastnictví | Description |
|---|---|
id |
Identifikátor vrcholu. Musí být jedinečný (v kombinaci s hodnotou _partition , pokud je k dispozici). Pokud není zadána žádná hodnota, bude automaticky přiřazen identifikátor GUID. |
label |
Popisek vrcholu. Tato vlastnost slouží k popisu typu entity. |
type |
Slouží k odlišení vrcholů od jiných než grafových dokumentů. |
properties |
Sada uživatelem definovaných vlastností přidružených k vrcholu. Každá vlastnost může mít více hodnot. |
_partition |
Klíč oddílu vrcholu. Používá se pro dělení grafů. |
outE |
Tato vlastnost obsahuje seznam odchozích hran z vrcholu. Ukládání informací o sousedství spolu s vrcholem umožňuje rychlé procházení. Hrany jsou seskupeny podle svých štítků. |
Každá vlastnost může ukládat více hodnot v rámci pole.
| Vlastnictví | Description |
|---|---|
value |
Hodnota vlastnosti |
Hrana obsahuje následující informace, které usnadňují navigaci do ostatních částí grafu.
| Vlastnictví | Description |
|---|---|
id |
ID okraje. Musí být jedinečný (v kombinaci s hodnotou _partition , pokud je k dispozici) |
label |
Popisek okraje. Tato vlastnost je volitelná a slouží k popisu typu vztahu. |
inV |
Tato vlastnost obsahuje seznam vrcholů pro okraj. Ukládání informací o sousedství spolu s hranou umožňuje rychlé procházení. Vrcholy jsou seskupeny podle svých štítků. |
properties |
Sada uživatelem definovaných vlastností přidružených k okraji. |
Kroky v jazyce Gremlin
Teď se podíváme na kroky Gremlin podporované Azure Cosmos DB. Úplnou referenci ke Gremlinu najdete v referenční příručce TinkerPop.
| krokovat | Description | Dokumentace TinkerPop 3.2 |
|---|---|---|
addE |
Přidá hranu mezi dva vrcholy. | přidat krok |
addV |
Přidá do grafu vrchol. | addV step |
and |
Zajišťuje, že všechna procházení vrátí hodnotu. | a krok |
as |
Modulátor kroku pro přiřazení proměnné k výstupu kroku. | jako krok |
by |
Modulátor kroku používaný s krokem group a order. |
krok za krokem |
coalesce |
Vrátí první procházení, které poskytne výsledek. | krok slučování |
constant |
Vrátí konstantní hodnotu. Používá se s coalesce. |
konstantní krok |
count |
Vrátí počet procházení. | krok počítání |
dedup |
Vrátí hodnoty s odebranými duplicitními objekty. | Krok odstranění duplicitních dat |
drop |
Zahodí hodnoty (vrchol/hrana). | odsazení kroku |
executionProfile |
Vytvoří popis všech operací vygenerovaných provedeným krokem Gremlin. |
executionProfile krok |
fold |
Slouží jako bariéra, která vypočítá agregaci výsledků. | skládací krok |
group |
Seskupí hodnoty na základě zadaných popisků. | krok skupiny |
has |
Slouží k filtrování vlastností, vrcholů a okrajů. Podporuje varianty hasLabel, hasId, hasNot a has. |
má krok |
inject |
Vloží hodnoty do streamu. | krok injekce |
is |
Slouží k filtrování pomocí logického výrazu. | je krok |
limit |
Slouží k omezení počtu položek v procházení. | krok limitu |
local |
Lokálně obaluje oddíl procházení podobně jako u vnořeného dotazu. | místní krok |
not |
Slouží k vytvoření negace filtru. | nepostupovat |
optional |
Vrátí výsledek zadaného procházení, pokud vrací výsledek, jinak vrátí volající element. | volitelný krok |
or |
Zajišťuje, že alespoň jedno procházení vrátí hodnotu. | nebo krok |
order |
Vrátí výsledky v zadaném pořadí řazení. | krok objednávky |
path |
Vrátí úplnou cestu procházení. | krok cesty |
project |
Zobrazí vlastnosti jako mapu. | krok projektu |
properties |
Vrátí vlastnosti zadaných štítků. | krok vlastností |
range |
Vyfiltruje zadaný rozsah hodnot. | krok rozsahu |
repeat |
Opakuje krok po zadaný počet opakování. Slouží k vytváření cyklů. | opakujte krok |
sample |
Slouží k zobrazení ukázkových výsledků z procházení. | ukázkový krok |
select |
Slouží k zobrazení výsledků z procházení. | výběr kroku |
store |
Slouží k zobrazení neblokujících agregací z procházení. | krok ukládání |
TextP.startingWith(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát pro krok has(), aby odpovídala vlastnosti se začátkem daného řetězce. |
TextP predikáty |
TextP.endingWith(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát kroku has(), aby porovnávala vlastnost s koncem daného řetězce. |
TextP predikáty |
TextP.containing(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát pro krok has(), aby odpovídala vlastnosti s obsahem daného řetězce. |
TextP predikáty |
TextP.notStartingWith(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát pro krok has(), aby odpovídala vlastnosti, která nezačíná daným řetězcem. |
TextP predikáty |
TextP.notEndingWith(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát kroku has(), aby shodovala se s vlastností, která nekončí daným řetězcem. |
TextP predikáty |
TextP.notContaining(string) |
Funkce filtrování řetězců Tato funkce se používá jako predikát kroku has() pro přiřazení vlastnosti, která neobsahuje daný řetězec. |
TextP predikáty |
tree |
Agreguje cesty z vrcholu do stromu. | krok ve stromové struktuře |
unfold |
Rozbalit iterátor po krocích. | rozbalit krok |
union |
Sloučí výsledky z více procházení. | sjednocovací krok |
V |
Zahrnuje kroky nutné pro procházení mezi vrcholy a okraji: V, E, out, in, both, outE, inE, bothE, outV, inV, bothV a otherV. |
vrcholové kroky |
where |
Slouží k filtrování výsledků z procházení. Podporuje operátory eq, neq, lt, lte, gt, gte a between. |
kde krok |
Modul optimalizovaný pro zápis poskytovaný Azure Cosmos DB ve výchozím nastavení podporuje automatické indexování všech vlastností v rámci vrcholů a hran. Proto se dotazy s filtry, rozsahové dotazy, řazení nebo agregace u všech vlastností zpracovávají z indexu a efektivně předávají. Další informace o tom, jak funguje indexování v Azure Cosmos DB, najdete v našem dokumentu o schéma-agnostickém indexování.
Rozdíly v chování
- Azure Cosmos DB stroj Graphu běží šířkové prohledávání, zatímco TinkerPop Gremlin je hloubkové prohledávání. Toto chování dosahuje lepšího výkonu v horizontálně škálovatelném systému, jako je Azure Cosmos DB.
Nepodporované funkce
Gremlin Bytecode je na konkrétním programovacím jazyku nezávislá specifikace pro procházení grafů. Azure Cosmos DB Graph ho zatím nepodporuje. Použijte funkci
GremlinClient.SubmitAsync()a předejte procházení jako textový řetězec.property(set, 'xyz', 1)kardinalita sady se dnes nepodporuje. Místo toho použijteproperty(list, 'xyz', 1). Další informace najdete v tématu Vlastnosti vrcholů s TinkerPop.Tento
match()krok není momentálně k dispozici. Tento krok poskytuje deklarativní možnosti dotazování.Objekty jako vlastnosti na vrcholech nebo hranách nejsou podporované. Vlastnosti můžou být pouze primitivní typy nebo pole.
Řazení podle vlastností pole dat
order().by(<array property>)není podporováno. Podporuje se řazení pouze podle primitivních typů.Nepodporované jsou neprimární typy JSON. Použijte
string,numbernebotrue/falsetypy.nullhodnoty nejsou podporovány.Serializátor GraphSONv3 se v současné době nepodporuje. V konfiguraci připojení použijte
GraphSONv2třídy Serializer, Reader a Writer. Výsledky vrácené Azure Cosmos DB pro Gremlin nemají stejný formát jako formát GraphSON.Výrazy a funkce lambda se v současné době nepodporují. To zahrnuje funkce
.map{<expression>},.by{<expression>}a.filter{<expression>}. Chcete-li se dozvědět více a zjistit, jak je přepsat pomocí kroků ve stylu Gremlin, podívejte se na poznámku k lambdám.Transakce nejsou podporovány z důvodu distribuované povahy systému. Nakonfigurujte vhodný model konzistence na účtu Gremlin tak, aby "četl vlastní zápisy" a pomocí optimistické souběžnosti vyřešte konfliktní zápisy.
Známá omezení
-
Využití indexu pro dotazy Gremlin s kroky uprostřed procházení
.V(): V současné době index využije pouze první.V()volání procházení k vyřešení všech filtrů nebo predikátů připojených k tomuto volání. Následná volání nebudou využívat index, což může zvýšit latenci a náklady na dotaz.
Za předpokladu výchozího indexování by typický dotaz Gremlin, který začíná krokem .V(), používal parametry ve svých připojených krocích filtrování, jako jsou .has() nebo .where(), aby optimalizoval náklady a výkon dotazu. Například:
g.V().has('category', 'A')
Pokud je však do dotazu Gremlin zahrnuto více než jeden .V() krok, nemusí být vyřešení dat pro dotaz optimální. Jako příklad použijte následující dotaz:
g.V().has('category', 'A').as('a').V().has('category', 'B').as('b').select('a', 'b')
Tento dotaz vrátí dvě skupiny vrcholů na základě jejich vlastnosti nazvané category. V tomto případě pouze první volání g.V().has('category', 'A') využije index k určení vrcholů na základě hodnot jejich vlastností.
Alternativním řešením pro tento dotaz je použití dílčích subtraverzních kroků, jako je například .map() a union(). Toto je znázorněno níže:
// Query workaround using .map()
g.V().has('category', 'A').as('a').map(__.V().has('category', 'B')).as('b').select('a','b')
// Query workaround using .union()
g.V().has('category', 'A').fold().union(unfold(), __.V().has('category', 'B'))
Výkon dotazů můžete zkontrolovat pomocí kroku Gremlin executionProfile() .