Megosztás a következőn keresztül:


Rövid útmutató: Azure Cosmos DB for Apache Gremlin ügyfélkönyvtár Node.js

Fontos

Olyan adatbázismegoldást keres nagy léptékű forgatókönyvekhez, amelyekben 99,9999-es% rendelkezésre állási szolgáltatásiszint-szerződés (SLA), azonnali automatikus skálázás és automatikus feladatátvétel több régióban? Fontolja meg az Azure Cosmos DB for NoSQL-t.

Szeretne egy online elemzési feldolgozási (OLAP) gráfot implementálni, vagy migrálni egy meglévő Apache Gremlin-alkalmazást? Fontolja meg a Graph használatát a Microsoft Fabricben.

Ismerkedés az Apache Gremlinhez készült Azure Cosmos DB ügyfélkódtárával, amellyel Node.js strukturálatlan adatokat tárolhat, kezelhet és kérdezhet le. Kövesse az útmutató lépéseit egy új fiók létrehozásához, egy Node.js ügyfélkódtár telepítéséhez, a fiókhoz való csatlakozáshoz, a gyakori műveletek végrehajtásához és a végső mintaadatok lekérdezéséhez.

Kódtár forráskódcsomagja | (npm)

Előfeltételek

  • Azure-előfizetés

    • Ha nincs Azure-előfizetésed, hozz létre egy ingyenes fiókot mielőtt elkezdenéd.
  • Az Azure CLI legújabb verziója az Azure Cloud Shellben.

    • Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, jelentkezzen be az Azure CLI-be a az login parancs használatával.
  • Node.js 22 vagy újabb

Beállítás

Először állítsa be az útmutató fiók- és fejlesztési környezetét. Ez a szakasz végigvezeti a fiók létrehozásának, a hitelesítő adatok beszerzésének, majd a fejlesztési környezet előkészítésének folyamatán.

Fiók létrehozása

Először hozzon létre egy API-t Apache Gremlin-fiókhoz. A fiók létrehozása után hozza létre az adatbázis- és gráferőforrásokat.

  1. Ha még nincs célerőforráscsoportja, a az group create paranccsal hozzon létre egy új erőforráscsoportot az előfizetésben.

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create A paranccsal hozzon létre egy új Azure Cosmos DB-fiókot az Apache Gremlinhez alapértelmezett beállításokkal.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. Hozzon létre egy új adatbázist a az cosmosdb gremlin database create nevű cosmicworks használatával.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. az cosmosdb gremlin graph create A parancs használatával hozzon létre egy új gráfot.products

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

Hitelesítő adatok lekérése

Most szerezze be az ügyfélkódtár jelszavát, amellyel kapcsolatot hozhat létre a nemrég létrehozott fiókkal.

  1. Használja a az cosmosdb show-t a fiók gazdagépének lekéréséhez.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Jegyezze fel a host tulajdonság értékét az előző parancsok kimenetéből. Ennek a tulajdonságnak az értéke az a gazdagép, amelyet az útmutató későbbi részében a könyvtárhoz való csatlakozáshoz használ az account összekapcsolásához.

  3. A fiók az cosmosdb keys list lekéréséhez használható.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Jegyezze fel a primaryMasterKey tulajdonság értékét az előző parancsok kimenetéből. Ez a tulajdonság értéke az a kulcs, amelyet az útmutató későbbi részében használ, hogy csatlakozzon a fiókhoz a könyvtárral.

Fejlesztési környezet előkészítése

Ezután konfigurálja a fejlesztési környezetet egy új projekttel és az ügyfélkódtárral. Ez a lépés az utolsó szükséges előfeltétel, mielőtt továbblépne az útmutató többi részére.

  1. Kezdje egy üres mappában.

  2. Új modul inicializálása.

    npm init es6 --yes
    
  3. Telepítse a csomagot a gremlin Node Package Managerből (npm).

    npm install --save gremlin
    
  4. Hozza létre a index.js fájlt.

  1. Kezdje egy üres mappában.

  2. Új modul inicializálása.

    npm init es6 --yes
    
  3. Telepítse a csomagot a typescript Node Package Managerből (npm).

    npm install --save-dev typescript
    
  4. Telepítse az tsx csomagot az npm-ből.

    npm install --save-dev tsx
    
  5. Telepítse az gremlin csomagot az npm-ből.

    npm install --save gremlin
    
  6. Telepítse az @types/node csomagot az npm-ből.

    npm install --save-dev @types/node
    
  7. Telepítse az @types/gremlin csomagot az npm-ből.

    npm install --save-dev @types/gremlin
    
  8. Inicializálja a TypeScript-projektet a fordítóval (tsc).

    npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
    
  9. Hozza létre a index.ts fájlt.

Objektummodell

Leírás
DriverRemoteConnection A Gremlin-kiszolgálóhoz való kapcsolatot jelöli
GraphTraversalSource Gremlin-bejárások létrehozására és végrehajtására szolgál

