Snabbstart: Skapa, köra frågor mot och gå igenom en Azure Cosmos DB-grafdatabas med hjälp av Gremlin-konsolen

GÄLLER FÖR: Gremlin

Azure Cosmos DB är Microsofts globalt distribuerade databastjänst för flera datamodeller. Du kan snabbt skapa och ställa frågor mot databaser med dokument, nyckel/värde-par och grafer. Du får fördelar av den globala distributionen och den horisontella skalningsförmågan som ligger i grunden hos Azure Cosmos DB.

Den här snabbstarten visar hur du skapar ett Azure Cosmos DB Gremlin API-konto, en databas och en graf (container) med hjälp av Azure-Portal och sedan använder Gremlin-konsolen från Apache TinkerPop för att arbeta med Gremlin API-data. I den här självstudien får du skapa och fråga hörn och gränser, uppdatera en hörnegenskap, fråga kanter, bläddra i grafen och släppa ett hörn.

Azure Cosmos DB från konsolen Apache Gremlin

Gremlin-konsolen är Groovy-/Java-baserad och körs på Linux, Mac och Windows. Du kan ladda ned den på Apache TinkerPop-webbplatsen.

Krav

Du måste ha en Azure-prenumeration för att skapa ett Azure Cosmos DB-konto för den här snabbstarten.

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt Azure-konto innan du börjar.

Du måste också installera Gremlin-konsolen. Den rekommenderade versionen är v3.4.13. (Om du vill använda Gremlin-konsolen i Windows måste du installera Java Runtime, minst java 8, men det är bättre att använda Java 11).

Skapa ett databaskonto

  1. Logga in på Azure Portal i ett nytt webbläsarfönster.

  2. I den vänstra menyn väljer du Skapa en resurs.

    Skapa en resurs på Azure-portalen

  3. På sidan Nytt väljer du Databaser>Azure Cosmos DB.

    Fönstret Databaser på Azure Portal

  4. På sidan Skapa Azure Cosmos DB-konto anger du inställningarna för det nya Azure Cosmos DB-kontot.

    Inställning Värde Beskrivning
    Prenumeration Prenumerationens namn Välj den Azure-prenumeration som ska användas för det här Azure Cosmos DB-kontot.
    Resursgrupp Namn på resursgrupp Välj en resursgrupp eller välj Skapa ny och ange sedan ett unikt namn för den nya resursgruppen.
    Account Name Ange ett unikt namn Ange ett unikt namn som identifierar ditt Azure Cosmos DB-konto. Konto-URI:n läggs gremlin.azure.com till ditt unika kontonamn.

    Kontonamnet får endast innehålla gemener, siffror och bindestreck (-) och måste vara mellan 3 och 44 tecken långt.
    API Gremlin (graf) API:et avgör vilken typ av konto som skapas. Azure Cosmos DB innehåller fem API:er: NoSQL för dokumentdatabaser, Gremlin för grafdatabaser, MongoDB för dokumentdatabaser, Azure Table och Cassandra. Du måste skapa ett separat konto för varje API.

    Välj Gremlin (graf) eftersom du i den här snabbstarten skapar en tabell som fungerar med API:et för Gremlin.

    Mer informasjon om API:et för Gremlin.
    Location Den region som är närmast dina användare Välj en geografisk plats som värd för ditt Azure Cosmos DB-konto. Använd den plats som är närmast dina användare för att ge dem så snabb åtkomst till data som möjligt.
    Kapacitetsläge Etablerat dataflöde eller serverlöst Välj Etablerat dataflöde för att skapa ett konto i etablerat dataflödesläge . Välj Serverlös för att skapa ett konto i serverlöst läge.
    Tillämpa rabatt på den kostnadsfria nivån för Azure Cosmos DB Använd eller Använd inte Med den kostnadsfria Azure Cosmos DB-nivån får du de första 1 000 RU/s och 25 GB lagringsutrymme kostnadsfritt på ett konto. Mer informasjon om den kostnadsfria nivån.

    Anteckning

    Du kan ha upp till ett Azure Cosmos DB-konto på kostnadsfri nivå per Azure-prenumeration och måste anmäla dig när du skapar kontot. Om du inte ser alternativet att tillämpa rabatten på den kostnadsfria nivån innebär det att ett annat konto i prenumerationen redan har aktiverats med den kostnadsfria nivån.

    Den nya kontosidan för Azure Cosmos DB

  5. Konfigurera följande information på fliken Global distribution . Du kan lämna standardvärdena i den här snabbstarten:

    Inställning Värde Beskrivning
    Geo-redundans Inaktivera Aktivera eller inaktivera global distribution på ditt konto genom att koppla ihop din region med en parregion. Du kan lägga till fler regioner i ditt konto senare.
    Skrivåtgärder för flera regioner Inaktivera Med skrivfunktioner i flera regioner kan du dra nytta av det etablerade dataflödet för dina databaser och containrar över hela världen.

    Anteckning

    Följande alternativ är inte tillgängliga om du väljer Serverlös som Kapacitetsläge:

    • Tillämpa rabatt för kostnadsfri nivå
    • Geo-redundans
    • Skrivåtgärder för flera regioner
  6. Du kan också konfigurera ytterligare information på följande flikar:

    • Nätverk – Konfigurera åtkomst från ett virtuellt nätverk.
    • Säkerhetskopieringspolicy – Konfigurera antingen periodisk eller kontinuerlig säkerhetskopieringspolicy.
    • Kryptering – Använd antingen tjänsthanterad nyckel eller en kundhanterad nyckel.
    • Taggar – Taggar är namn/värde-par som gör att du kan kategorisera resurser och visa konsoliderad fakturering genom att tillämpa samma tagg på flera resurser och resursgrupper.
  7. Välj Granska + skapa.

  8. Det tar några minuter att skapa kontot. Vänta tills portalen visar Grattis! Sidan för ditt Azure Cosmos DB-konto skapades .

    Sidan Azure Cosmos DB-kontot har skapats

