Delen via


Gepartitioneerde graaf gebruiken in Azure Cosmos DB

VAN TOEPASSING OP: Gremlin

Een van de belangrijkste functies van de API voor Gremlin in Azure Cosmos DB is de mogelijkheid om grootschalige grafieken te verwerken via horizontaal schalen. De containers kunnen onafhankelijk worden geschaald in termen van opslag en doorvoer. U kunt containers maken in Azure Cosmos DB die automatisch kunnen worden geschaald om grafiekgegevens op te slaan. De gegevens worden automatisch verdeeld op basis van de opgegeven partitiesleutel.

Partitionering wordt intern uitgevoerd als verwacht wordt dat de container meer dan 20 GB groot is of als u meer dan 10.000 aanvraageenheden per seconde (RU's) wilt toewijzen. Gegevens worden automatisch gepartitioneerd op basis van de partitiesleutel die u opgeeft. Partitiesleutel is vereist als u grafiekcontainers maakt vanuit Azure Portal of de 3.x- of hogere versies van Gremlin-stuurprogramma's. Partitiesleutel is niet vereist als u 2.x of lagere versies van Gremlin-stuurprogramma's gebruikt.

Dezelfde algemene principes van het partitioneringsmechanisme van Azure Cosmos DB zijn van toepassing met enkele grafiekspecifieke optimalisaties die hieronder worden beschreven.

Graafpartitionering.

Mechanisme voor het partitioneren van grafieken

In de volgende richtlijnen wordt beschreven hoe de partitioneringsstrategie in Azure Cosmos DB werkt:

  • Zowel hoekpunten als randen worden opgeslagen als JSON-documenten.

  • Hoekpunten vereisen een partitiesleutel. Met deze sleutel wordt bepaald in welke partitie het hoekpunt wordt opgeslagen via een hash-algoritme. De eigenschapsnaam van de partitiesleutel wordt gedefinieerd bij het maken van een nieuwe container en heeft een indeling: /partitioning-key-name.

  • Randen worden opgeslagen met hun bronpunt. Met andere woorden, voor elk hoekpunt bepaalt de partitiesleutel waar ze samen met de uitgaande randen worden opgeslagen. Deze optimalisatie wordt uitgevoerd om query's tussen partities te voorkomen bij het gebruik van de out() kardinaliteit in grafiekquery's.

  • Randen bevatten verwijzingen naar de hoekpunten die ze aanwijzen. Alle randen worden opgeslagen met de partitiesleutels en id's van de hoekpunten waarnaar ze verwijzen. Deze berekening maakt alle out() richtingquery's altijd een gepartitioneerde query binnen het bereik en niet een blinde query voor meerdere partities.

  • Grafiekquery's moeten een partitiesleutel opgeven. Als u optimaal gebruik wilt maken van de horizontale partitionering in Azure Cosmos DB, moet de partitiesleutel worden opgegeven wanneer één hoekpunt wordt geselecteerd, wanneer dit mogelijk is. Hier volgen query's voor het selecteren van een of meer hoekpunten in een gepartitioneerde grafiek:

    • /id en /label worden niet ondersteund als partitiesleutels voor een container in API voor Gremlin.

    • Als u een hoekpunt op id selecteert, gebruikt u vervolgens de .has() stap om de eigenschap van de partitiesleutel op te geven:

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Een hoekpunt selecteren door een tuple op te geven, inclusief partitiesleutelwaarde en id:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Selecteer een set hoekpunten met de bijbehorende id's en geef een lijst met partitiesleutelwaarden op:

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • Gebruik de partitiestrategie aan het begin van een query en geef een partitie op voor het bereik van de rest van de Gremlin-query:

      g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
      

Aanbevolen procedures bij het gebruik van een gepartitioneerde grafiek

Gebruik de volgende richtlijnen om prestaties en schaalbaarheid te garanderen bij het gebruik van gepartitioneerde grafieken met onbeperkte containers:

  • Geef altijd de waarde van de partitiesleutel op bij het uitvoeren van query's op een hoekpunt. Het ophalen van hoekpunten van een bekende partitie is een manier om prestaties te bereiken. Alle volgende aangrenzingsbewerkingen worden altijd gericht op een partitie, omdat Edges referentie-id en partitiesleutel bevatten voor de doelpunten.

  • Gebruik de uitgaande richting bij het uitvoeren van query's op randen wanneer dit mogelijk is. Zoals hierboven vermeld, worden randen opgeslagen met de bronpunten in de uitgaande richting. De kans op het gebruik van query's tussen partities wordt dus geminimaliseerd wanneer de gegevens en query's zijn ontworpen met dit patroon in gedachten. Integendeel, de in() query is altijd een dure fan-outquery.

  • Kies een partitiesleutel waarmee gegevens gelijkmatig over partities worden verdeeld. Deze beslissing is sterk afhankelijk van het gegevensmodel van de oplossing. Lees meer over het maken van een geschikte partitiesleutel bij partitioneren en schalen in Azure Cosmos DB.

  • Optimaliseer query's om gegevens te verkrijgen binnen de grenzen van een partitie. Een optimale partitioneringsstrategie wordt afgestemd op de querypatronen. Query's die gegevens ophalen van één partitie bieden de best mogelijke prestaties.

Volgende stappen

Hierna kunt u doorgaan met het lezen van de volgende artikelen: