Utilizzo dello sharding di scrittura per distribuire i carichi di lavoro in modo uniforme in Amazon Keyspaces - Amazon Keyspaces (per Apache Cassandra)

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 dello sharding di scrittura per distribuire i carichi di lavoro in modo uniforme in Amazon Keyspaces

Un modo per distribuire meglio le scritture su una partizione in Amazon Keyspaces consiste nell'espandere lo spazio. Questa operazione può essere eseguita in modi diversi. Puoi aggiungere una colonna aggiuntiva di chiavi di partizione in cui scrivere numeri casuali per distribuire le righe tra le partizioni. In alternativa, puoi usare un numero calcolato in base al risultato di una query.

Sharding utilizzando chiavi di partizione composte e valori casuali

Una strategia per distribuire i carichi in modo più uniforme su una partizione consiste nell'aggiungere un'ulteriore colonna chiave di partizione in cui scrivere numeri casuali. In seguito scegli in modo casuale le scritture nello spazio di dimensioni maggiori.

Ad esempio, si consideri la tabella seguente che contiene una singola chiave di partizione che rappresenta una data.

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, title text, description int, PRIMARY KEY (publish_date));

Per distribuire in modo più uniforme questa tabella tra le partizioni, è possibile includere una colonna di chiavi di partizione aggiuntiva shard che memorizza numeri casuali. Per esempio:

CREATE TABLE IF NOT EXISTS tracker.blogs ( publish_date date, shard int, title text, description int, PRIMARY KEY ((publish_date, shard)));

Quando si inseriscono dati, è possibile scegliere un numero casuale tra 1 e 200 per la colonna. shard In questo modo si ottengono valori di chiave di partizione composti come (2020-07-09, 1)(2020-07-09, 2), e così via. (2020-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.

Tuttavia, per leggere tutte le righe di un determinato giorno, è necessario interrogare le righe per tutti i frammenti e quindi unire i risultati. Ad esempio, è necessario innanzitutto emettere un'SELECTistruzione per il valore della chiave di partizione. (2020-07-09, 1) Quindi emettete un'altra SELECT dichiarazione per(2020-07-09, 2), e così via, attraverso(2020-07-09, 200). Infine, la tua applicazione dovrebbe unire i risultati di tutte quelle SELECT dichiarazioni.

Sharding utilizzando chiavi di partizione composte e valori calcolati

Una strategia di scelta casuale può migliorare molto il throughput di scrittura. Tuttavia, è difficile leggere una riga specifica perché non si sa quale valore è stato scritto shard nella colonna al momento della scrittura della riga. Per facilitare la lettura delle singole righe, puoi utilizzare una strategia diversa. Invece di usare un numero casuale per distribuire le righe tra le partizioni, usa un numero che puoi calcolare in base a qualcosa su cui vuoi eseguire una query.

Guarda l'esempio precedente, dove una tabella utilizza la giornata di oggi nella chiave di partizione. Supponiamo ora che ogni riga abbia una title colonna accessibile e che molto spesso sia necessario trovare le righe per titolo oltre che per data. Prima di scrivere la riga nella tabella, l'applicazione potrebbe calcolare un valore hash in base al titolo e utilizzarlo per popolare la colonna. shard 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.

Probabilmente sarebbe sufficiente un semplice calcolo, ad esempio il prodotto dei valori dei punti di codice UTF-8 per i caratteri del titolo, modulo 200, + 1. Il valore della chiave di partizione composta sarebbe quindi la combinazione della data e del 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. È possibile eseguire facilmente un'SELECTistruzione per una riga e una data particolari perché è possibile calcolare il valore della chiave di partizione per un valore specificotitle.

Per leggere tutte le righe di un determinato giorno, è comunque necessario utilizzare SELECT ciascuna (2020-07-09, N) chiave (dove N è compresa tra 1 e 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.