Lägga till en graf

Nu kan du använda datautforskarverktyget i Azure Portal för att skapa en grafdatabas.

  1. Välj Data Explorer>Ny graf.

    Området Lägg till diagram visas längst till höger, du kan behöva bläddra åt höger för att se det.

    Datautforskaren i Azure Portal, sidan Lägg till diagram

  2. På sidan Lägg till diagram anger du inställningarna för den nya grafen.

    Inställning Föreslaget värde Beskrivning
    Databas-id sample-database Ange sample-database som namn på den nya databasen. Databasnamn måste innehålla mellan 1 och 255 tecken och får inte innehålla / \ # ? eller avslutande blanksteg.
    Dataflöde 400 RU:er Ändra genomflödet till 400 begäransenheter per sekund (RU/s). Du kan skala upp dataflödet senare om du vill minska svarstiden.
    Graf-id sample-graph Ange sample-graph som namnet på den nya samlingen. Samma teckenkrav gäller för diagramnamn som databas-ID:n.
    Partition Key (Partitionsnyckel) /Pk Alla Azure Cosmos DB-konton behöver en partitionsnyckel för horisontell skalning. Lär dig hur du väljer en lämplig partitionsnyckel i artikeln Graph Data Partitioning.
  3. När formuläret har fyllts i väljer du OK.

Ansluta till din apptjänst/Graph

  1. Innan du startar Gremlin-konsolen ska du skapa eller ändra konfigurationsfilen remote-secure.yaml i katalogen apache-tinkerpop-gremlin-console-3.2.5/conf.

  2. Fyll i konfigurationen för värd, port, användarnamn, lösenord, anslutningspool och serialiserare enligt definitionerna i följande tabell:

    Inställning Föreslaget värde Beskrivning
    värdar [kontonamn. gremlin.cosmos.azure.com] Se följande skärmbild. Det här är gremlin-URI-värdet på sidan Översikt i Azure-Portal, inom hakparenteser, med avslutande :443/ borttaget. Obs! Se till att använda Gremlin-värdet och inte den URI som slutar med [account-name.documents.azure.com] vilket sannolikt skulle resultera i ett undantag för "Värden svarade inte i tid" när du försökte köra Gremlin-frågor senare.
    port 443 Ställ in på 443.
    användarnamn Ditt användarnamn Resursen i formuläret /dbs/<db>/colls/<coll> där <db> är databasnamnet och <coll> är samlingens namn.
    password Din primärnyckel Se andra skärmbilden nedan. Det här är din primärnyckel som du kan hämta från sidan Nycklar i Azure-portalen i rutan Primärnyckel. Använd kopieringsknappen till vänster om rutan för att kopiera värdet.
    ConnectionPool {enableSsl: true} Inställningen för anslutningspoolen för TLS.
    Serialiserare { className: org.apache.tinkerpop.gremlin.
    driver.ser.GraphSONMessageSerializerV2d0,
    config: { serializeResultToString: true }}
    Ange detta värde och ta bort alla \n-radbrytningar när du klistrar in värdet.

    Som Värd kopierar du värdet Gremlin-URI från översiktssidan:

    Visa och kopiera gremlin-URI-värdet på sidan Översikt i Azure-Portal

    Som lösenordsvärde kopierar du primärnyckeln från sidan Nycklar:

    Visa och kopiera primärnyckeln på sidan Azure-Portal nycklar

    Filen remote-secure.yaml bör se ut så här:

    hosts: [your_database_server.gremlin.cosmos.azure.com] 
    port: 443
    username: /dbs/your_database/colls/your_collection
    password: your_primary_key
    connectionPool: {
      enableSsl: true
    }
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0, config: { serializeResultToString: true }}
    

    se till att omsluta värdet för värdparametern inom hakparenteser [].

  3. I terminalen, kör bin/gremlin.bat eller bin/gremlin.sh för att starta Gremlin-konsolen.

  4. I terminalen, kör :remote connect tinkerpop.server conf/remote-secure.yaml för att ansluta till din apptjänst.

    Tips

    Om felet No appenders could be found for logger visas kontrollerar du att du har uppdaterat serialiserarvärdet i filen remote-secure.yaml på det sätt som beskrivs i steg 2. Om konfigurationen är korrekt kan den här varningen ignoreras på ett säkert sätt eftersom den inte bör påverka användningen av konsolen.

  5. Kör sedan :remote console för att omdirigera alla kommandon till fjärrservern.

    Anteckning

    Om du inte kör kommandot :remote console men vill omdirigera alla konsolkommandon till fjärrservern bör du lägga till prefixet :> till kommandot och till exempel köra kommandot som :> g.V().count(). Det här prefixet är en del av kommandot och är viktigt när du använder Gremlin-konsolen med Azure Cosmos DB. Om du utesluter det här prefixet instrueras konsolen att köra kommandot lokalt, ofta mot en InMemory-graf. Med det här prefixet beordrar :> konsolen att köra fjärrkommandon, i det här fallet mot Azure Cosmos DB (antingen localhost-emulatorn eller en Azure-instans).

Toppen! Konfigurationen är slutförd, så vi kan börja köra några konsolkommandon.

Prova med ett enkelt count()-kommando. Skriv följande i konsolen:

g.V().count()

Skapa hörn och gränser

Vi börjar med att lägga till fem personhörn för Thomas, Mary Kay, Robin, Ben och Jack.

Indata (Thomas):

g.addV('person').property('firstName', 'Thomas').property('lastName', 'Andersen').property('age', 44).property('userid', 1).property('pk', 'pk')

Utdata:

==>[id:796cdccc-2acd-4e58-a324-91d6f6f5ed6d,label:person,type:vertex,properties:[firstName:[[id:f02a749f-b67c-4016-850e-910242d68953,value:Thomas]],lastName:[[id:f5fa3126-8818-4fda-88b0-9bb55145ce5c,value:Andersen]],age:[[id:f6390f9c-e563-433e-acbf-25627628016e,value:44]],userid:[[id:796cdccc-2acd-4e58-a324-91d6f6f5ed6d|userid,value:1]]]]

Indata (Mary Kay):

g.addV('person').property('firstName', 'Mary Kay').property('lastName', 'Andersen').property('age', 39).property('userid', 2).property('pk', 'pk')

Utdata:

==>[id:0ac9be25-a476-4a30-8da8-e79f0119ea5e,label:person,type:vertex,properties:[firstName:[[id:ea0604f8-14ee-4513-a48a-1734a1f28dc0,value:Mary Kay]],lastName:[[id:86d3bba5-fd60-4856-9396-c195ef7d7f4b,value:Andersen]],age:[[id:bc81b78d-30c4-4e03-8f40-50f72eb5f6da,value:39]],userid:[[id:0ac9be25-a476-4a30-8da8-e79f0119ea5e|userid,value:2]]]]

Indata (Robin):

g.addV('person').property('firstName', 'Robin').property('lastName', 'Wakefield').property('userid', 3).property('pk', 'pk')

Utdata:

==>[id:8dc14d6a-8683-4a54-8d74-7eef1fb43a3e,label:person,type:vertex,properties:[firstName:[[id:ec65f078-7a43-4cbe-bc06-e50f2640dc4e,value:Robin]],lastName:[[id:a3937d07-0e88-45d3-a442-26fcdfb042ce,value:Wakefield]],userid:[[id:8dc14d6a-8683-4a54-8d74-7eef1fb43a3e|userid,value:3]]]]

Indata (Ben):

g.addV('person').property('firstName', 'Ben').property('lastName', 'Miller').property('userid', 4).property('pk', 'pk')

Utdata:

==>[id:ee86b670-4d24-4966-9a39-30529284b66f,label:person,type:vertex,properties:[firstName:[[id:a632469b-30fc-4157-840c-b80260871e9a,value:Ben]],lastName:[[id:4a08d307-0719-47c6-84ae-1b0b06630928,value:Miller]],userid:[[id:ee86b670-4d24-4966-9a39-30529284b66f|userid,value:4]]]]

Indata (Jack):

g.addV('person').property('firstName', 'Jack').property('lastName', 'Connor').property('userid', 5).property('pk', 'pk')

Utdata:

==>[id:4c835f2a-ea5b-43bb-9b6b-215488ad8469,label:person,type:vertex,properties:[firstName:[[id:4250824e-4b72-417f-af98-8034aa15559f,value:Jack]],lastName:[[id:44c1d5e1-a831-480a-bf94-5167d133549e,value:Connor]],userid:[[id:4c835f2a-ea5b-43bb-9b6b-215488ad8469|userid,value:5]]]]

Nu ska vi lägga till gränser för personernas relationer.

Input (Thomas -> Mary Kay):

g.V().hasLabel('person').has('firstName', 'Thomas').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Mary Kay'))

Utdata:

==>[id:c12bf9fb-96a1-4cb7-a3f8-431e196e702f,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:0d1fa428-780c-49a5-bd3a-a68d96391d5c,outV:1ce821c6-aa3d-4170-a0b7-d14d2a4d18c3]

Indata (Thomas –> Robin):

g.V().hasLabel('person').has('firstName', 'Thomas').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Robin'))

Utdata:

==>[id:58319bdd-1d3e-4f17-a106-0ddf18719d15,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:3e324073-ccfc-4ae1-8675-d450858ca116,outV:1ce821c6-aa3d-4170-a0b7-d14d2a4d18c3]

Indata (Robin –> Ben):

g.V().hasLabel('person').has('firstName', 'Robin').addE('knows').to(g.V().hasLabel('person').has('firstName', 'Ben'))

Utdata:

==>[id:889c4d3c-549e-4d35-bc21-a3d1bfa11e00,label:knows,type:edge,inVLabel:person,outVLabel:person,inV:40fd641d-546e-412a-abcc-58fe53891aab,outV:3e324073-ccfc-4ae1-8675-d450858ca116]

Uppdatera ett hörn

Nu ska vi uppdatera Thomas hörn med den nya åldern 45.

Indata:

g.V().hasLabel('person').has('firstName', 'Thomas').property('age', 45)

Utdata:

==>[id:ae36f938-210e-445a-92df-519f2b64c8ec,label:person,type:vertex,properties:[firstName:[[id:872090b6-6a77-456a-9a55-a59141d4ebc2,value:Thomas]],lastName:[[id:7ee7a39a-a414-4127-89b4-870bc4ef99f3,value:Andersen]],age:[[id:a2a75d5a-ae70-4095-806d-a35abcbfe71d,value:45]]]]

Fråga diagrammet

Nu ska vi köra en mängd olika frågor mot grafen.

Vi försöker först fråga med ett filter för att endast returnera personer som är äldre än 40 år.

Indata (filterfråga):

g.V().hasLabel('person').has('age', gt(40))

Utdata:

