Partilhar via


Criar uma chave de partição sintética

APLICA-SE A: NoSQL

É a melhor prática ter uma chave de partição com muitos valores distintos, como centenas ou milhares. O objetivo é distribuir seus dados e carga de trabalho uniformemente entre os itens associados a esses valores de chave de partição. Se essa propriedade não existir em seus dados, você poderá construir uma chave de partição sintética. Este documento descreve várias técnicas básicas para gerar uma chave de partição sintética para seu contêiner do Azure Cosmos DB.

Concatenar várias propriedades de um item

Você pode formar uma chave de partição concatenando vários valores de propriedade em uma única propriedade artificial partitionKey . Essas chaves são chamadas de chaves sintéticas. Por exemplo, considere o seguinte documento de exemplo:

{
"deviceId": "abc-123",
"date": 2018
}

Para o documento anterior, uma opção é definir /deviceId ou /date como a chave de partição. Use esta opção, se quiser particionar seu contêiner com base no ID do dispositivo ou na data. Outra opção é concatenar esses dois valores em uma propriedade sintética partitionKey que é usada como a chave de partição.

{
"deviceId": "abc-123",
"date": 2018,
"partitionKey": "abc-123-2018"
}

Em cenários do mundo real, você pode ter milhares de itens em um banco de dados. Em vez de adicionar a chave sintética manualmente, defina a lógica do lado do cliente para concatenar valores e insira a chave sintética nos itens em seus contêineres do Azure Cosmos DB.

Use uma chave de partição com um sufixo aleatório

Outra estratégia possível para distribuir a carga de trabalho de forma mais uniforme é acrescentar um número aleatório no final do valor da chave de partição. Ao distribuir itens dessa maneira, você pode executar operações de gravação paralela entre partições.

Um exemplo é se uma chave de partição representa uma data. Você pode escolher um número aleatório entre 1 e 400 e concatená-lo como um sufixo para a data. Esse método resulta em valores de chave de partição como 2018-08-09.1,2018-08-09.2, e assim por diante, através de 2018-08-09.400. Como você aleatoriza a chave de partição, as operações de gravação no contêiner em cada dia são distribuídas uniformemente em várias partições. Este método resulta em melhor paralelismo e maior rendimento geral.

Usar uma chave de partição com sufixos pré-calculados

A estratégia de sufixo aleatório pode melhorar muito a taxa de transferência de gravação, mas é difícil ler um item específico. Você não sabe o valor do sufixo que foi usado quando você escreveu o item. Para facilitar a leitura de itens individuais, use a estratégia de sufixos pré-calculados. Em vez de usar um número aleatório para distribuir os itens entre as partições, use um número calculado com base em algo que você deseja consultar.

Considere o exemplo anterior, em que um contêiner usa uma data como chave de partição. Agora suponha que cada item tenha um Vehicle-Identification-Number atributo (VIN) que queremos acessar. Além disso, suponha que você frequentemente execute consultas para encontrar itens pelo , além da VINdata. Antes de a aplicação escrever o item no contentor, pode calcular um sufixo hash com base no VIN e anexá-lo à data da chave de partição. O cálculo pode gerar um número entre 1 e 400 que é distribuído uniformemente. Este resultado é semelhante aos resultados produzidos pelo método da estratégia de sufixos aleatórios. O valor da chave de partição é, então, a data concatenada com o resultado calculado.

Com essa estratégia, as gravações são distribuídas uniformemente pelos valores de chave de partição e pelas partições. Você pode ler facilmente um item e uma data específicos, porque você pode calcular o valor da chave de partição para um Vehicle-Identification-Numberarquivo . O benefício desse método é que você pode evitar a criação de uma única chave de partição quente, ou seja, uma chave de partição que leva toda a carga de trabalho.

Próximos passos

Você pode aprender mais sobre o conceito de particionamento nos seguintes artigos: