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-API
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, databas och 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.
Gremlin-konsolen är Groovy-/Java-baserad och körs på Linux, Mac och Windows. Du kan ladda ned den på Apache TinkerPop-webbplatsen.
Förutsättningar
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-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.
Du måste också installera Gremlin-konsolen. Den rekommenderade versionen är v3.4.3 eller tidigare. (Om du vill använda Gremlin-konsolen Windows måste du installera Java Runtime, minst Java 8, men det är bättre att använda Java 11).
Skapa ett databaskonto
Logga in på Azure Portal i ett nytt webbläsarfönster.
I den vänstra menyn väljer du Skapa en resurs.
På sidan Nytt väljer du Databaser > Azure Cosmos DB.
På sidan Skapa Azure Cosmos DB konto anger du inställningarna för det nya Azure Cosmos DB konto.
Inställning Värde Beskrivning Prenumeration Prenumerationens namn Välj den Azure-prenumeration som ska användas för det här Azure Cosmos-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. Din konto-URI gremlin.azure.com till ditt unika kontonamn.
Kontonamnet får bara 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: Core (SQL) 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 Gremlin-API:et.
Läs mer om Gremlin-API:et.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 Azure Cosmos DB rabatt på den kostnadsfria nivån Tillämpa eller Tillämpa inte Med Azure Cosmos DB kostnadsfri nivå får du de första 1 000 RU/s och 25 GB lagringsutrymme kostnadsfritt i ett konto. Läs mer om den kostnadsfria nivån. Anteckning
Du kan ha upp till en kostnadsfri nivå Azure Cosmos DB per Azure-prenumeration och måste välja när du skapar kontot. Om du inte ser alternativet för 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.
Konfigurera följande information på fliken Global distribution. Du kan lämna standardvärdena för 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 för 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
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 en tjänst hanterad nyckel eller en kund hanterad 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.
Välj Granska + skapa.
Det tar några minuter att skapa kontot. Vänta tills portalen visar grattis! Din Azure Cosmos DB-konto har skapats.
Lägga till en graf
Nu kan du använda datautforskarverktyget i Azure Portal för att skapa en grafdatabas.
Välj Datautforskaren > Ny Graph.
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.

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 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 datapartitionering. När formuläret har fyllts i väljer du OK.
Anslut till din apptjänst/Graph
Innan du startar Gremlin-konsolen ska du skapa eller ändra konfigurationsfilen remote-secure.yaml i katalogen
apache-tinkerpop-gremlin-console-3.2.5/conf.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 [account-name. 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, där avslutande :443/ har tagits bort. Obs! Se till att du använder Gremlin-värdet och inte den URI som slutar med [ account-name .documents.azure.com] vilket troligen skulle resultera i ett undantagsfel av "Värden svarade inte inom rimlig tid" när du försöker 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} Din inställning 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:
Som lösenordsvärde kopierar du primärnyckeln från sidan 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 [].
I terminalen, kör
bin/gremlin.batellerbin/gremlin.shför att starta Gremlin-konsolen.I terminalen, kör
:remote connect tinkerpop.server conf/remote-secure.yamlför att ansluta till din apptjänst.Tips
Om felet
No appenders could be found for loggervisas 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 eftersom den inte ska påverka användningen av konsolen.Kör sedan
:remote consoleför att omdirigera alla kommandon till fjärrservern.Anteckning
Om du inte kör kommandot
:remote consolemen 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.
Indata (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
Den Azure Portal övervakar Cosmos DB dataflöde, lagring, tillgänglighet, svarstid och konsekvens för ditt konto. Diagram för mått som är associerade med Azure Cosmos DB Serviceavtal (SLA) visar SLA-värdet jämfört med faktiska prestanda. Den här måttsviten gör övervakningen av dina serviceavtal transparent.
Så här granskar du mått och serviceavtal:
Välj Mått i Cosmos DB-kontots navigeringsmeny.
Välj en flik, till exempel Svarstid, och välj en tidsram till höger. Jämför linjerna Actual och SLA i diagrammen.

Granska måtten på de andra flikarna.
Rensa resurser
När du är klar med din app och Azure Cosmos DB-konto kan du ta bort de Azure-resurser som du skapade så att du inte debiteras mer. Ta bort resurser:
I sökfältet Azure Portal du efter och väljer Resursgrupper.
I listan väljer du den resursgrupp som du skapade för den här snabbstarten.

På sidan Översikt för resursgruppen väljer du Ta bort resursgrupp.

I nästa fönster anger du namnet på den resursgrupp 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.