Creare una chiave di partizione sintetica

SI APPLICA A: NoSQL

È consigliabile avere una chiave di partizione con molti valori distinti, ad esempio centinaia o migliaia. L'obiettivo è quello di distribuire il carico di lavoro e i dati in modo uniforme tra gli elementi associati a tali valori di chiave. Se una proprietà di questo tipo non esiste nei dati, è possibile costruire una chiave di partizione sintetica. Questo documento descrive diverse tecniche di base per la generazione di una chiave di partizione sintetica per il contenitore Azure Cosmos DB.

Concatenare più proprietà di un elemento

È possibile creare una chiave di partizione tramite la concatenazione di più valori di proprietà in un'unica proprietà partitionKey artificiale. Queste chiavi vengono indicate come chiavi sintetiche. Si consideri il documento di esempio seguente:

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

Per il documento precedente, una possibilità consiste nell'impostare /deviceId o /date come chiave di partizione. Usare questa opzione se si desidera partizionare il contenitore in base all'ID dispositivo o alla data. Un'altra opzione consiste nel concatenare i due valori in una proprietà partitionKey sintetica usata come chiave di partizione.

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

In scenari in tempo reale, un database può contenere migliaia di documenti. Anziché aggiungere manualmente la chiave sintetica, definire la logica lato client per concatenare i valori e inserire la chiave sintetica negli elementi nei contenitori di Azure Cosmos DB.

Usare una chiave di partizione con suffisso casuale

Un'altra strategia possibile per distribuire il carico di lavoro in modo più uniforme consiste nell'aggiungere un numero casuale alla fine del valore della chiave di partizione. Quando gli elementi vengono distribuiti secondo questa modalità, è possibile eseguire operazioni di scrittura parallele tra le partizioni.

Ad esempio se una chiave di partizione rappresenta una data. È possibile scegliere un numero casuale compreso tra 1 e 400 e concatenarlo come suffisso alla data. Questo metodo restituisce valori della chiave di partizione come 2018-08-09.1,2018-08-09.2 e così via, fino a 2018-08-09.400. Poiché per la chiave di partizione si usano valori casuali, le operazioni di scrittura giornaliere sul contenitore vengono distribuite uniformemente tra più partizioni. Questo metodo comporta un parallelismo e una velocità effettiva complessiva migliori.

Usare una chiave di partizione con suffissi pre-calcolati

La strategia del suffisso casuale può aumentare notevolmente la velocità effettiva di scrittura, ma rende difficile la lettura di un elemento specifico. Non si conosce il valore del suffisso usato al momento della scrittura dell'elemento. Per semplificare la lettura dei singoli elementi, usare la strategia dei suffissi pre-calcolati. Questo metodo prevede l'uso di un numero calcolato in base agli elementi su cui eseguire la query, anziché l'uso di un numero casuale per distribuire gli elementi tra le partizioni.

Si consideri l'esempio precedente, in cui un contenitore usa una data come chiave di partizione. Si supponga ora che ogni elemento abbia un attributo Vehicle-Identification-Number(VIN) a cui si vuole accedere. Si supponga anche di eseguire spesso query per trovare gli elementi in base a VIN, oltre alla data. Prima che l'applicazione scriva l'elemento nel contenitore, è possibile calcolare un suffisso hash in base al numero identificativo del veicolo e aggiungerlo alla data della chiave di partizione. Il calcolo potrebbe generare un numero compreso tra 1 e 400 distribuito uniformemente. Questo risultato è simile ai risultati prodotti dal metodo basato sulla strategia casuale. Il valore chiave di partizione è la data concatenata con il risultato calcolato.

Con questa strategia le operazioni di scrittura vengono distribuite uniformemente tra i valori di chiave di partizione e tra tutte le partizioni. È possibile leggere facilmente un elemento specifico e la data, poiché è possibile calcolare il valore di chiave di partizione per un determinato Vehicle-Identification-Number. Questo metodo offre il vantaggio di evitare la creazione di una singola chiave di partizione con accesso frequente, ovvero una chiave di partizione che accetta tutti i carichi di lavoro.

Passaggi successivi

Per altre informazioni sul concetto di partizionamento, vedere gli articoli seguenti: