Utilizzo del partizionamento per distribuire i carichi di lavoro in modo uniforme - Amazon DynamoDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo del partizionamento per distribuire i carichi di lavoro in modo uniforme

Un modo per distribuire scritture al meglio nello spazio della chiave di partizione in Amazon DynamoDB consiste nell'espandere lo spazio. Questa operazione può essere eseguita in modi diversi. Puoi aggiungere un numero casuale ai valori della chiave di partizione per distribuire gli elementi tra le partizioni. In alternativa, puoi usare un numero calcolato in base al risultato di una query.

Partizionamento utilizzando suffissi casuali

Una strategia per distribuire i carichi in maniera più uniforme nello spazio della chiave di partizione è di aggiungere un numero casuale alla fine dei valori delle chiavi di partizioni. In seguito scegli in modo casuale le scritture nello spazio di dimensioni maggiori.

Ad esempio, per una chiave di partizioni che rappresenta la data di oggi, puoi scegliere un numero casuale tra 1 e 200 e concatenarlo alla data come suffisso. Ciò produce valori delle chiavi di partizione come 2014-07-09.1, 2014-07-09.2 e così via fino a 2014-07-09.200. In quanto stai scegliendo in modo casuale la chiave di partizione, le scritture alla tabella ogni giorno vengono distribuite in modo uniforme tra le partizioni multiple. Ciò risulta in parallelismo migliore e throughput complessivo maggiore.

Comunque, per leggere tutte le voci per un determinato giorno, dovresti eseguire una query su tutti i suffissi delle voci e in seguito unire i risultati. Ad esempio, per prima cosa devi inviare una richiesta Query per il valore della chiave di partizione 2014-07-09.1. Quindi emettere un'altra Query per 2014-07-09.2 e così via fino a 2014-07-09.200. Infine, la tua applicazione dovrà unire i risultati di tutte quelle richieste Query.

Partizionamento utilizzando suffissi calcolati

Una strategia di scelta casuale può migliorare molto il throughput di scrittura. Tuttavia è difficile leggere una voce specifica perché non si sa quale valore del suffisso è stato utilizzato durante la scrittura della voce. Per facilitare la lettura delle voci individuali, puoi utilizzare una strategia diversa. Invece di utilizzare un numero casuale per distribuire le voci tra le partizioni, utilizza un numero che puoi calcolare in base a qualcosa sul quale desideri effettuare una query.

Guarda l'esempio precedente, dove una tabella utilizza la giornata di oggi nella chiave di partizione. Presumi che ogni voce abbia un attributo OrderId accessibile e che molto spesso devi trovare voci per ID dell'ordine oltre alla data. Prima che l'applicazione scriva l'item nella tabella, potrebbe calcolare il suffisso hash in base all'ID dell'ordine e aggiungerlo alla data della chiave di partizione. Il calcolo potrebbe dare come risultato un numero compreso tra 1 e 200 distribuito in modo abbastanza uniforme, in maniera simile a cosa viene prodotto dalla strategia casuale.

Sarebbe sufficiente un semplice calcolo, ad esempio il prodotto dei valori del punto di codice UTF-8 per i caratteri nell'ID ordine, modulo 200 + 1. Il valore della chiave di partizione sarebbe quindi la data concatenata con il risultato del calcolo.

Con questa strategia, le scritture vengono distribuite in modo uniforme tra i valori delle chiavi di partizione e quindi tra le partizioni fisiche. Puoi eseguire facilmente un'operazione GetItem su una voce e data particolari, in quanto puoi calcolare il valore della chiave di partizione per un valore OrderId specifico.

Per leggere tutti gli elementi per un determinato giorno, è comunque necessario eseguire una Queryper ciascuna delle chiavi 2014-07-09.N (dove N è 1-200) e l'applicazione deve quindi unire tutti i risultati. Il beneficio è che eviterai che un singolo valore di chiave di partizione "hot" prenda tutto il carico di lavoro.

Nota

Per una strategia più efficace progettata in maniera specifica per gestire volumi elevati di dati di serie temporali, consulta Dati di serie temporali.