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

ŞUNLAR IÇIN GEÇERLIDIR: Gremlin

Apache Gremlin için Azure Cosmos DB, Gremlin sorgu dilini kullanan popüler Apache Tinkerpopbir graf bilgi işlem çerçevesi uygulayan tam olarak yönetilen bir graf veritabanı hizmetidir. Gremlin API'si, minimum yönetimle gremlin'i istediğiniz kadar büyüyebilen ve ölçeği genişletebilen bir hizmetle kullanmaya başlamanız için düşük uyuşmalı bir yol sunar.

Bu hızlı başlangıçta kitaplığını Gremlin.Net kullanarak yeni oluşturulan Gremlin için Azure Cosmos DB hesabına bağlanacaksınız.

Kitaplık kaynak kodu | Paketi (NuGet)

Önkoşullar

Azure Cloud Shell

Azure, tarayıcınız aracılığıyla kullanabileceğiniz etkileşimli bir kabuk ortamı olan Azure Cloud Shell'i barındırıyor. Azure hizmetleriyle çalışmak için Cloud Shell ile Bash veya PowerShell kullanabilirsiniz. Yerel ortamınıza herhangi bir şey yüklemek zorunda kalmadan bu makaledeki kodu çalıştırmak için Cloud Shell önceden yüklenmiş komutlarını kullanabilirsiniz.

Azure Cloud Shell'i başlatmak için:

Seçenek Örnek/Bağlantı
Kodun veya komut bloğunun sağ üst köşesindeki Deneyin'i seçin. Deneyin seçildiğinde kod veya komut otomatik olarak Cloud Shell'e kopyalanmaz. Azure Cloud Shell için Deneyin örneğini gösteren ekran görüntüsü.
https://shell.azure.comadresine gidin veya Cloud Shell'i tarayıcınızda açmak için Cloud Shell'i Başlat düğmesini seçin. Azure Cloud Shell'i başlatma düğmesi.
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. Azure portalında Cloud Shell düğmesini gösteren ekran görüntüsü

Azure Cloud Shell'i kullanmak için:

  1. Cloud Shell'i başlatın.

  2. Kodu veya komutu kopyalamak için kod bloğundaki (veya komut bloğundaki) Kopyala düğmesini seçin.

  3. Windows ve Linux'ta Ctrl+Shift V'yi seçerek veya macOS üzerinde Cmd+Shift++V'yi seçerek kodu veya komutu Cloud Shell oturumuna yapıştırın.

  4. Kodu veya komutu çalıştırmak için Enter'ı seçin.

Ayarlama

Bu bölümde Gremlin hesabı için API oluşturma ve hesaba bağlanmak üzere kitaplığı kullanacak bir .NET projesi ayarlama adımları açıklanmıştır.

Gremlin hesabı için API oluşturma

.NET kitaplığını kullanmadan önce Gremlin hesabı için API oluşturulmalıdır. Ayrıca, veritabanının ve grafiğin yerinde olması da yardımcı olur.

  1. accountName, resourceGroupName ve location için kabuk değişkenleri oluşturun.

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    location="westus"
    
    # Variable for account name with a randomly generated suffix
    
    let suffix=$RANDOM*$RANDOM
    accountName="msdocs-gremlin-$suffix"
    
  2. Henüz yapmadıysanız kullanarak az loginAzure CLI'da oturum açın.

  3. Aboneliğinizde yeni bir kaynak grubu oluşturmak için kullanın az group create .

    az group create \
        --name $resourceGroupName \
        --location $location
    
  4. Varsayılan ayarlarla Gremlin hesabı için yeni bir API oluşturmak için kullanın az cosmosdb create .

    az cosmosdb create \
        --resource-group $resourceGroupName \
        --name $accountName \
        --capabilities "EnableGremlin" \
        --locations regionName=$location \
        --enable-free-tier true
    

    Not

    Azure aboneliği başına bir ücretsiz katman Azure Cosmos DB hesabına sahip olabilirsiniz. Bunu hesabı oluştururken kabul etmeniz gerekir. Bu komut ücretsiz katman indirimini uygulayamazsa, bu abonelikteki başka bir hesabın ücretsiz katmanla zaten etkinleştirildiği anlamına gelir.

  5. kullanarak az cosmosdb showhesabın Gremlin uç nokta ADı API'sini alın.

    az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName \
        --query "name"
    
  6. ile hesabın az-cosmosdb-keys-listanahtar listesinden KEY değerini bulun.

    az cosmosdb keys list \
        --resource-group $resourceGroupName \
        --name $accountName \
        --type "keys" \
        --query "primaryMasterKey"
    
  7. AD ve ANAHTAR değerlerini kaydedin. Bu kimlik bilgilerini daha sonra kullanacaksınız.

  8. kullanarak az cosmosdb gremlin database createadlı cosmicworks bir veritabanı oluşturun.

    az cosmosdb gremlin database create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --name "cosmicworks"
    
  9. kullanarak az cosmosdb gremlin graph createbir grafik oluşturun. Grafı productsadlandırın, ardından aktarım hızını olarak 400ayarlayın ve son olarak bölüm anahtarı yolunu olarak /categoryayarlayın.

    az cosmosdb gremlin graph create \
        --resource-group $resourceGroupName \
        --account-name $accountName \
        --database-name "cosmicworks" \
        --name "products" \
        --partition-key-path "/category" \
        --throughput 400
    

Yeni bir .NET konsol uygulaması oluşturma

Tercih ettiğiniz terminali kullanarak boş bir klasörde .NET konsol uygulaması oluşturun.

  1. Terminalinizi boş bir klasörde açın.

  2. dotnet new Konsol şablonunu belirten komutunu kullanın.

    dotnet new console
    

NuGet paketini yükleme

Gremlin.NET NuGet paketini .NET projesine ekleyin.

  1. dotnet add package NuGet paketini belirten Gremlin.Net komutunu kullanın.

    dotnet add package Gremlin.Net
    
  2. kullanarak dotnet build.NET projesini oluşturun.

    dotnet build
    

    Derlemenin hata olmadan başarılı olduğundan emin olun. Derlemeden beklenen çıkış şöyle görünmelidir:

    Determining projects to restore...
      All projects are up-to-date for restore.
      dslkajfjlksd -> \dslkajfjlksd\bin\Debug\net6.0\dslkajfjlksd.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    

Ortam değişkenlerini yapılandırma

Bu hızlı başlangıçta daha önce elde edilen AD ve URI değerlerini kullanmak için, bunları uygulamayı çalıştıran yerel makinedeki yeni ortam değişkenlerinde kalıcı hale getirin.

  1. Ortam değişkenini ayarlamak için, değerleri sırasıyla ve COSMOS_KEY olarak COSMOS_ENDPOINT kalıcı hale getirmek için terminalinizi kullanın.

    export COSMOS_GREMLIN_ENDPOINT="<account-name>"
    export COSMOS_GREMLIN_KEY="<account-key>"
    
  2. Ortam değişkenlerinin doğru ayarlandığını doğrulayın.

    printenv COSMOS_GREMLIN_ENDPOINT
    printenv COSMOS_GREMLIN_KEY
    

Kod örnekleri

Bu makaledeki kod adlı bir veritabanına ve adlı cosmicworks productsbir grafa bağlanır. Kod daha sonra eklenen öğeleri geçirmeden önce grafiğe köşeler ve kenarlar ekler.

İstemcinin kimliğini doğrulama

Çoğu Azure hizmeti için uygulama istekleri yetkilendirilmelidir. Gremlin API'sinde , bu hızlı başlangıçta daha önce elde edilen AD ve URI değerlerini kullanın.

  1. Program.cs dosyasını açın.

  2. Dosyadaki mevcut tüm içeriği silin.

  3. Ad alanı için Gremlin.Net.Driver bir using bloğu ekleyin.

    using Gremlin.Net.Driver;
    
  4. Değişken oluşturma accountName ve accountKey dize oluşturma. COSMOS_GREMLIN_ENDPOINT ve COSMOS_GREMLIN_KEY ortam değişkenlerini ilgili her değişkenin değerleri olarak depolayın.

    string accountName = Environment.GetEnvironmentVariable("COSMOS_GREMLIN_ENDPOINT")!;
    string accountKey = Environment.GetEnvironmentVariable("COSMOS_GREMLIN_KEY")!;
    
  5. Hesabın GremlinServer kimlik bilgilerini kullanarak yeni bir örneği oluşturun.

    var server = new GremlinServer(
        hostname: $"{accountName}.gremlin.cosmos.azure.com",
        port: 443,
        username: "/dbs/cosmicworks/colls/products",
        password: $"{accountKey}",
        enableSsl: true
    );
    
  6. Uzak sunucu kimlik bilgilerini ve GraphSON 2.0 seri hale getiricisini kullanarak yeni bir örneği GremlinClient oluşturun.

    using var client = new GremlinClient(
        gremlinServer: server,
        messageSerializer: new Gremlin.Net.Structure.IO.GraphSON.GraphSON2MessageSerializer()
    );
    

Köşe oluşturma

Uygulama hesaba bağlı olduğuna göre köşe oluşturmak için standart Gremlin söz dizimini kullanın.

  1. Gremlin hesabı için API'de sunucu tarafında bir komut çalıştırmak için kullanın SubmitAsync . Aşağıdaki özelliklere sahip bir ürün köşesi oluşturun:

    Değer
    etiket product
    id 68719518371
    name Kiama classic surfboard
    price 285.55
    category surfboards
    await client.SubmitAsync(
        requestScript: "g.addV('product').property('id', '68719518371').property('name', 'Kiama classic surfboard').property('price', 285.55).property('category', 'surfboards')"
    );
    
  2. Şu özelliklere sahip ikinci bir ürün köşesi oluşturun:

    Değer
    etiket product
    id 68719518403
    name Montau Turtle Surfboard
    price 600.00
    category surfboards
    await client.SubmitAsync(
        requestScript: "g.addV('product').property('id', '68719518403').property('name', 'Montau Turtle Surfboard').property('price', 600.00).property('category', 'surfboards')"
    );
    
  3. Şu özelliklere sahip üçüncü bir ürün köşesi oluşturun:

    Değer
    etiket product
    id 68719518409
    name Bondi Twin Surfboard
    price 585.50
    category surfboards
    await client.SubmitAsync(
        requestScript: "g.addV('product').property('id', '68719518409').property('name', 'Bondi Twin Surfboard').property('price', 585.50).property('category', 'surfboards')"
    );
    

Kenar oluşturma

Köşeler arasındaki ilişkileri tanımlamak için Gremlin söz dizimini kullanarak kenarlar oluşturun.

  1. Yerine Kiama classic surfboard ürün olarak Montau Turtle Surfboard adlandırılan üründen bir kenar oluşturun.

    await client.SubmitAsync(
        requestScript: "g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518371']))"
    );
    

    İpucu

    Bu kenar tanımlayıcısı söz dizimini g.V(['<partition-key>', '<id>']) kullanır. Alternatif olarak, kullanabilirsiniz g.V('<id>').has('category', '<partition-key>').

  2. Başka bir oluşturma, aynı üründeki kenarı ile Bondi Twin Surfboarddeğiştirir.

    await client.SubmitAsync(
        requestScript: "g.V(['surfboards', '68719518403']).addE('replaces').to(g.V(['surfboards', '68719518409']))"
    );
    

Sorgu köşeleri ve kenarlar

Grafta geçiş yapmak ve köşeler arasındaki ilişkileri bulmak için Gremlin söz dizimini kullanın.

  1. Grafı çapraz geçin ve yerini alan Montau Turtle Surfboard tüm köşeleri bulun.

    var results = await client.SubmitAsync<Dictionary<string, object>>(
        requestScript: "g.V().hasLabel('product').has('category', 'surfboards').has('name', 'Montau Turtle Surfboard').outE('replaces').inV()"
    );
    
  2. Konsola statik dizesini [CREATED PRODUCT]\t68719518403yazın. Ardından, bir foreach döngü kullanarak eşleşen her köşeyi yineleyin ve konsola ile [REPLACES PRODUCT] başlayan ve eşleşen ürün id alanını sonek olarak içeren bir ileti yazın.

    Console.WriteLine($"[CREATED PRODUCT]\t68719518403");
    foreach (var result in results ?? Enumerable.Empty<Dictionary<string, object>>())
    {
        Console.WriteLine($"[REPLACES PRODUCT]\t{result["id"]}");
    }
    

Kodu çalıştırma

Uygulamayı çalıştırarak uygulamanızın beklendiği gibi çalıştığını doğrulayın. Uygulama hiçbir hata veya uyarı olmadan yürütülmelidir. Uygulamanın çıktısı, oluşturulan ve sorgulanan öğeler hakkındaki verileri içerir.

  1. Terminali .NET proje klasöründe açın.

  2. Uygulamayı çalıştırmak için kullanın dotnet run .

    dotnet run
    
  3. Uygulamanın çıkışını gözlemleyin.

    [CREATED PRODUCT]       68719518403
    [REPLACES PRODUCT]      68719518371
    [REPLACES PRODUCT]      68719518409
    

Kaynakları temizleme

Gremlin hesabı için API'ye artık ihtiyacınız kalmadığında ilgili kaynak grubunu silin.

  1. Henüz yoksa resourceGroupName için bir kabuk değişkeni oluşturun.

    # Variable for resource group name
    resourceGroupName="msdocs-cosmos-gremlin-quickstart"
    
  2. Kaynak grubunu silmek için kullanın az group delete .

    az group delete \
        --name $resourceGroupName
    

Sonraki adım