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.
Důležité
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 for 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 pro Apache Gremlin podporuje syntaxi Gremlin TinkerPop pro dotazy. Tato příručka vás provede běžnými dotazy, které je možné provést pomocí této služby. V této příručce můžete spouštět následující dotazy pomocí konzoly Gremlin nebo oblíbeného ovladače Gremlin.
Požadavky
Předplatné Azure
- Pokud nemáte předplatné Azure, vytvořte si bezplatný účet před zahájením.
- Účet Azure Cosmos DB pro Apache Gremlin
- Přístup k ukázkovým datům pro testování
Spočítat počet vrcholů v grafu
Spočítejte celkový počet vrcholů produktu v grafu. Tato operace je užitečná pro pochopení velikosti katalogu produktů nebo ověřování načítání dat.
g.V().hasLabel('product').count()
Spočítat počet vrcholů s konkrétním popiskem v grafu
Spočítejte celkový počet vrcholů produktu v grafu, které obsahují určitý popisek. V tomto příkladu je productpopisek .
g.V().hasLabel('product').count()
Filtrování produktů podle popisku a vlastnosti
Načtěte produkty, které odpovídají určitému popisku a hodnotě vlastnosti. Tento dotaz je užitečný pro zúžení výsledků na podmnožinu zájmu, jako jsou produkty s cenou vyšší než 800 Usd.
g.V().hasLabel('product').has('price', gt(800))
Vlastnosti specifické pro projekt z produktů
Vrátí pouze vybrané vlastnosti z odpovídajících produktů. Tento dotaz snižuje množství vrácených dat a zaměřuje se na relevantní pole, jako jsou názvy produktů.
g.V().hasLabel('product').values('name')
Vyhledání souvisejících produktů pomocí hran
Vyhledejte související produkty procházením grafu. Například vyhledejte všechny produkty, které byly nahrazeny konkrétním produktem, procházením odchozích hran "replaces" a následným přechodem na vrcholy připojeného produktu.
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).outE('replaces').inV().hasLabel('product')
Vyhledání vzdálených souvisejících produktů pomocí hran
Tento dotaz použijte k vyhledání produktů, které jsou ve náhradním řetězci vzdálené dva segmenty směrování:
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).outE('replaces').inV().hasLabel('product').outE('replaces').inV().hasLabel('product')
Analýza spouštění dotazů pomocí profilu spuštění
Pomocí tohoto kroku analyzujte podrobnosti o výkonu a provádění dotazu executionProfile() Gremlin. Tento krok vrátí objekt JSON s metrikami pro každý krok v dotazu, který pomáhá s řešením potíží a optimalizací.
g.V(['gear-surf-surfboards', 'bbbbbbbb-1111-2222-3333-cccccccccccc']).out().executionProfile()
[
{
"gremlin": "g.V('mary').out().executionProfile()",
"totalTime": 28,
"metrics": [
{
"name": "GetVertices",
"time": 24,
"annotations": { "percentTime": 85.71 },
"counts": { "resultCount": 2 },
"storeOps": [ { "fanoutFactor": 1, "count": 2, "size": 696, "time": 0.4 } ]
},
{
"name": "GetEdges",
"time": 4,
"annotations": { "percentTime": 14.29 },
"counts": { "resultCount": 1 },
"storeOps": [ { "fanoutFactor": 1, "count": 1, "size": 419, "time": 0.67 } ]
},
{
"name": "GetNeighborVertices",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
}
]
}
]
Další informace o executionProfile() kroku najdete v referenčních informacích k profilu spuštění.
Návod
Tento executionProfile() krok provede dotaz Gremlin. Tento dotaz obsahuje addV kroky nebo addE kroky, které mají za následek vytvoření a potvrzení změn zadaných v dotazu. Za jednotky žádostí vygenerované dotazem Gremlin se také účtují poplatky.
Identifikace vzorů dotazů pro nevidomé ventilátory
Slepý ventilátor nastane, když dotaz přistupuje k více oddílům, než je potřeba, často kvůli chybějícímu predikátu klíče oddílu. Tento antipattern může zvýšit latenci a náklady. Profil spuštění pomáhá identifikovat takové vzory zobrazením vysoké fanoutFactorhodnoty .
g.V(['gear-surf-surfboards', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb']).executionProfile()
[
{
"gremlin": "g.V('tt0093640').executionProfile()",
"totalTime": 46,
"metrics": [
{
"name": "GetVertices",
"time": 46,
"annotations": { "percentTime": 100 },
"counts": { "resultCount": 1 },
"storeOps": [ { "fanoutFactor": 5, "count": 1, "size": 589, "time": 75.61 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 1 }
}
]
}
]
Optimalizace dotazů na ventilátory
Vysoká fanoutFactor hodnota (například 5) označuje dotaz, ke který se přistupuje více oddílů. Pokud chcete optimalizovat, zahrňte klíč oddílu do predikátu dotazu:
g.V(['gear-surf-surfboards', 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'])
Nefiltrovaný vzor dotazu
Nefiltrované dotazy můžou zpracovávat velkou počáteční datovou sadu, což zvyšuje náklady a latenci.
g.V().hasLabel('product').out().executionProfile()
[
{
"gremlin": "g.V().hasLabel('tweet').out().executionProfile()",
"totalTime": 42,
"metrics": [
{
"name": "GetVertices",
"time": 31,
"annotations": { "percentTime": 73.81 },
"counts": { "resultCount": 30 },
"storeOps": [ { "fanoutFactor": 1, "count": 13, "size": 6819, "time": 1.02 } ]
},
{
"name": "GetEdges",
"time": 6,
"annotations": { "percentTime": 14.29 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 20, "size": 7950, "time": 1.98 } ]
},
{
"name": "GetNeighborVertices",
"time": 5,
"annotations": { "percentTime": 11.9 },
"counts": { "resultCount": 20 },
"storeOps": [ { "fanoutFactor": 1, "count": 4, "size": 1070, "time": 1.19 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 20 }
}
]
}
]
Filtrovaný vzor dotazu
Přidání filtrů před procházením může snížit pracovní sadu a zlepšit výkon. Profil spuštění zobrazuje efekt filtrování. Filtrovaný dotaz zpracovává méně vrcholů, což vede k nižší latenci a nákladům.
g.V().hasLabel('product').has('clearance', true).out().executionProfile()
[
{
"gremlin": "g.V().hasLabel('tweet').has('lang', 'en').out().executionProfile()",
"totalTime": 14,
"metrics": [
{
"name": "GetVertices",
"time": 14,
"annotations": { "percentTime": 58.33 },
"counts": { "resultCount": 11 },
"storeOps": [ { "fanoutFactor": 1, "count": 11, "size": 4807, "time": 1.27 } ]
},
{
"name": "GetEdges",
"time": 5,
"annotations": { "percentTime": 20.83 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 18, "size": 7159, "time": 1.7 } ]
},
{
"name": "GetNeighborVertices",
"time": 5,
"annotations": { "percentTime": 20.83 },
"counts": { "resultCount": 18 },
"storeOps": [ { "fanoutFactor": 1, "count": 4, "size": 1070, "time": 1.01 } ]
},
{
"name": "ProjectOperator",
"time": 0,
"annotations": { "percentTime": 0 },
"counts": { "resultCount": 18 }
}
]
}
]