Partilhar via


Criar uma chave de partição sintética

APLICA-SE A: NoSQL

É melhor prática ter uma chave de partição com muitos valores distintos, como centenas ou milhares. O objetivo é distribuir os dados e a carga de trabalho uniformemente pelos itens associados a estes valores de chave de partição. Se essa propriedade não existir nos seus dados, pode 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 o contentor do Azure Cosmos DB.

Concatenar várias propriedades de um item

Pode formar uma chave de partição ao concatenar vários valores de propriedade numa única propriedade artificial partitionKey . Estas teclas são referidas como 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. Utilize esta opção se quiser particionar o contentor com base no ID do dispositivo ou na data. Outra opção é concatenar estes dois valores numa propriedade sintética partitionKey que é utilizada como chave de partição.

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

Em cenários em tempo real, pode ter milhares de itens numa base de dados. Em vez de adicionar manualmente a chave sintética, defina a lógica do lado do cliente para concatenar valores e inserir a chave sintética nos itens nos contentores do Azure Cosmos DB.

Utilizar 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 desta forma, pode realizar operações de escrita paralelas entre partições.

Um exemplo é se uma chave de partição representar uma data. Pode escolher um número aleatório entre 1 e 400 e concatenar como sufixo até à data. Este método resulta em valores de chave de partição, como 2018-08-09.1,2018-08-09.2e assim sucessivamente, através de 2018-08-09.400. Uma vez que aleatoriamente a chave de partição, as operações de escrita no contentor em cada dia são distribuídas uniformemente por várias partições. Este método resulta num melhor paralelismo e débito geral mais elevado.

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

A estratégia de sufixo aleatório pode melhorar significativamente o débito de escrita, mas é difícil ler um item específico. Não sabe o valor do sufixo que foi utilizado quando escreveu o item. Para facilitar a leitura de itens individuais, utilize a estratégia de sufixos pré-calculados. Em vez de utilizar um número aleatório para distribuir os itens entre as partições, utilize um número calculado com base em algo que pretenda consultar.

Considere o exemplo anterior, em que um contentor utiliza uma data como chave de partição. Agora, suponha que cada item tem um Vehicle-Identification-Number atributo (VIN) ao qual pretendemos aceder. Além disso, suponha que executa frequentemente consultas para localizar 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 de estratégia de sufixo aleatório. O valor da chave de partição é, em seguida, a data concatenada com o resultado calculado.

Com esta estratégia, as escritas são distribuídas uniformemente pelos valores da chave de partição e pelas partições. Pode ler facilmente um determinado item e data, uma vez que pode calcular o valor da chave de partição para um específico Vehicle-Identification-Number. A vantagem deste método é que pode evitar criar uma única chave de partição frequente, ou seja, uma chave de partição que utiliza toda a carga de trabalho.

Passos seguintes

Pode saber mais sobre o conceito de criação de partições nos seguintes artigos: