Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Zoekt u een databaseoplossing voor grootschalige scenario's met een 99.999% SLA (Availability Service Level Agreement), directe automatische schaalaanpassing en automatische failover in meerdere regio's? Overweeg Azure Cosmos DB voor NoSQL.
Wilt u een OLAP-graaf (Online Analytical Processing) implementeren of een bestaande Apache Gremlin-toepassing migreren? Overweeg Graph in Microsoft Fabric.
Ga aan de slag met de Azure Cosmos DB voor Apache Gremlin-clientbibliotheek voor Node.js om ongestructureerde gegevens op te slaan, te beheren en er query's op uit te voeren. Volg de stappen in deze handleiding om een nieuw account te maken, een Node.js-clientbibliotheek te installeren, verbinding te maken met het account, algemene bewerkingen uit te voeren en uw uiteindelijke voorbeeldgegevens op te vragen.
| Broncodepakket voor bibliotheek (npm)
Vereisten
Een Azure-abonnement
- Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
De nieuwste versie van de Azure CLI in Azure Cloud Shell.
- Als u liever CLI-referentieopdrachten lokaal uitvoert, meldt u zich aan bij de Azure CLI met behulp van de
az loginopdracht.
- Als u liever CLI-referentieopdrachten lokaal uitvoert, meldt u zich aan bij de Azure CLI met behulp van de
- Node.js 22 of hoger
Instellen
Stel eerst de account- en ontwikkelomgeving voor deze handleiding in. In deze sectie wordt u begeleid bij het maken van een account, het verkrijgen van de referenties en het voorbereiden van uw ontwikkelomgeving.
Een account maken
Begin met het maken van een API voor een Apache Gremlin-account. Zodra het account is gemaakt, maakt u vervolgens de database- en grafbronnen.
Als u nog geen doelresourcegroep hebt, gebruikt u de
az group createopdracht om een nieuwe resourcegroep in uw abonnement te maken.az group create \ --name "<resource-group-name>" \ --location "<location>"Gebruik de
az cosmosdb createopdracht om een nieuw Azure Cosmos DB voor Apache Gremlin-account te maken met standaardinstellingen.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableGremlin"Maak een nieuwe database met de
az cosmosdb gremlin database createnaamcosmicworks.az cosmosdb gremlin database create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"Gebruik de opdracht om een nieuwe grafiek met de
az cosmosdb gremlin graph createnaamproductste maken.az cosmosdb gremlin graph create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --database-name "cosmicworks" \ --name "products" \ --partition-key-path "/category"
Referenties ophalen
Haal nu het wachtwoord op dat de clientbibliotheek moet gebruiken om een verbinding te maken met het onlangs gemaakte account.
Gebruik
az cosmosdb showom de host voor het account te verkrijgen.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{host:name}"Noteer de waarde van de
hosteigenschap uit de uitvoer van de vorige opdrachten. De waarde van deze eigenschap is de host die u verderop in deze handleiding gebruikt om verbinding te maken met het account met de bibliotheek.Gebruik
az cosmosdb keys listom de sleutels op te halen voor het account.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"Noteer de waarde van de
primaryMasterKeyeigenschap uit de uitvoer van de vorige opdrachten. De waarde van deze eigenschap is de sleutel die u verderop in deze handleiding gebruikt om verbinding te maken met het account met de bibliotheek.
Ontwikkelomgeving voorbereiden
Configureer vervolgens uw ontwikkelomgeving met een nieuw project en de clientbibliotheek. Deze stap is het laatste vereiste voordat u verdergaat met de rest van deze handleiding.
Begin in een lege map.
Initialiseer een nieuwe module.
npm init es6 --yesInstalleer het
gremlinpakket vanuit Node Package Manager (npm).npm install --save gremlinMaak het index.js-bestand .
Begin in een lege map.
Initialiseer een nieuwe module.
npm init es6 --yesInstalleer het
typescriptpakket vanuit Node Package Manager (npm).npm install --save-dev typescriptInstalleer het
tsxpakket vanuit npm.npm install --save-dev tsxInstalleer het
gremlinpakket vanuit npm.npm install --save gremlinInstalleer het
@types/nodepakket vanuit npm.npm install --save-dev @types/nodeInstalleer het
@types/gremlinpakket vanuit npm.npm install --save-dev @types/gremlinInitialiseer het TypeScript-project met behulp van de compiler (
tsc).npx tsc --init --target es2017 --module es2022 --moduleResolution nodenextMaak het index.ts-bestand .
Objectmodel
| Beschrijving | |
|---|---|
DriverRemoteConnection |
Vertegenwoordigt de verbinding met de Gremlin-server |
GraphTraversalSource |
Wordt gebruikt om Gremlin-traversals te maken en uit te voeren |
Codevoorbeelden
Client verifiëren
Begin met het authentificeren van de client met behulp van de inloggegevens die eerder in deze handleiding zijn verzameld.
Open het index.js-bestand in uw IDE (Integrated Development Environment).
Importeer het
gremlinpakket en de vereiste typen:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Maak stringvariabelen voor de in deze handleiding eerder verzamelde inloggegevens. Geef de variabelen
hostnameeen naam enprimaryKey.const hostname = '<host>'; const primaryKey = '<key>';Maak een object van het type
PlainTextSaslAuthenticatormet behulp van de referenties en configuratievariabelen die in de vorige stappen zijn gemaakt. Sla het object op in een variabele met de naamauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Maak een
Clientobject met behulp van de verificatorvariabele. Geef de variabeleclienteen naam.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Open het bestand index.ts in uw IDE (Integrated Development Environment).
Importeer het
gremlinpakket en de vereiste typen:import gremlin from 'gremlin'; const { Client, auth } = gremlin.driver; const { PlainTextSaslAuthenticator } = auth;Maak stringvariabelen voor de in deze handleiding eerder verzamelde inloggegevens. Geef de variabelen
hostnameeen naam enprimaryKey.const hostname: string = '<host>'; const primaryKey: string = '<key>';Maak een object van het type
PlainTextSaslAuthenticatormet behulp van de referenties en configuratievariabelen die in de vorige stappen zijn gemaakt. Sla het object op in een variabele met de naamauthenticator.const authenticator = new PlainTextSaslAuthenticator( '/dbs/cosmicworks/colls/products', primaryKey );Maak een
Clientobject met behulp van de verificatorvariabele. Geef de variabeleclienteen naam.const client = new Client( `wss://${hostname}.gremlin.cosmos.azure.com:443/`, { authenticator, traversalsource: 'g', rejectUnauthorized: true, mimeType: 'application/vnd.gremlin-v2.0+json' } );
Gegevens invoegen
Voeg vervolgens nieuwe hoekpunt- en randgegevens in de grafiek in. Voordat u de nieuwe gegevens maakt, wist u alle bestaande gegevens uit de grafiek.
Voer de
g.V().drop()query uit om alle hoekpunten en randen uit de grafiek te wissen.await client.submit('g.V().drop()');Maak een Gremlin-query waarmee een hoekpunt wordt toegevoegd.
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) `;Voeg een hoekpunt toe voor één product.
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, });Voeg nog twee hoekpunten toe voor twee extra producten.
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, });Maak een andere Gremlin-query waarmee een rand wordt toegevoegd.
const insert_edge_query = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Voeg twee randen toe.
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', });
Voer de
g.V().drop()query uit om alle hoekpunten en randen uit de grafiek te wissen.await client.submit('g.V().drop()');Maak een Gremlin-query waarmee een hoekpunt wordt toegevoegd.
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) `;Voeg een hoekpunt toe voor één product.
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, });Voeg nog twee hoekpunten toe voor twee extra producten.
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, });Maak een andere Gremlin-query waarmee een rand wordt toegevoegd.
const insert_edge_query: string = ` g.V([prop_partition_key, prop_source_id]) .addE('replaces') .to(g.V([prop_partition_key, prop_target_id])) `;Voeg twee randen toe.
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', });
Gegevens lezen
Lees vervolgens gegevens die eerder in de grafiek zijn ingevoegd.
Maak een query die een knooppunt leest met behulp van de unieke identificator en de waarde van de partitiesleutel.
const read_vertex_query = 'g.V([prop_partition_key, prop_id])';Lees vervolgens een hoekpunt door de vereiste parameters op te geven.
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];
Maak een query die een knooppunt leest met behulp van de unieke identificator en de waarde van de partitiesleutel.
const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';Lees vervolgens een hoekpunt door de vereiste parameters op te geven.
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];
Gegevens opvragen
Gebruik ten slotte een query om alle gegevens te vinden die overeenkomen met een specifieke doorkruising of filter in de grafiek.
Maak een query waarmee alle hoekpunten worden gevonden die vanuit een specifiek hoekpunt worden doorkruist.
const find_vertices_query = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Voer de query uit waarin het
Montau Turtle Surfboardproduct wordt opgegeven.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Itereren over de queryresultaten.
for (const item of find_results._items) { // Do something here with each result }
Maak een query waarmee alle hoekpunten worden gevonden die vanuit een specifiek hoekpunt worden doorkruist.
const find_vertices_query: string = ` g.V().hasLabel('product') .has('category', prop_partition_key) .has('name', prop_name) .outE('replaces').inV() `;Voer de query uit waarin het
Montau Turtle Surfboardproduct wordt opgegeven.let find_results = await client.submit(find_vertices_query, { prop_partition_key: 'gear-surf-surfboards', prop_name: 'Montau Turtle Surfboard', });Itereren over de queryresultaten.
for (const item of find_results._items) { // Do something here with each result }
De code uitvoeren
Voer de zojuist gemaakte toepassing uit met behulp van een terminal in uw toepassingsmap.
node index.js
npx tsx index.ts
Resources opschonen
Wanneer u het account niet meer nodig hebt, verwijdert u het account uit uw Azure-abonnement door de resource te verwijderen .
az cosmosdb delete \
--resource-group "<resource-group-name>" \
--name "<account-name>"