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 wat betreft 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 de container naar verwachting 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 op basis van de Azure Portal of de 3.x- of hogere versie 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 Azure Cosmos DB-partitiemechanisme zijn van toepassing met enkele grafiekspecifieke optimalisaties die hieronder worden beschreven.

Grafiekpartitionering.

Grafiekpartitioneringsmechanisme

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. Deze sleutel bepaalt in welke partitie het hoekpunt wordt opgeslagen via een hash-algoritme. De naam van de eigenschap partitiesleutel wordt gedefinieerd bij het maken van een nieuwe container en heeft een indeling: /partitioning-key-name.

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

  • Randen bevatten verwijzingen naar de hoekpunten waar ze naar verwijzen. Alle randen worden opgeslagen met de partitiesleutels en id's van de hoekpunten waarnaar ze verwijzen. Deze berekening zorgt ervoor dat query's in alle out() richtingen altijd een gepartitioneerde query met een bereik zijn en geen 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 er éé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.

    • Selecteer een hoekpunt op id en gebruik vervolgens de .has() stap om de eigenschap partitiesleutel op te geven:

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

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Een set hoekpunten met hun id's selecteren en een lijst met partitiesleutelwaarden opgeven:

      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 voor het gebruik van een gepartitioneerde grafiek

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

  • Geef altijd de partitiesleutelwaarde 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 zijn altijd gericht op een partitie, omdat edges een referentie-id en partitiesleutel bevatten naar de doelhoeken.

  • Gebruik de uitgaande richting bij het uitvoeren van query's op randen wanneer dit mogelijk is. Zoals hierboven vermeld, worden randen opgeslagen met de bronhoeken in de uitgaande richting. De kans dat u query's over meerdere partities gebruikt, wordt dus geminimaliseerd wanneer de gegevens en query's zijn ontworpen met dit patroon in gedachten. Integendeel, de in() query zal altijd een dure uitwaaierquery zijn.

  • 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 juiste partitiesleutel in Partitioneren en schalen in Azure Cosmos DB.

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

Volgende stappen

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