Aracılığıyla paylaş


Hızlı Başlangıç: Node.js için Apache Gremlin için Azure Cosmos DB istemci kitaplığı

Önemli

99,999% kullanılabilirlik hizmet düzeyi sözleşmesi (SLA), anında otomatik ölçeklendirme ve birden çok bölgede otomatik yük devretme ile yüksek ölçekli senaryolar için bir veritabanı çözümü mü arıyorsunuz? NoSQL için Azure Cosmos DB'ye göz önünde bulundurun.

Çevrimiçi analitik işleme (OLAP) grafı uygulamak mı yoksa mevcut bir Apache Gremlin uygulamasını geçirmek mi istiyorsunuz? Microsoft Fabric'te Graph'i göz önünde bulundurun.

Yapılandırılmamış verileri depolamak, yönetmek ve sorgulamak için Node.js için Apache Gremlin için Azure Cosmos DB istemci kitaplığını kullanmaya başlayın. Yeni bir hesap oluşturmak, Node.js istemci kitaplığı yüklemek, hesaba bağlanmak, yaygın işlemler gerçekleştirmek ve son örnek verilerinizi sorgulamak için bu kılavuzdaki adımları izleyin.

Kitaplık kaynak kodu | Paketi (npm)

Önkoşullar

  • Azure aboneliği

  • Azure Cloud Shell'deAzure CLI'nın en son sürümü.

    • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız komutunu kullanarak az login Azure CLI'da oturum açın.
  • Node.js 22 veya üzeri

Ayarlama

İlk olarak, bu kılavuz için hesap ve geliştirme ortamını ayarlayın. Bu bölümde hesap oluşturma, kimlik bilgilerini alma ve geliştirme ortamınızı hazırlama işlemi boyunca size yol gösterilir.

Hesap oluştur

Apache Gremlin hesabı için bir API oluşturarak başlayın. Hesap oluşturulduktan sonra veritabanı ve grafik kaynaklarını oluşturun.

  1. Henüz bir hedef kaynak grubunuz yoksa, aboneliğinizde yeni bir kaynak grubu oluşturmak için komutunu kullanın az group create .

    az group create \
        --name "<resource-group-name>" \
        --location "<location>"
    
  2. az cosmosdb create Varsayılan ayarlarla Apache Gremlin için yeni bir Azure Cosmos DB hesabı oluşturmak için komutunu kullanın.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<location>" \
        --capabilities "EnableGremlin"
    
  3. az cosmosdb gremlin database create kullanarak cosmicworks adlı yeni bir veritabanı oluşturun.

    az cosmosdb gremlin database create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. az cosmosdb gremlin graph create adlı productsyeni bir grafik oluşturmak için komutunu kullanın.

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

Kimlik bilgilerini alma

Şimdi, son oluşturulan hesaba bağlantı oluşturmak için kullanılacak istemci kitaplığının parolasını alın.

  1. Hesap için ana bilgisayarı almak üzere az cosmosdb show kullanın.

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{host:name}"
    
  2. Önceki komutların çıkışından host özelliğinin değerini kaydedin. Bu özelliğin değeri, bu kılavuzun ilerleyen bölümlerinde kitaplığa bağlanmak için kullandığınız konaktır .

  3. az cosmosdb keys list, hesabın anahtarlarını almak için kullanın.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. Önceki komutların çıkışından primaryMasterKey özelliğinin değerini kaydedin. Bu özelliğin değeri, bu kılavuzun ilerleyen bölümlerinde kitaplığa bağlanmak için kullandığınız anahtardır .

Geliştirme ortamını hazırlama

Ardından geliştirme ortamınızı yeni bir proje ve istemci kitaplığıyla yapılandırın. Bu adım, bu kılavuzun geri kalanına geçmeden önce gereken son önkoşuldur.

  1. Boş bir klasörden başlayın.

  2. Yeni bir modül başlatın.

    npm init es6 --yes
    
  3. gremlin Node Package Manager'dan (npm) paketi yükleyin.

    npm install --save gremlin
    
  4. index.js dosyasını oluşturun.

  1. Boş bir klasörden başlayın.

  2. Yeni bir modül başlatın.

    npm init es6 --yes
    
  3. typescript Node Package Manager'dan (npm) paketi yükleyin.

    npm install --save-dev typescript
    
  4. tsx Paketi npm'den yükleyin.

    npm install --save-dev tsx
    
  5. gremlin Paketi npm'den yükleyin.

    npm install --save gremlin
    
  6. @types/node Paketi npm'den yükleyin.

    npm install --save-dev @types/node
    
  7. @types/gremlin Paketi npm'den yükleyin.

    npm install --save-dev @types/gremlin
    
  8. Derleyiciyi ()tsc kullanarak TypeScript projesini başlatın.

    npx tsc --init --target es2017 --module es2022 --moduleResolution nodenext
    
  9. index.ts dosyasını oluşturun.

Nesne modeli

Açıklama
DriverRemoteConnection Gremlin sunucusuna bağlantıyı temsil eder
GraphTraversalSource Gremlin geçişlerini oluşturmak ve yürütmek için kullanılır

Kod örnekleri

İstemcinin kimliğini doğrulama

