Udostępnij za pomocą


Szybki start: biblioteka klienta usługi Azure Cosmos DB dla języka Apache Gremlin dla Node.js

Ważne

Szukasz rozwiązania bazy danych dla scenariuszy o dużej skali z umową SLA gwarantującą poziom dostępności na poziomie 99,999%, natychmiastowym skalowaniem automatycznym i automatycznym przełączaniem awaryjnym między wieloma regionami? Rozważmy usługę Azure Cosmos DB dla noSQL.

Czy chcesz zaimplementować graf przetwarzania analitycznego online (OLAP) lub przeprowadzić migrację istniejącej aplikacji Apache Gremlin? Rozważ użycie programu Graph w usłudze Microsoft Fabric.

Rozpocznij pracę z biblioteką klienta usługi Azure Cosmos DB for Apache Gremlin, aby Node.js przechowywać, zarządzać i przeszukiwać dane nieustrukturyzowane. Wykonaj kroki opisane w tym przewodniku, aby utworzyć nowe konto, zainstalować bibliotekę klienta Node.js, nawiązać połączenie z kontem, wykonać typowe operacje i wykonać zapytanie o ostateczne przykładowe dane.

Pakiet kodu | źródłowego biblioteki (npm)

Wymagania wstępne

  • Subskrypcja platformy Azure

    • Jeśli nie masz subskrypcji Azure, przed rozpoczęciem utwórz darmowe konto.
  • Node.js 22 lub nowsze

Konfigurowanie

Najpierw skonfiguruj konto i środowisko programistyczne dla tego przewodnika. W tej sekcji przedstawiono proces tworzenia konta, uzyskiwania poświadczeń, a następnie przygotowywania środowiska deweloperskiego.

Tworzenie konta

Zacznij od utworzenia interfejsu API dla konta apache Gremlin. Po utworzeniu konta utwórz bazę danych i zasoby grafu.

  1. Jeśli nie masz jeszcze docelowej grupy zasobów, użyj az group create polecenia , aby utworzyć nową grupę zasobów w ramach subskrypcji.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. Użyj polecenia az cosmosdb create, aby utworzyć konto usługi Azure Cosmos DB dla Apache Gremlin z ustawieniami domyślnymi.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. Utwórz nową bazę danych przy użyciu az cosmosdb gremlin database create nazwy cosmicworks.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. Użyj polecenia , az cosmosdb gremlin graph create aby utworzyć nowy graf o nazwie products.

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

Pobieranie poświadczeń

Teraz pobierz hasło biblioteki klienta do utworzenia połączenia z niedawno utworzonym kontem.

  1. Użyj az cosmosdb show , aby uzyskać hosta dla konta.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Zapisz wartość właściwości host z wyników wcześniejszych poleceń. Wartość tej właściwości to host, którego używasz w kolejnych częściach tego przewodnika, aby połączyć się z kontem w bibliotece.

  3. Użyj az cosmosdb keys list, aby uzyskać klucze dla konta.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Zapisz wartość właściwości primaryMasterKey z wyników wcześniejszych poleceń. Wartość tej właściwości jest kluczem używanym w dalszej części tego przewodnika w celu nawiązania połączenia z kontem z biblioteką.

Przygotowywanie środowiska projektowego

Następnie skonfiguruj środowisko deweloperskie przy użyciu nowego projektu i biblioteki klienta. Ten krok jest ostatnim wymaganiem wstępnym przed przejściem do pozostałej części tego przewodnika.

  1. Rozpocznij w pustym folderze.

  2. Zainicjuj nowy moduł.

    npm init es6 --yes
    
  3. gremlin Zainstaluj pakiet z poziomu menedżera pakietów node (npm).

    npm install --save gremlin
    
  4. Utwórz plik index.js .

  1. Rozpocznij w pustym folderze.

  2. Zainicjuj nowy moduł.

    npm init es6 --yes
    
  3. typescript Zainstaluj pakiet z poziomu menedżera pakietów node (npm).

    npm install --save-dev typescript
    
  4. Zainstaluj pakiet tsx z npm.

    npm install --save-dev tsx
    
  5. Zainstaluj pakiet gremlin z npm.

    npm install --save gremlin
    
  6. Zainstaluj pakiet @types/node z npm.

    npm install --save-dev @types/node
    
  7. Zainstaluj pakiet @types/gremlin z npm.

    npm install --save-dev @types/gremlin
    
  8. Zainicjuj projekt TypeScript przy użyciu kompilatora (tsc).

    npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
    
  9. Utwórz plik index.ts .

Model obiektów

Opis
DriverRemoteConnection Reprezentuje połączenie z serwerem Gremlin
GraphTraversalSource Służy do konstruowania i wykonywania przemierzeń Gremlin

Przykłady kodu

Uwierzytelnianie klienta