Kódpéldák

Ügyfél hitelesítése

Első lépésként hitelesíti az ügyfelet az útmutatóban korábban összegyűjtött hitelesítő adatokkal.

  1. Nyissa meg a index.js fájlt az integrált fejlesztési környezetben (IDE).

  2. Importálja a gremlin csomagot és a szükséges típusokat:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Sztringváltozók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat hostname és primaryKeya .

    const hostname = '<host>';
    const primaryKey = '<key>';
    
  4. Hozzon létre egy típusobjektumot PlainTextSaslAuthenticator az előző lépésekben létrehozott hitelesítő adatok és konfigurációs változók használatával. Tárolja az objektumot egy névvel ellátott authenticatorváltozóban.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Hozzon létre egy objektumot Client a hitelesítő változó használatával. Nevezze el a változót 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. Nyissa meg a index.ts fájlt az integrált fejlesztési környezetben (IDE).

  2. Importálja a gremlin csomagot és a szükséges típusokat:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Sztringváltozók létrehozása az útmutatóban korábban gyűjtött hitelesítő adatokhoz. Nevezze el a változókat hostname és primaryKeya .

    const hostname: string = '<host>';
    const primaryKey: string = '<key>';
    
  4. Hozzon létre egy típusobjektumot PlainTextSaslAuthenticator az előző lépésekben létrehozott hitelesítő adatok és konfigurációs változók használatával. Tárolja az objektumot egy névvel ellátott authenticatorváltozóban.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Hozzon létre egy objektumot Client a hitelesítő változó használatával. Nevezze el a változót client.

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

Adatok beszúrása

Ezután szúrjon be új csúcs- és éladatokat a gráfba. Az új adatok létrehozása előtt törölje a meglévő adatok gráfját.

  1. Futtassa a g.V().drop() lekérdezést a gráf összes csúcsának és élének eltávolításához.

    await client.submit('g.V().drop()');
    
  2. Hozzon létre egy Gremlin-lekérdezést, amely egy csúcspontot ad hozzá.

    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. Adjon hozzá egy csúcspontot egyetlen termékhez.

    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. Adjon hozzá két további csúcspontot két további termékhez.

    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. Hozzon létre egy újabb Gremlin-lekérdezést, amely élt ad hozzá.

    const insert_edge_query = `
        g.V([prop_partition_key, prop_source_id])
            .addE('replaces')
            .to(g.V([prop_partition_key, prop_target_id]))
    `;
    
  6. Adjon hozzá két élt.

    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. Futtassa a g.V().drop() lekérdezést a gráf összes csúcsának és élének eltávolításához.

    await client.submit('g.V().drop()');
    
  2. Hozzon létre egy Gremlin-lekérdezést, amely egy csúcspontot ad hozzá.

    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. Adjon hozzá egy csúcspontot egyetlen termékhez.

    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. Adjon hozzá két további csúcspontot két további termékhez.

    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. Hozzon létre egy újabb Gremlin-lekérdezést, amely élt ad hozzá.

    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. Adjon hozzá két élt.

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

Adatok beolvasása

Ezután olvassa be a gráfba korábban beszúrt adatokat.

  1. Hozzon létre egy lekérdezést, amely beolvassa a csúcsot az egyedi azonosító és a partíciókulcs értéke alapján.

    const read_vertex_query = 'g.V([prop_partition_key, prop_id])';
    
  2. Ezután olvassa el a csúcspontot a szükséges paraméterek megadásával.

    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. Hozzon létre egy lekérdezést, amely beolvassa a csúcsot az egyedi azonosító és a partíciókulcs értéke alapján.

    const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';
    
  2. Ezután olvassa el a csúcspontot a szükséges paraméterek megadásával.

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

Adatok lekérdezése

Végül egy lekérdezéssel megkeresheti az összes olyan adatot, amely megfelel egy adott bejárásnak vagy szűrésnek a gráfban.

  1. Hozzon létre egy lekérdezést, amely megkeresi az összes csúcsot, amely egy adott csúcsból halad ki.

    const find_vertices_query = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Hajtsa végre a terméket meghatározó lekérdezést Montau Turtle Surfboard .

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterálja át a lekérdezés eredményeit.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    
  1. Hozzon létre egy lekérdezést, amely megkeresi az összes csúcsot, amely egy adott csúcsból halad ki.

    const find_vertices_query: string = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Hajtsa végre a terméket meghatározó lekérdezést Montau Turtle Surfboard .

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Iterálja át a lekérdezés eredményeit.

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

A kód futtatása

Futtassa az újonnan létrehozott alkalmazást egy terminál használatával az alkalmazáskönyvtárban.

node index.js
npx tsx index.ts

Az erőforrások eltávolítása

Ha már nincs szüksége a fiókra, távolítsa el a fiókot az Azure-előfizetésből az erőforrás törlésével .

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