

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à.

# Migliori pratiche di modellazione dei dati: consigli per la progettazione di modelli di dati
<a name="data-modeling"></a>

Una modellazione efficace dei dati è fondamentale per ottimizzare le prestazioni e ridurre al minimo i costi quando si lavora con Amazon Keyspaces (per Apache Cassandra). Questo argomento tratta considerazioni e raccomandazioni chiave per la progettazione di modelli di dati adatti ai modelli di accesso ai dati dell'applicazione. 
+ **Progettazione della chiave di partizione**: la chiave di partizione svolge un ruolo fondamentale nel determinare come i dati vengono distribuiti tra le partizioni in Amazon Keyspaces. La scelta di una chiave di partizione appropriata può influire in modo significativo sulle prestazioni delle query e sui costi di throughput. Questa sezione illustra le strategie per la progettazione di chiavi di partizione che promuovono una distribuzione uniforme delle attività di lettura e scrittura tra le partizioni. 
+ **Considerazioni chiave:**
  + **Distribuzione uniforme delle attività**: mira a un'attività di lettura e scrittura uniforme su tutte le partizioni per ridurre al minimo i costi di throughput e sfruttare efficacemente la capacità di burst. 
  + **Schemi di accesso**: allinea il design della chiave di partizione ai modelli di accesso ai dati principali dell'applicazione.
  + **Dimensioni delle partizioni**: evitate di creare partizioni troppo grandi, poiché ciò può influire sulle prestazioni e aumentare i costi. 

Per visualizzare e progettare modelli di dati più facilmente, puoi utilizzare [NoSQL](workbench.md) Workbench.

**Topics**
+ [Come utilizzare le chiavi di partizione in modo efficace in Amazon Keyspaces](bp-partition-key-design.md)

# Come utilizzare le chiavi di partizione in modo efficace in Amazon Keyspaces
<a name="bp-partition-key-design"></a>

La chiave primaria che identifica in modo univoco ogni riga in una tabella Amazon Keyspaces può essere costituita da una o più colonne chiave di partizione, che determinano in quali partizioni sono archiviati i dati, e una o più colonne di clustering opzionali, che definiscono il modo in cui i dati vengono raggruppati e ordinati all'interno di una partizione. 

Poiché la chiave di partizione stabilisce il numero di partizioni in cui sono archiviati i dati e il modo in cui i dati vengono distribuiti tra queste partizioni, il modo in cui è stata scelta la chiave di partizione può avere un impatto significativo sulle prestazioni delle query. In generale, è consigliabile progettare l'applicazione per un'attività uniforme su tutte le partizioni del disco. 

La distribuzione uniforme delle attività di lettura e scrittura dell'applicazione su tutte le partizioni consente di ridurre al minimo i costi di throughput e ciò vale sia per le modalità on-demand che per quelle con capacità assegnata. read/write Ad esempio, se si utilizza la modalità di capacità fornita, è possibile determinare i modelli di accesso richiesti dall'applicazione e stimare le unità di capacità di lettura totale (RCU) e le unità di capacità di scrittura (WCU) richieste da ciascuna tabella. Amazon Keyspaces supporta i tuoi modelli di accesso utilizzando il throughput che hai fornito, purché il traffico verso una determinata partizione non superi 3.000 e 1.000. RCUs WCUs 

Quando una partizione presenta un throughput di lettura o scrittura elevato e sostenuto, a seconda dei modelli di traffico Amazon Keyspaces può suddividere automaticamente la partizione in due nuove partizioni. Ogni nuova partizione contiene un sottoinsieme delle righe della partizione originale, che distribuisce il throughput in modo uniforme su entrambe le partizioni.

Amazon Keyspaces offre maggiore flessibilità nel provisioning del throughput per partizione fornendo capacità burst, per ulteriori informazioni, consulta. [Usa la capacità burst in modo efficace in Amazon Keyspaces](throughput-bursting.md)

**Topics**
+ [Usa lo sharding in scrittura per distribuire uniformemente i carichi di lavoro tra le partizioni](bp-partition-key-sharding.md)

# Usa lo sharding in scrittura per distribuire uniformemente i carichi di lavoro tra le partizioni
<a name="bp-partition-key-sharding"></a>

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
<a name="bp-partition-key-sharding-random"></a>

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. Esempio:

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

Quando inserisci i dati, puoi 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'`SELECT`istruzione 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` affermazioni.

## Sharding utilizzando chiavi di partizione composte e valori calcolati
<a name="bp-partition-key-sharding-calculated"></a>

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 basato sul 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 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'`SELECT`istruzione per una riga e una data particolari perché è possibile calcolare il valore della chiave di partizione per un valore specifico`title`.

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.