Zacznij od uwierzytelnienia klienta przy użyciu poświadczeń zebranych wcześniej w tym przewodniku.

  1. Otwórz plik index.js w zintegrowanym środowisku projektowym (IDE).

  2. Zaimportuj gremlin pakiet i wymagane typy:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Utwórz zmienne tekstowe dla poświadczeń zebranych wcześniej w tym przewodniku. Nazwij zmienne hostname i primaryKey.

    const hostname = '<host>';
    const primaryKey = '<key>';
    
  4. Utwórz obiekt typu PlainTextSaslAuthenticator przy użyciu poświadczeń i zmiennych konfiguracji utworzonych w poprzednich krokach. Zapisz obiekt w zmiennej o nazwie authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Utwórz Client obiekt przy użyciu zmiennej authenticator. Nadaj zmiennej clientnazwę .

    const client = new Client(
        `wss://${hostname}.gremlin.cosmos.azure.com:443/`,
        {
            authenticator,
            traversalsource: 'g',
            rejectUnauthorized: true,
            mimeType: 'application/vnd.gremlin-v2.0+json'
        }
    );
    
  1. Otwórz plik index.ts w zintegrowanym środowisku projektowym (IDE).

  2. Zaimportuj gremlin pakiet i wymagane typy:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Utwórz zmienne tekstowe dla poświadczeń zebranych wcześniej w tym przewodniku. Nazwij zmienne hostname i primaryKey.

    const hostname: string = '<host>';
    const primaryKey: string = '<key>';
    
  4. Utwórz obiekt typu PlainTextSaslAuthenticator przy użyciu poświadczeń i zmiennych konfiguracji utworzonych w poprzednich krokach. Zapisz obiekt w zmiennej o nazwie authenticator.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Utwórz Client obiekt przy użyciu zmiennej authenticator. Nadaj zmiennej clientnazwę .

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

Wstawianie danych

Następnie wstaw nowe dane wierzchołka i krawędzi do grafu. Przed utworzeniem nowych danych wyczyść graf wszystkich istniejących danych.

  1. Uruchom zapytanie, g.V().drop() aby wyczyścić wszystkie wierzchołki i krawędzie z grafu.

    await client.submit('g.V().drop()');
    
  2. Stwórz zapytanie Gremlin dodające wierzchołek.

    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. Dodaj wierzchołek dla pojedynczego produktu.

    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. Dodaj dwa kolejne wierzchołki dla dwóch dodatkowych produktów.

    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. Utwórz kolejne zapytanie Języka Gremlin, które dodaje krawędź.

    const insert_edge_query = `
        g.V([prop_partition_key, prop_source_id])
            .addE('replaces')
            .to(g.V([prop_partition_key, prop_target_id]))
    `;
    
  6. Dodaj dwie krawędzie.

    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. Uruchom zapytanie, g.V().drop() aby wyczyścić wszystkie wierzchołki i krawędzie z grafu.

    await client.submit('g.V().drop()');
    
  2. Stwórz zapytanie Gremlin dodające wierzchołek.

    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. Dodaj wierzchołek dla pojedynczego produktu.

    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. Dodaj dwa kolejne wierzchołki dla dwóch dodatkowych produktów.

    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. Utwórz kolejne zapytanie Języka Gremlin, które dodaje krawędź.

    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. Dodaj dwie krawędzie.

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

Odczyt danych

Następnie odczytaj dane, które zostały wcześniej wstawione do grafu.

  1. Utwórz zapytanie, które odczytuje wierzchołek przy użyciu unikatowego identyfikatora i wartości klucza partycji.

    const read_vertex_query = 'g.V([prop_partition_key, prop_id])';
    
  2. Następnie odczytaj wierzchołek, podając wymagane parametry.

    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. Utwórz zapytanie, które odczytuje wierzchołek przy użyciu unikatowego identyfikatora i wartości klucza partycji.

    const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';
    
  2. Następnie odczytaj wierzchołek, podając wymagane parametry.

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

Wykonywanie zapytań o dane

Na koniec użyj zapytania, aby znaleźć wszystkie dane zgodne z określonym przechodzeniem lub filtrem na grafie.

  1. Utwórz zapytanie, które znajduje wszystkie wierzchołki wychodzące z określonego wierzchołka.

    const find_vertices_query = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Wykonaj zapytanie określające Montau Turtle Surfboard produkt.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterowanie wyników zapytania.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    
  1. Utwórz zapytanie, które znajduje wszystkie wierzchołki wychodzące z określonego wierzchołka.

    const find_vertices_query: string = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Wykonaj zapytanie określające Montau Turtle Surfboard produkt.

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterowanie wyników zapytania.

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

Uruchamianie kodu

Uruchom nowo utworzoną aplikację przy użyciu terminalu w katalogu aplikacji.

node index.js
npx tsx index.ts

Czyszczenie zasobów

Jeśli konto nie jest już potrzebne, usuń konto z subskrypcji platformy Azure, usuwając zasób.

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