Usar um grafo de particionado no Azure Cosmos DB

APLICA-SE A: Gremlin

Uma das principais funcionalidades da API para Gremlin no Azure Cosmos DB é a capacidade de processar gráficos de grande escala através do dimensionamento horizontal. Os contentores podem ser dimensionados de forma independente em termos de armazenamento e débito. Pode criar contentores no Azure Cosmos DB que podem ser dimensionados automaticamente para armazenar dados de gráficos. Os dados são automaticamente equilibrados com base na chave de partição especificada.

A criação de partições é feita internamente se se espera que o contentor armazene mais de 20 GB de tamanho ou se quiser alocar mais de 10 000 unidades de pedido por segundo (RUs). Os dados são particionados automaticamente com base na chave de partição que especificar. A chave de partição é necessária se criar contentores de grafos a partir do portal do Azure ou das versões 3.x ou superiores dos controladores do Gremlin. A chave de partição não é necessária se utilizar versões 2.x ou inferiores dos controladores do Gremlin.

Os mesmos princípios gerais do mecanismo de criação de partições do Azure Cosmos DB aplicam-se com algumas otimizações específicas de grafos descritas abaixo.

Criação de partições de grafos.

Mecanismo de criação de partições de grafos

As seguintes diretrizes descrevem como funciona a estratégia de criação de partições no Azure Cosmos DB:

  • Tanto os vértices como as arestas são armazenados como documentos JSON.

  • Os vértices requerem uma chave de partição. Esta chave determinará em que partição o vértice será armazenado através de um algoritmo hash. O nome da propriedade da chave de partição é definido ao criar um novo contentor e tem um formato: /partitioning-key-name.

  • As arestas serão armazenadas com o respetivo vértice de origem. Por outras palavras, para cada vértice, a chave de partição define onde são armazenadas juntamente com as arestas de saída. Esta otimização é feita para evitar consultas entre partições ao utilizar a out() cardinalidade em consultas de grafos.

  • As arestas contêm referências aos vértices a que apontam. Todas as arestas são armazenadas com as chaves de partição e os IDs dos vértices para os quais estão a apontar. Este cálculo faz com que todas as out() consultas de direção sejam sempre uma consulta com âmbito particionado e não uma consulta entre partições invisuais.

  • As consultas de grafos têm de especificar uma chave de partição. Para tirar o máximo partido da criação de partições horizontais no Azure Cosmos DB, a chave de partição deve ser especificada quando um único vértice é selecionado, sempre que possível. Seguem-se consultas para selecionar um ou vários vértices num grafo particionado:

    • /id e /label não são suportadas como chaves de partição para um contentor na API para Gremlin.

    • Selecione um vértice por ID e, em seguida, utilize o .has() passo para especificar a propriedade da chave de partição:

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Selecionar um vértice ao especificar uma cadeia de identificação, incluindo o valor da chave de partição e o ID:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Selecionar um conjunto de vértices com os respetivos IDs e especificar 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', …)
      
    • Utilizar a Estratégia de partição no início de uma consulta e especificar uma partição para o âmbito do resto da consulta gremlin:

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

Melhores práticas ao utilizar um gráfico particionado

Utilize as seguintes diretrizes para garantir o desempenho e a escalabilidade ao utilizar gráficos particionados com contentores ilimitados:

  • Especifique sempre o valor da chave de partição ao consultar um vértice. Obter vértice de uma partição conhecida é uma forma de alcançar o desempenho. Todas as operações de adjacência subsequentes serão sempre confinadas a uma partição, uma vez que as Arestas contêm o ID de referência e a chave de partição para os vértices de destino.

  • Utilize a direção de saída ao consultar arestas sempre que for possível. Conforme mencionado acima, as arestas são armazenadas com os vértices de origem na direção de saída. Assim, as hipóteses de recorrer a consultas entre partições são minimizadas quando os dados e as consultas são concebidos tendo este padrão em mente. Pelo contrário, a in() consulta será sempre uma consulta fan-out dispendiosa.

  • Escolha uma chave de partição que distribua uniformemente os dados entre partições. Esta decisão depende muito do modelo de dados da solução. Leia mais sobre como criar uma chave de partição adequada na Criação de partições e dimensionamento no Azure Cosmos DB.

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

Passos seguintes

Em seguida, pode continuar a ler os seguintes artigos: