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 VIN
data. 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-Number
arquivo . 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:
- Saiba mais sobre partições lógicas.
- Saiba mais sobre como provisionar a taxa de transferência em contêineres e bancos de dados do Azure Cosmos DB.
- Saiba como provisionar a taxa de transferência em um contêiner do Azure Cosmos DB.
- Saiba como provisionar a taxa de transferência em um banco de dados do Azure Cosmos DB.
- Tentando fazer o planejamento de capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre seu cluster de banco de dados existente para planejamento de capacidade.
- Se tudo o que você sabe é o número de vcores e servidores em seu cluster de banco de dados existente, leia sobre como estimar unidades de solicitação usando vCores ou vCPUs
- Se você souber as taxas de solicitação típicas para sua carga de trabalho de banco de dados atual, leia sobre como estimar unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB