Share via


Usando um gráfico particionado no Azure Cosmos DB

APLICA-SE A: Gremlin

Um dos principais recursos da API para Gremlin no Azure Cosmos DB é a capacidade de lidar com gráficos em grande escala por meio de dimensionamento horizontal. Os contêineres podem ser dimensionados independentemente em termos de armazenamento e taxa de transferência. É possível criar contêineres no Azure Cosmos DB que podem ser dimensionados automaticamente para armazenar dados de gráfico. Os dados são balanceados automaticamente com base na chave de partição especificada.

O particionamento será feito internamente se o contêiner tiver que armazenar mais de 20 GB de tamanho ou se você quiser alocar mais de 10.000 RUs (unidades de solicitação) por segundo. Os dados são particionados automaticamente com base na chave de partição que você especificar. A chave de partição será necessária se você criar contêineres de grafo no portal do Azure ou nas versões 3.x ou superior dos drivers do Gremlin. A chave de partição não será necessária se você usar as versões 2.x ou inferiores dos drivers do Gremlin.

Os mesmos princípios gerais do mecanismo de particionamento do Azure Cosmos DB se aplicam a algumas otimizações específicas do grafo descritas neste artigo.

Particionamento do Graph.

Mecanismo de particionamento do Graph

Estas diretrizes descrevem como funciona a estratégia de particionamento no Azure Cosmos DB:

  • Os vértices e as bordas são armazenados como documentos JSON.

  • Vértices exigem uma chave de partição. Essa chave determina em qual partição o vértice será armazenado por meio de um algoritmo de hash. O nome da propriedade da chave de partição é definido durante a criação de um novo contêiner e tem este formato: /partitioning-key-name.

  • Bordas serão armazenadas com o vértice de origem. Em outras palavras, para cada vértice, sua chave de partição definirá o local em que ele será armazenado junto com suas bordas de saída. Essa otimização é feita para evitar consultas entre partições ao usar a cardinalidade de out() em consultas de grafo.

  • As bordas contêm referências aos vértices para os quais apontam. Todas as bordas são armazenadas com as chaves de partição e as IDs dos vértices aos quais estão apontando. Esse cálculo faz com que todas as consultas de direção out() sempre sejam uma consulta particionada com escopo, e não uma consulta de partição cruzada.

  • Consultas de gráfico precisam especificar uma chave de partição. Para aproveitar ao máximo o particionamento horizontal no Azure Cosmos DB, a chave de partição deve ser especificada quando um único vértice for selecionado, sempre que possível. A seguir estão as consultas para selecionar os vários vértices em um gráfico particionado:

    • /id e /label não têm suporte como chaves de partição para um contêiner na API para Gremlin.

    • Selecionar um vértice por ID, em seguida, usar a .has() etapa para especificar a propriedade de chave de partição:

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Selecionar um vértice por especificação de uma tupla, incluindo o valor da chave de partição e a ID:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Selecione um conjunto de vértices com as IDs e especifique uma lista de valores de chave de partição:

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • Use a estratégia de partição no início de uma consulta e especifique uma partição para o escopo do restante da consulta no Gremlin:

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

Melhores práticas ao usar um gráfico particionado

Use as diretrizes a seguir para garantir o desempenho e a escalabilidade ao usar gráficos particionados com contêineres ilimitados:

  • Sempre especifique o valor de chave de partição ao consultar um vértice. Obter o vértice de uma partição conhecida é uma maneira de alcançar o desempenho. Todas as operações de adjacência subsequentes sempre terão o escopo definido para uma partição, uma vez que as bordas contêm a ID de referência e a chave de partição dos vértices de destino.

  • Use a direção de saída ao consultar as bordas sempre que possível. Conforme mencionado acima, as bordas são armazenadas com seus vértices de origem na direção de saída. Dessa forma, as chances de reclassificação para consultas entre partições são minimizadas quando os dados e as consultas são criadas com esse padrão em mente. Caso contrário, a consulta in() sempre será uma consulta do tipo fan-out cara.

  • Escolha uma chave de partição que distribuirá uniformemente dados entre as partições. Essa decisão depende muito do modelo de dados da solução. Leia mais sobre a criação de uma chave de partição apropriada em Particionamento e escala no Azure Cosmos DB.

  • Otimize as consultas para obter dados dentro dos limites de uma partição. Uma estratégia de particionamento ideal seria alinhada com os padrões de consulta. Consultas que obtêm dados de uma única partição fornecem o melhor desempenho possível.

Próximas etapas

Em seguida, você poderá ler os artigos a seguir: