Gepartitioneerde graaf gebruiken in Azure Cosmos DB

VAN TOEPASSING OP: Gremlin-API

Een van de belangrijkste functies van de Gremlin-API in Azure Cosmos DB is de mogelijkheid om grootschalige grafieken te verwerken via horizontaal schalen. De containers kunnen onafhankelijk worden geschaald op het gebied 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 in de container naar verwachting meer dan 20 GB wordt opgeslagen of als u meer dan 10.000 aanvraageenheden per seconde (AANVRAAGeenheden) wilt toewijzen. Gegevens worden automatisch gepartities 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 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 partitiemechanisme Azure Cosmos DB partitiemechanisme zijn van toepassing met enkele graafspecifieke optimalisaties die hieronder worden beschreven.

Graph partitioneren.

Graph partitioneringsmechanisme

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

  • Zowel hoek punten als randen worden opgeslagen als JSON-documenten.

  • Voor de vertices is een partitiesleutel vereist. Met deze sleutel wordt bepaald 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 de volgende indeling: /partitioning-key-name .

  • Randen worden opgeslagen met hun bronpunt. Met andere woorden, voor elk hoekpunt definieert de partitiesleutel waar ze samen met de uitgaande randen worden opgeslagen. 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 waarnaar ze verwijzen. Alle randen worden opgeslagen met de partitiesleutels en -ID's van de hoek punten waar ze naar wijzen. Deze berekening zorgt ervoor out() dat query's in alle richtingen altijd een gepartitief bereik hebben en niet een blind partitieoverschrijdende query.

  • Graph query's moeten een partitiesleutel opgeven. Als u optimaal wilt profiteren 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 vertices in een gepart partitioneerde grafiek:

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

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

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

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Een matrix met tuples van partitiesleutelwaarden en -ID's opgeven:

      g.V(['partitionKey_value0', 'verted_id0'], ['partitionKey_value1', 'vertex_id1'], ...)
      
    • Het selecteren van een set van detices met hun ID's en het opgeven van een lijst met partitiesleutelwaarden:

      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()
      

Best practices bij het gebruik van een gepart partitioneerde grafiek

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

  • Geef altijd de waarde van de partitiesleutel op bij het uitvoeren van een query op een hoekpunt. Het verkrijgen van een hoekpunt van een bekende partitie is een manier om prestaties te bereiken. Alle volgende aaneenvoegingsbewerkingen worden altijd gericht op een partitie, omdat Randen referentie-id en partitiesleutel voor hun doelverklikken bevatten.

  • Gebruik de uitgaande richting bij het opvragen van randen wanneer dit mogelijk is. Zoals hierboven vermeld, worden randen opgeslagen met hun bronverticen in de uitgaande richting. De kans dat query's over verschillende partities worden gebruikt, wordt geminimaliseerd wanneer de gegevens en query's met dit patroon worden ontworpen. De query is daarentegen in() altijd een dure fan-outquery.

  • Kies een partitiesleutel die gegevens gelijkmatig verdeelt over partities. Deze beslissing is sterk afhankelijk van het gegevensmodel van de oplossing. Lees meer over het maken van een geschikte partitiesleutel in Partitioneren en schalen in Azure Cosmos DB.

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

Volgende stappen

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