==>[id:ae36f938-210e-445a-92df-519f2b64c8ec,label:person,type:vertex,properties:[firstName:[[id:872090b6-6a77-456a-9a55-a59141d4ebc2,value:Thomas]],lastName:[[id:7ee7a39a-a414-4127-89b4-870bc4ef99f3,value:Andersen]],age:[[id:a2a75d5a-ae70-4095-806d-a35abcbfe71d,value:45]]]]

Sedan projicerar vi förnamnet på personerna som är över 40 år.

Indata (filter + projektionsfråga):

g.V().hasLabel('person').has('age', gt(40)).values('firstName')

Utdata:

==>Thomas

Bläddra i grafen

Vi bläddrar i grafen för att returnera alla Thomas vänner.

Indata (Thomas vänner):

g.V().hasLabel('person').has('firstName', 'Thomas').outE('knows').inV().hasLabel('person')

Utdata:

==>[id:f04bc00b-cb56-46c4-a3bb-a5870c42f7ff,label:person,type:vertex,properties:[firstName:[[id:14feedec-b070-444e-b544-62be15c7167c,value:Mary Kay]],lastName:[[id:107ab421-7208-45d4-b969-bbc54481992a,value:Andersen]],age:[[id:4b08d6e4-58f5-45df-8e69-6b790b692e0a,value:39]]]]
==>[id:91605c63-4988-4b60-9a30-5144719ae326,label:person,type:vertex,properties:[firstName:[[id:f760e0e6-652a-481a-92b0-1767d9bf372e,value:Robin]],lastName:[[id:352a4caa-bad6-47e3-a7dc-90ff342cf870,value:Wakefield]]]]

Nu ska vi hämta nästa lager med hörn. Bläddra i grafen för att returnera alla Thomas vänners vänner.

Indata (Thomas vänners vänner):

g.V().hasLabel('person').has('firstName', 'Thomas').outE('knows').inV().hasLabel('person').outE('knows').inV().hasLabel('person')

Utdata:

==>[id:a801a0cb-ee85-44ee-a502-271685ef212e,label:person,type:vertex,properties:[firstName:[[id:b9489902-d29a-4673-8c09-c2b3fe7f8b94,value:Ben]],lastName:[[id:e084f933-9a4b-4dbc-8273-f0171265cf1d,value:Miller]]]]

Släppa ett hörn

Vi ska nu ta bort ett hörn från Graph-databasen.

Indata (drop Jack vertex):

g.V().hasLabel('person').has('firstName', 'Jack').drop()

Rensa diagrammet

Slutligen ska vi rensa databasen från alla hörn och gränser.

Indata:

g.E().drop()
g.V().drop()

Grattis! Du har slutfört den här självstudien om Azure Cosmos DB: Gremlin API!

Granska serviceavtal i Azure-portalen

Azure-Portal övervakar dataflöde, lagring, tillgänglighet, svarstid och konsekvens för ditt Azure Cosmos DB-konto. Diagram för mått som är associerade med ett serviceavtal för Azure Cosmos DB (SLA) visar SLA-värdet jämfört med faktiska prestanda. Den här måttsviten gör övervakningen av serviceavtalen transparent.

Så här granskar du mått och serviceavtal:

  1. Välj Mått i navigeringsmenyn för ditt Azure Cosmos DB-konto.

  2. Välj en flik, till exempel Svarstid, och välj en tidsram till höger. Jämför linjerna Actual och SLA i diagrammen.

    Azure Cosmos DB-måttsvit

  3. Granska måtten på de andra flikarna.

Rensa resurser

När du är klar med din app och ditt Azure Cosmos DB-konto kan du ta bort de Azure-resurser som du skapade så att du inte debiteras mer. Ta bort resurser:

  1. I Azure-Portal sökfältet söker du efter och väljer Resursgrupper.

  2. I listan väljer du den resursgrupp som du skapade för den här snabbstarten.

    Välj den resursgrupp som ska tas bort

  3. resursgruppens översiktssida väljer du Ta bort resursgrupp.

    Ta bort resursgruppen

  4. I nästa fönster anger du namnet på resursgruppen som ska tas bort och väljer sedan Ta bort.

Nästa steg

I den här snabbstarten har du lärt dig att skapa ett Azure Cosmos DB-konto, skapa en graf med Datautforskaren, skapa hörn och gränser och bläddra i grafen med Gremlin-konsolen. Nu kan du skapa mer komplexa frågor och implementera kraftfull logik för grafbläddring med Gremlin.