Delen via


Quickstart: Azure Cosmos DB voor Apache Gremlin-clientbibliotheek voor Node.js

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 login opdracht.
  • 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.

  1. Als u nog geen doelresourcegroep hebt, gebruikt u de az group create opdracht om een nieuwe resourcegroep in uw abonnement te maken.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. Gebruik de az cosmosdb create opdracht 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"
    
  3. Maak een nieuwe database met de az cosmosdb gremlin database create naam cosmicworks.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. Gebruik de opdracht om een nieuwe grafiek met de az cosmosdb gremlin graph create naam productste 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.

  1. Gebruik az cosmosdb show om de host voor het account te verkrijgen.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Noteer de waarde van de host eigenschap 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.

  3. Gebruik az cosmosdb keys list om de sleutels op te halen voor het account.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Noteer de waarde van de primaryMasterKey eigenschap 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.

  1. Begin in een lege map.

  2. Initialiseer een nieuwe module.

    npm init es6 --yes
    
  3. Installeer het gremlin pakket vanuit Node Package Manager (npm).

    npm install --save gremlin
    
  4. Maak het index.js-bestand .

  1. Begin in een lege map.

  2. Initialiseer een nieuwe module.

    npm init es6 --yes
    
  3. Installeer het typescript pakket vanuit Node Package Manager (npm).

    npm install --save-dev typescript
    
  4. Installeer het tsx pakket vanuit npm.

    npm install --save-dev tsx
    
  5. Installeer het gremlin pakket vanuit npm.

    npm install --save gremlin
    
  6. Installeer het @types/node pakket vanuit npm.

    npm install --save-dev @types/node
    
  7. Installeer het @types/gremlin pakket vanuit npm.

    npm install --save-dev @types/gremlin
    
  8. Initialiseer het TypeScript-project met behulp van de compiler (tsc).

    npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
    
  9. Maak 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.

  1. Open het index.js-bestand in uw IDE (Integrated Development Environment).

  2. Importeer het gremlin pakket en de vereiste typen:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Maak stringvariabelen voor de in deze handleiding eerder verzamelde inloggegevens. Geef de variabelen hostname een naam en primaryKey.

    const hostname = '<host>';
    const primaryKey = '<key>';
    
  4. Maak een object van het type PlainTextSaslAuthenticator met behulp van de referenties en configuratievariabelen die in de vorige stappen zijn gemaakt. Sla het object op in een variabele met de naam authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Maak een Client object met behulp van de verificatorvariabele. Geef de variabele clienteen naam.

    const client = new Client(
        `wss://${hostname}.gremlin.cosmos.azure.com:443/`,
        {
            authenticator,
            traversalsource: 'g',
            rejectUnauthorized: true,
            mimeType: 'application/vnd.gremlin-v2.0+json'
        }
    );
    
  1. Open het bestand index.ts in uw IDE (Integrated Development Environment).

  2. Importeer het gremlin pakket en de vereiste typen:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Maak stringvariabelen voor de in deze handleiding eerder verzamelde inloggegevens. Geef de variabelen hostname een naam en primaryKey.

    const hostname: string = '<host>';
    const primaryKey: string = '<key>';
    
  4. Maak een object van het type PlainTextSaslAuthenticator met behulp van de referenties en configuratievariabelen die in de vorige stappen zijn gemaakt. Sla het object op in een variabele met de naam authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Maak een Client object met behulp van de verificatorvariabele. Geef de variabele clienteen 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.

  1. Voer de g.V().drop() query uit om alle hoekpunten en randen uit de grafiek te wissen.

    await client.submit('g.V().drop()');
    
  2. 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)
    `;
    
  3. 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,
    });
    
  4. 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,
    });
    
  5. 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]))
    `;
    
  6. 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',
    });
    
  1. Voer de g.V().drop() query uit om alle hoekpunten en randen uit de grafiek te wissen.

    await client.submit('g.V().drop()');
    
  2. 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)
    `;
    
  3. 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,
    });
    
  4. 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,
    });
    
  5. 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]))
    `;
    
  6. 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.

  1. 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])';
    
  2. 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];
    
  1. 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])';
    
  2. 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.

  1. 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()
    `;
    
  2. Voer de query uit waarin het Montau Turtle Surfboard product wordt opgegeven.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Itereren over de queryresultaten.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    
  1. 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()
    `;
    
  2. Voer de query uit waarin het Montau Turtle Surfboard product wordt opgegeven.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. 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>"