Dela via


Snabbstart: Azure Cosmos DB för Apache Gremlin-klientbibliotek för Node.js

Viktigt!

Letar du efter en databaslösning för storskaliga scenarier med ett serviceavtal på 99,999% tillgänglighetsnivå (SLA), snabb autoskalning och automatisk redundans i flera regioner? Överväg Azure Cosmos DB för NoSQL.

Vill du implementera ett OLAP-diagram (Online Analytical Processing) eller migrera ett befintligt Apache Gremlin-program? Överväg Graph i Microsoft Fabric.

Kom igång med Azure Cosmos DB för Apache Gremlin-klientbiblioteket för Node.js för att lagra, hantera och fråga ostrukturerade data. Följ stegen i den här guiden för att skapa ett nytt konto, installera ett Node.js klientbibliotek, ansluta till kontot, utföra vanliga åtgärder och köra frågor mot dina slutliga exempeldata.

Paket för bibliotekskällans källkod | (npm)

Förutsättningar

  • En prenumeration på Azure

    • Om du inte har en Azure-prenumeration, skapa ett gratis konto innan du börjar.
  • Den senaste versionen av Azure CLI i Azure Cloud Shell.

    • Om du föredrar att köra CLI-referenskommandon lokalt loggar du in på Azure CLI med hjälp az login av kommandot .
  • Node.js 22 eller senare

Konfigurera

Konfigurera först konto- och utvecklingsmiljön för den här guiden. Det här avsnittet beskriver hur du skapar ett konto, hämtar dess autentiseringsuppgifter och sedan förbereder utvecklingsmiljön.

Skapa ett konto

Börja med att skapa ett API för Apache Gremlin-konto. När kontot har skapats skapar du databas- och grafresurserna.

  1. Om du inte redan har en målresursgrupp använder du az group create kommandot för att skapa en ny resursgrupp i din prenumeration.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create Använd kommandot för att skapa ett nytt Azure Cosmos DB för Apache Gremlin-konto med standardinställningar.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. Skapa en ny databas med namnet az cosmosdb gremlin database createcosmicworks.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. az cosmosdb gremlin graph create Använd kommandot för att skapa ett nytt diagram med namnet products.

    az cosmosdb gremlin graph create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category"
    

Hämta autentiseringsuppgifter

Hämta nu lösenordet för klientbiblioteket som ska användas för att skapa en anslutning till det nyligen skapade kontot.

  1. Använd az cosmosdb show för att hämta värden för kontot.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Registrera värdet för host egenskapen från föregående kommandons utdata. Värdet för den här egenskapen är den värd som du använder senare i den här guiden för att ansluta till kontot med biblioteket.

  3. Använd az cosmosdb keys list för att hämta nycklarna för kontot.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Registrera värdet för primaryMasterKey egenskapen från föregående kommandons utdata. Den här egenskapens värde är nyckeln som du använder senare i den här guiden för att ansluta till kontot med biblioteket.

Förbereda utvecklingsmiljön

Konfigurera sedan utvecklingsmiljön med ett nytt projekt och klientbiblioteket. Det här steget är det sista nödvändiga kravet innan du går vidare till resten av den här guiden.

  1. Starta i en tom mapp.

  2. Initiera en ny modul.

    npm init es6 --yes
    
  3. gremlin Installera paketet från Node Package Manager (npm).

    npm install --save gremlin
    
  4. Skapa filenindex.js .

  1. Starta i en tom mapp.

  2. Initiera en ny modul.

    npm init es6 --yes
    
  3. typescript Installera paketet från Node Package Manager (npm).

    npm install --save-dev typescript
    
  4. tsx Installera paketet från npm.

    npm install --save-dev tsx
    
  5. gremlin Installera paketet från npm.

    npm install --save gremlin
    
  6. @types/node Installera paketet från npm.

    npm install --save-dev @types/node
    
  7. @types/gremlin Installera paketet från npm.

    npm install --save-dev @types/gremlin
    
  8. Initiera TypeScript-projektet med hjälp av kompilatorn (tsc).

    npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
    
  9. Skapa filen index.ts .

Objektmodell

Beskrivning
DriverRemoteConnection Representerar anslutningen till Gremlin-servern
GraphTraversalSource Används för att konstruera och köra Gremlin-traverseringar

Kodexempel

Autentisera klient

Börja med att autentisera klienten med de autentiseringsuppgifter som samlats in tidigare i den här guiden.

  1. Öppna filenindex.js i din integrerade utvecklingsmiljö (IDE).

  2. Importera paketet gremlin och nödvändiga typer:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Skapa strängvariabler för de autentiseringsuppgifter som samlats in tidigare i den här guiden. Namnge variablerna hostname och primaryKey.

    const hostname = '<host>';
    const primaryKey = '<key>';
    
  4. Skapa ett objekt av typen PlainTextSaslAuthenticator med hjälp av de autentiseringsuppgifter och konfigurationsvariabler som skapades i föregående steg. Lagra objektet i en variabel med namnet authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Skapa ett Client objekt med variabeln authenticator. Ge variabeln namnet client.

    const client = new Client(
        `wss://${hostname}.gremlin.cosmos.azure.com:443/`,
        {
            authenticator,
            traversalsource: 'g',
            rejectUnauthorized: true,
            mimeType: 'application/vnd.gremlin-v2.0+json'
        }
    );
    
  1. Öppna filen index.ts i din integrerade utvecklingsmiljö (IDE).

  2. Importera paketet gremlin och nödvändiga typer:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Skapa strängvariabler för de autentiseringsuppgifter som samlats in tidigare i den här guiden. Namnge variablerna hostname och primaryKey.

    const hostname: string = '<host>';
    const primaryKey: string = '<key>';
    
  4. Skapa ett objekt av typen PlainTextSaslAuthenticator med hjälp av de autentiseringsuppgifter och konfigurationsvariabler som skapades i föregående steg. Lagra objektet i en variabel med namnet authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Skapa ett Client objekt med variabeln authenticator. Ge variabeln namnet client.

    const client = new Client(
        `wss://${hostname}.gremlin.cosmos.azure.com:443/`,
        {
            authenticator,
            traversalsource: 'g',
            rejectUnauthorized: true,
            mimeType: 'application/vnd.gremlin-v2.0+json'
        }
    );
    

Infoga data

Infoga sedan nya hörn- och kantdata i diagrammet. Innan du skapar nya data rensar du grafen över befintliga data.

  1. Kör frågan g.V().drop() för att rensa alla hörn och kanter från diagrammet.

    await client.submit('g.V().drop()');
    
  2. Skapa en Gremlin-fråga som lägger till en nod.

    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. Lägg till en nod för en enskild 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,
    });
    
  4. Lägg till ytterligare två hörn för två extra produkter.

    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. Skapa en annan Gremlin-fråga som lägger till en kant.

    const insert_edge_query = `
        g.V([prop_partition_key, prop_source_id])
            .addE('replaces')
            .to(g.V([prop_partition_key, prop_target_id]))
    `;
    
  6. Lägg till två kanter.

    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. Kör frågan g.V().drop() för att rensa alla hörn och kanter från diagrammet.

    await client.submit('g.V().drop()');
    
  2. Skapa en Gremlin-fråga som lägger till en nod.

    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. Lägg till en nod för en enskild 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,
    });
    
  4. Lägg till ytterligare två hörn för två extra produkter.

    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. Skapa en annan Gremlin-fråga som lägger till en kant.

    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. Lägg till två kanter.

    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',
    });
    

Läs data

Läs sedan data som tidigare infogats i diagrammet.

  1. Skapa en fråga som läser ett hörn med hjälp av det unika identifierar- och partitionsnyckelvärdet.

    const read_vertex_query = 'g.V([prop_partition_key, prop_id])';
    
  2. Läs sedan en nod genom att ange de nödvändiga parametrarna.

    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. Skapa en fråga som läser ett hörn med hjälp av det unika identifierar- och partitionsnyckelvärdet.

    const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';
    
  2. Läs sedan en nod genom att ange de nödvändiga parametrarna.

    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];
    

Fråga efter data

Slutligen använder du en fråga för att hitta alla data som matchar en specifik bläddering eller filter i diagrammet.

  1. Skapa en fråga som hittar alla hörn som passerar ut från ett specifikt hörn.

    const find_vertices_query = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Kör frågan och ange Montau Turtle Surfboard produkten.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterera över frågeresultatet.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    
  1. Skapa en fråga som hittar alla hörn som passerar ut från ett specifikt hörn.

    const find_vertices_query: string = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Kör frågan och ange Montau Turtle Surfboard produkten.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterera över frågeresultatet.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    

Kör koden

Kör det nyligen skapade programmet med hjälp av en terminal i programkatalogen.

node index.js
npx tsx index.ts

Rensa resurser

När du inte längre behöver kontot tar du bort kontot från din Azure-prenumeration genom att ta bort resursen.

az cosmosdb delete \
    --resource-group "<resource-group-name>" \
    --name "<account-name>"