Hızlı Başlangıç: Python 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ı gremlinpython kullanarak yeni oluşturulan Gremlin için Azure Cosmos DB hesabına bağlanacaksınız.

Kitaplık kaynak kodu | Paketi (PyPi)

Ö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. Screenshot that shows an example of Try It for Azure Cloud Shell.
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. Button to launch Azure Cloud Shell.
Azure portalının sağ üst kısmındaki menü çubuğunda Cloud Shell düğmesini seçin. Screenshot that shows the Cloud Shell button in the Azure portal

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 Python projesi ayarlama adımları açıklanmıştır.

Gremlin hesabı için API oluşturma

Python 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 python konsol uygulaması oluşturma

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

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

  2. app.py dosyasını oluşturun.

    touch app.py
    

PyPI paketini yükleme

Python projesine gremlinpython PyPI paketini ekleyin.

  1. requirements.txt dosyasını oluşturun.

    touch requirements.txt
    
  2. gremlinpython Paketi Python Paket Dizini'nden gereksinimler dosyasına ekleyin.

    gremlinpython==3.7.0
    
  3. Tüm gereksinimleri projenize yükleyin.

    python install -r requirements.txt
    

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ı cosmicworksproductsbir 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. app.py dosyasını açın.

  2. Modülden ve serializer modülden içeri aktarın.clientgremlin_python.driver

    import os
    from gremlin_python.driver import client, serializer
    

    Uyarı

    Python sürümünüze bağlı olarak olay döngüsü ilkesini içeri aktarmanız asyncio ve geçersiz kılmanız da gerekebilir:

    import asyncio
    import sys
    
    if sys.platform == "win32":
        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    
  3. ve ACCOUNT_KEY değişkenleri oluşturunACCOUNT_NAME. COSMOS_GREMLIN_ENDPOINT ve COSMOS_GREMLIN_KEY ortam değişkenlerini ilgili her değişkenin değerleri olarak depolayın.

    ACCOUNT_NAME = os.environ["COSMOS_GREMLIN_ENDPOINT"]
    ACCOUNT_KEY = os.environ["COSMOS_GREMLIN_KEY"]
    
  4. Hesabın kimlik bilgilerini ve GraphSON 2.0 seri hale getiricisini kullanarak bağlanmak için kullanınClient.

    client = client.Client(
        url=f"wss://{ACCOUNT_NAME}.gremlin.cosmos.azure.com:443/",
        traversal_source="g",
        username="/dbs/cosmicworks/colls/products",
        password=f"{ACCOUNT_KEY}",
        message_serializer=serializer.GraphSONSerializersV2d0(),
    )
    

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 submit . 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
    client.submit(
        message=(
            "g.addV('product')"
            ".property('id', prop_id)"
            ".property('name', prop_name)"
            ".property('price', prop_price)"
            ".property('category', prop_partition_key)"
        ),
        bindings={
            "prop_id": "68719518371",
            "prop_name": "Kiama classic surfboard",
            "prop_price": 285.55,
            "prop_partition_key": "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
    client.submit(
        message=(
            "g.addV('product')"
            ".property('id', prop_id)"
            ".property('name', prop_name)"
            ".property('price', prop_price)"
            ".property('category', prop_partition_key)"
        ),
        bindings={
            "prop_id": "68719518403",
            "prop_name": "Montau Turtle Surfboard",
            "prop_price": 600.00,
            "prop_partition_key": "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
    client.submit(
        message=(
            "g.addV('product')"
            ".property('id', prop_id)"
            ".property('name', prop_name)"
            ".property('price', prop_price)"
            ".property('category', prop_partition_key)"
        ),
        bindings={
            "prop_id": "68719518409",
            "prop_name": "Bondi Twin Surfboard",
            "prop_price": 585.50,
            "prop_partition_key": "surfboards",
        },
    )
    

Kenar oluşturma

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

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

    client.submit(
        message=(
            "g.V([prop_partition_key, prop_source_id])"
            ".addE('replaces')"
            ".to(g.V([prop_partition_key, prop_target_id]))"
        ),
        bindings={
            "prop_partition_key": "surfboards",
            "prop_source_id": "68719518403",
            "prop_target_id": "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.

    client.submit(
        message=(
            "g.V([prop_partition_key, prop_source_id])"
            ".addE('replaces')"
            ".to(g.V([prop_partition_key, prop_target_id]))"
        ),
        bindings={
            "prop_partition_key": "surfboards",
            "prop_source_id": "68719518403",
            "prop_target_id": "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.

    result = client.submit(
        message=(
            "g.V().hasLabel('product')"
            ".has('category', prop_partition_key)"
            ".has('name', prop_name)"
            ".outE('replaces').inV()"
        ),
        bindings={
            "prop_partition_key": "surfboards",
            "prop_name": "Montau Turtle Surfboard",
        },
    )
    
  2. Konsola bu geçişin sonucunu yazın.

    print(result)
    

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. Python proje klasöründe terminali açın.

  2. Uygulamayı çalıştırmak için kullanın python <filename> . Uygulamanın çıkışını gözlemleyin.

    python app.py
    

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