Bu kılavuzda daha önce toplanan kimlik bilgilerini kullanarak istemcinin kimliğini doğrulayarak başlayın.

  1. tümleşik geliştirme ortamınızda (IDE) index.js dosyasını açın.

  2. Gerekli türleri ve gremlin paketini içeri aktarın:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Bu kılavuzun önceki bölümlerinde toplanan kimlik bilgileri için dize değişkenleri oluşturun. hostname ve primaryKey değişkenlerini adlandırın.

    const hostname = '<host>';
    const primaryKey = '<key>';
    
  4. Önceki adımlarda oluşturulan kimlik bilgilerini ve yapılandırma değişkenlerini kullanarak türünde PlainTextSaslAuthenticator bir nesne oluşturun. nesnesini adlı authenticatorbir değişkende depolayın.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Kimlik doğrulayıcı değişkenini kullanarak bir Client nesne oluşturun. değişkenini clientolarak adlandırın.

    const client = new Client(
        `wss://${hostname}.gremlin.cosmos.azure.com:443/`,
        {
            authenticator,
            traversalsource: 'g',
            rejectUnauthorized: true,
            mimeType: 'application/vnd.gremlin-v2.0+json'
        }
    );
    
  1. tümleşik geliştirme ortamınızda (IDE) index.ts dosyasını açın.

  2. Gerekli türleri ve gremlin paketini içeri aktarın:

    import gremlin from 'gremlin';
    const { Client, auth } = gremlin.driver;
    const { PlainTextSaslAuthenticator } = auth;
    
  3. Bu kılavuzun önceki bölümlerinde toplanan kimlik bilgileri için dize değişkenleri oluşturun. hostname ve primaryKey değişkenlerini adlandırın.

    const hostname: string = '<host>';
    const primaryKey: string = '<key>';
    
  4. Önceki adımlarda oluşturulan kimlik bilgilerini ve yapılandırma değişkenlerini kullanarak türünde PlainTextSaslAuthenticator bir nesne oluşturun. nesnesini adlı authenticatorbir değişkende depolayın.

    const authenticator = new PlainTextSaslAuthenticator(
        '/dbs/cosmicworks/colls/products',
        primaryKey
    );
    
  5. Kimlik doğrulayıcı değişkenini kullanarak bir Client nesne oluşturun. değişkenini clientolarak adlandırın.

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

Veri ekleme

Ardından, grafiğe yeni köşe ve kenar verileri ekleyin. Yeni verileri oluşturmadan önce mevcut verilerin grafiğini temizleyin.

  1. Graftan g.V().drop() tüm köşeleri ve kenarları temizlemek için sorguyu çalıştırın.

    await client.submit('g.V().drop()');
    
  2. Bir düğüm ekleyen bir Gremlin sorgusu oluşturun.

    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. Tek bir ürün için bir düğüm noktası ekleyin.

    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. İki ekstra ürün için iki köşe daha ekleyin.

    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. Kenar ekleyen başka bir Gremlin sorgusu oluşturun.

    const insert_edge_query = `
        g.V([prop_partition_key, prop_source_id])
            .addE('replaces')
            .to(g.V([prop_partition_key, prop_target_id]))
    `;
    
  6. İki kenar ekleyin.

    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. Graftan g.V().drop() tüm köşeleri ve kenarları temizlemek için sorguyu çalıştırın.

    await client.submit('g.V().drop()');
    
  2. Bir düğüm ekleyen bir Gremlin sorgusu oluşturun.

    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. Tek bir ürün için bir düğüm noktası ekleyin.

    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. İki ekstra ürün için iki köşe daha ekleyin.

    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. Kenar ekleyen başka bir Gremlin sorgusu oluşturun.

    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. İki kenar ekleyin.

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

Veriyi oku

Ardından, daha önce grafiğe eklenmiş olan verileri okuyun.

  1. Benzersiz tanımlayıcıyı ve bölüm anahtarı değerini kullanarak bir düğümü okuyan bir sorgu oluşturun.

    const read_vertex_query = 'g.V([prop_partition_key, prop_id])';
    
  2. Ardından gerekli parametreleri sağlayarak köşeyi okuyun.

    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. Benzersiz tanımlayıcıyı ve bölüm anahtarı değerini kullanarak bir düğümü okuyan bir sorgu oluşturun.

    const read_vertex_query: string = 'g.V([prop_partition_key, prop_id])';
    
  2. Ardından gerekli parametreleri sağlayarak köşeyi okuyun.

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

Sorgu verileri

Son olarak, grafikteki belirli bir dolaşma veya filtreyle eşleşen tüm verileri bulmak için sorgu kullanın.

  1. Belirli bir düğümden çıkan tüm düğümleri bulan bir sorgu oluşturun.

    const find_vertices_query = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Ürünü belirten sorguyu yürütür Montau Turtle Surfboard .

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Sorgu sonuçları üzerinde yineleme yapın.

    for (const item of find_results._items) {
        // Do something here with each result
    }
    
  1. Belirli bir düğümden çıkan tüm düğümleri bulan bir sorgu oluşturun.

    const find_vertices_query: string = `
        g.V().hasLabel('product')
            .has('category', prop_partition_key)
            .has('name', prop_name)
            .outE('replaces').inV()
    `;
    
  2. Ürünü belirten sorguyu yürütür Montau Turtle Surfboard .

    let find_results = await client.submit(find_vertices_query, {
        prop_partition_key: 'gear-surf-surfboards',
        prop_name: 'Montau Turtle Surfboard',
    });
    
  3. Sorgu sonuçları üzerinde yineleme yapın.

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

Kodu çalıştırma

Uygulama dizininizde bir terminal kullanarak yeni oluşturulan uygulamayı çalıştırın.

node index.js
npx tsx index.ts

Kaynakları temizleme

Hesaba artık ihtiyacınız kalmadığında, kaynağı silerek hesabı Azure aboneliğinizden kaldırın.

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