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.
Začínáme s klientskou knihovnou Azure Cosmos DB for Apache Gremlin pro Node.js pro ukládání, správu a dotazování nestrukturovaných dat. Postupujte podle kroků v tomto průvodci a vytvořte nový účet, nainstalujte Node.js klientskou knihovnu, připojte se k účtu, proveďte běžné operace a dotazujte se na konečná ukázková data.
Balíček zdrojového kódu | knihovny (npm)
Požadavky
Předplatné Azure
- Pokud nemáte předplatné Azure, vytvořte si bezplatný účet před zahájením.
Nejnovější verze Azure CLI v Azure Cloud Shellu
- Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, přihlaste se k Azure CLI pomocí
az loginpříkazu.
- Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, přihlaste se k Azure CLI pomocí
- Node.js 22 nebo novější
Nastavení
Nejprve pro tuto příručku nastavte účet a vývojové prostředí. Tato část vás provede procesem vytvoření účtu, získáním jeho přihlašovacích údajů a následnou přípravou vývojového prostředí.
Vytvoření účtu
Začněte vytvořením rozhraní API pro účet Apache Gremlin. Po vytvoření účtu vytvořte databázi a prostředky pro graf.
Pokud ještě nemáte cílovou skupinu prostředků, použijte
az group createpříkaz k vytvoření nové skupiny prostředků ve vašem předplatném.az group create \ --name "<resource-group-name>" \ --location "<location>"az cosmosdb createPomocí příkazu vytvořte nový účet Azure Cosmos DB pro Apache Gremlin s výchozím nastavením.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableGremlin"Vytvořte novou databázi s názvem
az cosmosdb gremlin database createcosmicworks.az cosmosdb gremlin database create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"az cosmosdb gremlin graph createPomocí příkazu vytvořte nový graf s názvemproducts.az cosmosdb gremlin graph create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category"
Získání přihlašovacích údajů
Teď získejte heslo pro klientskou knihovnu, které se má použít k vytvoření připojení k nedávno vytvořenému účtu.
Slouží
az cosmosdb showk získání hostitele pro účet.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{host:name}"Poznamenejte si hodnotu
hostvlastnosti z výstupu předchozích příkazů. Hodnota této vlastnosti je hostitel , který použijete později v tomto průvodci pro připojení k účtu s knihovnou.Slouží
az cosmosdb keys listk získání klíčů pro účet.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Poznamenejte si hodnotu
primaryMasterKeyvlastnosti z výstupu předchozích příkazů. Hodnota této vlastnosti je klíč , který použijete později v tomto průvodci pro připojení k účtu s knihovnou.
Příprava vývojového prostředí
Potom nakonfigurujte vývojové prostředí s novým projektem a klientskou knihovnou. Tento krok je posledním požadovaným předpokladem před přechodem na zbytek této příručky.
Začněte v prázdné složce.
Inicializace nového modulu
npm init es6 --yesgremlinNainstalujte balíček z Node Package Manageru (npm).npm install --save gremlinVytvořte soubor index.js .
Začněte v prázdné složce.
Inicializace nového modulu
npm init es6 --yestypescriptNainstalujte balíček z Node Package Manageru (npm).npm install --save-dev typescripttsxNainstalujte balíček z npm.npm install --save-dev tsxgremlinNainstalujte balíček z npm.npm install --save gremlin@types/nodeNainstalujte balíček z npm.npm install --save-dev @types/node@types/gremlinNainstalujte balíček z npm.npm install --save-dev @types/gremlinInicializace projektu TypeScript pomocí kompilátoru (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextVytvořte soubor index.ts .
Objektový model
| Popis | |
|---|---|
DriverRemoteConnection |
Představuje připojení k serveru Gremlin. |
GraphTraversalSource |
Používá se ke konstrukci a provádění procházení Gremlin. |
Příklady kódu
Ověření klienta
Začněte ověřením klienta pomocí přihlašovacích údajů shromážděných dříve v této příručce.
Otevřete soubor index.js v integrovaném vývojovém prostředí (IDE).
Importujte
gremlinbalíček a požadované typy:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Vytvořte řetězcové proměnné pro přihlašovací údaje shromážděné dříve v této příručce. Pojmenujte proměnné
hostnameaprimaryKey.const hostname = '<host>'; const primaryKey = '<key>';Vytvořte objekt typu
PlainTextSaslAuthenticatorpomocí přihlašovacích údajů a konfiguračních proměnných vytvořených v předchozích krocích. Uložte objekt do proměnné s názvemauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Vytvořte
Clientobjekt pomocí proměnné authenticatoru. Pojmenujte proměnnouclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Otevřete soubor index.ts v integrovaném vývojovém prostředí (IDE).
Importujte
gremlinbalíček a požadované typy:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Vytvořte řetězcové proměnné pro přihlašovací údaje shromážděné dříve v této příručce. Pojmenujte proměnné
hostnameaprimaryKey.const hostname: string = '<host>'; const primaryKey: string = '<key>';Vytvořte objekt typu
PlainTextSaslAuthenticatorpomocí přihlašovacích údajů a konfiguračních proměnných vytvořených v předchozích krocích. Uložte objekt do proměnné s názvemauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Vytvořte
Clientobjekt pomocí proměnné authenticatoru. Pojmenujte proměnnouclient.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Vložení dat
V dalším kroku vložte do grafu nový vrchol a hraniční data. Před vytvořením nových dat vymažte graf všech existujících dat.
Spuštěním
g.V().drop()dotazu vymažte všechny vrcholy a hrany z grafu.await client.submit('g.V().drop()');Vytvořte dotaz Gremlin, který přidá vrchol.
const insert_vertex_query = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Přidejte vrchol pro jeden produkt.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Přidejte dva další vrcholy pro dva nové produkty.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Vytvořte další dotaz Gremlin, který přidá hranu.
const insert_edge_query = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Přidejte dvě hrany.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Spuštěním
g.V().drop()dotazu vymažte všechny vrcholy a hrany z grafu.await client.submit('g.V().drop()');Vytvořte dotaz Gremlin, který přidá vrchol.
const insert_vertex_query: string = ` g.addV('product') .property('id', prop_id) .property('name', prop_name) .property('category', prop_category) .property('quantity', prop_quantity) .property('price', prop_price) .property('clearance', prop_clearance) `;Přidejte vrchol pro jeden produkt.
await client.submit(insert_vertex_query, { prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', prop_name: 'Yamba Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 12, prop_price: 850.00, prop_clearance: false, });Přidejte dva další vrcholy pro dva nové produkty.
await client.submit(insert_vertex_query, { prop_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_name: 'Montau Turtle Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 5, prop_price: 600.00, prop_clearance: true, }); await client.submit(insert_vertex_query, { prop_id: 'cccccccc-2222-3333-4444-dddddddddddd', prop_name: 'Noosa Surfboard', prop_category: 'gear-surf-surfboards', prop_quantity: 31, prop_price: 1100.00, prop_clearance: false, });Vytvořte další dotaz Gremlin, který přidá hranu.
const insert_edge_query: string = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Přidejte dvě hrany.
await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); await client.submit(insert_edge_query, { prop_partition_key: 'gear-surf-surfboards', prop_source_id: 'bbbbbbbb-1111-2222-3333-cccccccccccc', prop_target_id: 'cccccccc-2222-3333-4444-dddddddddddd', });
Čtení dat
Potom načtěte data, která byla dříve vložena do grafu.
Vytvořte dotaz, který načte vrchol pomocí jedinečného identifikátoru a hodnoty klíče oddílu.
const read_vertex_query = 'g.V([prop_partition_key, prop_id])';Pak načtěte vrchol zadáním požadovaných parametrů.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Vytvořte dotaz, který načte vrchol pomocí jedinečného identifikátoru a hodnoty klíče oddílu.
const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';Pak načtěte vrchol zadáním požadovaných parametrů.
let read_results = await client.submit(read_vertex_query, { prop_partition_key: 'gear-surf-surfboards', prop_id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', }); let matched_item = read_results._items[0];
Dotaz k datům
Nakonec pomocí dotazu najděte všechna data, která odpovídají určitému procházení nebo filtru v grafu.
Vytvořte dotaz, který najde všechny vrcholy, které směřují ven z konkrétního vrcholu.
const find_vertices_query = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Spusťte dotaz určující
Montau Turtle Surfboardprodukt.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Iterujte výsledky dotazu.
for (const item of find_results._items) { // Do something here with each result }
Vytvořte dotaz, který najde všechny vrcholy, které směřují ven z konkrétního vrcholu.
const find_vertices_query: string = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Spusťte dotaz určující
Montau Turtle Surfboardprodukt.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Iterujte výsledky dotazu.
for (const item of find_results._items) { // Do something here with each result }
Spuštění kódu
Spusťte nově vytvořenou aplikaci pomocí terminálu v adresáři vaší aplikace.
node index.js
npx tsx index.ts
Vyčištění prostředků
Pokud účet už nepotřebujete, odeberte ho z předplatného Azure odstraněním prostředku.
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"