Intermedio8 min di lettura

Come funzionano le chiavi di partizione DynamoDB

Il tuo è un indirizzo. DynamoDB esegue l'hashing di quella chiave e l'hash decide quale macchina fisica memorizza l'oggetto. Scegli bene la chiave e spread di carico; sceglilo male e un server prende il caldo.

Come funzionano le chiavi di partizione DynamoDB?

DynamoDB esegue il tuo tramite una funzione hash interna e tale hash decide quale partizione fisica memorizza l'elemento. L'hash decide il posizionamento; la chiave non è ordinata o indicizzata come una colonna SQL. Scegli una chiave ad alta cardinalità e carica gli spread su molte partizioni; scegline uno a bassa cardinalità e una singola partizione si prenderà tutto il calore.

  • La chiave è sottoposta ad hashing, non ordinata. DynamoDB esegue la chiave di partizione tramite un file hash interno per scegliere una partizione. Due valori adiacenti non si trovano neanche lontanamente vicini l'uno all'altro altro su disco.
  • Una partizione è una vera e propria unità di archiviazione. Ognuna ha una capacità massima di circa 10 GB, 3.000 unità di lettura /sec e 1.000 unità di scrittura /sec. Il tuo traffico è diviso per quanti partizioni su cui sono distribuite le chiavi.
  • I tasti di scelta rapida sono la pistola. Incanala la maggior parte delle richieste su un valore di chiave di partizione e limiti la partizione mentre il resto del tavolo rimane inattivo.
  • I tasti ad alta cardinalità vincono. Il tasto più distinto e premuto in modo uniforme ti valorizza più partizioni assorbono il carico.

Inizia con ciò che fa effettivamente la chiave

Proveniente da SQL, una chiave primaria è una colonna ordinata e indicizzata su JOIN e ORDER DA acceso. In DynamoDB lo fa la chiave di partizione (a volte chiamata chiave hash). qualcosa di diverso: decide il posizionamento.

DynamoDB inserisce la chiave di partizione in una funzione hash interna. Le mappe di output in uno spazio delle chiavi e lo spazio delle chiavi viene suddiviso in intervalli: ogni intervallo è di proprietà di a partizione fisica. Quella partizione è una vera memoria su un nodo reale.

Quindi la chiave di partizione risponde a una domanda: quale macchina contiene questo elemento? Il file , se ne hai uno, ordina solo gli articoli all'interno di quella macchina. Suona nessuna parte nel posizionamento.

Segui una scrittura attraverso l'hash

Supponiamo che tu gestisca un SaaS che acquisisce le letture del dispositivo. Il tuo tavolo SensorReadings utilizza una chiave di partizione deviceId e una chiave di ordinamento readingTs. Scrivi una lettura per deviceId = "vac-7741".

Percorso seguito dalla scrittura: dalla chiave al disco su cui si ferma:

slice del keyspacePutItemdeviceId = 'vac-7741'Hash dellapartition keyL'hash mappa a unpunto del keyspaceQuale rangela possiede?Partizione P2Item memorizzato,ordinato per readingTs

La scrittura per vac-7741 viene sottoposta ad hashing fino a un punto nello spazio delle chiavi, in quel punto rientra La gamma di P2 e l'articolo arriva su P2 — ordinato lì da readingTs.

La cosa da interiorizzare: "vac-7741" e "vac-7742" sono un carattere a parte, ma i loro hash non sono correlati. Quasi certamente vivono in luoghi diversi partizioni. Non c'è "nelle vicinanze" nello spazio delle chiavi della partizione.

Questa è l'idea di hashing coerente che DynamoDB ha ereditato dal design originale: il documento Amazon Dynamo del 2007 ("Dynamo: valore-chiave altamente disponibile di Amazon Store") distribuisce le chiavi tra i nodi eseguendo l'hashing esattamente in modo che nessun singolo nodo diventi un collo di bottiglia.

Incolla un elenco di valori delle chiavi di partizione di seguito per vedere come un hash li distribuisce secchi. Un set ad alta cardinalità si diffonde uniformemente; riutilizzare un valore e tutto si accumula in un unico bucket: l' di cui parla la sezione successiva.

Distribuzione della partition key

Un valore di partition key per riga. Ripeti un valore per simulare una hot key.

8 bucket8 chiavi
  • #0
    0
  • #1
    1
  • #2
    1
  • #3
    0
  • #4
    2
  • #5
    2
  • #6
    0
  • #7
    2

Questo è un hash didattico semplificato, non il vero hash interno di DynamoDB. DynamoDB usa una funzione interna non documentata e un numero di partizioni che cresce con la tua tabella — usalo solo per farti un'intuizione di come le chiavi distinte si distribuiscono e una singola hot key si accumula.

Questo è un hash didattico per l'intuizione, non il vero hash interno di DynamoDB: il la funzione effettiva, lo spazio delle chiavi e i limiti della partizione sono interni di AWS. Usalo per creare una sensazione di diffusione rispetto a inclinazione, non di prevedere quale partizione fisica è una chiave atterra su.

Rispetta i limiti rigidi della partizione

Una partizione fisica è finita. Secondo la Guida per sviluppatori AWS DynamoDB, ciascuno regge circa:

LimitePer partizione
Stoccaggio~10GB
Velocità effettiva di lettura3.000 unità di lettura/s
Velocità effettiva di scrittura1.000 unità di scrittura/s

Quando una partizione supera i 10 GB o il throughput assegnato richiede più spazio, DynamoDB lo divide: l'intervallo dello spazio delle chiavi viene diviso e gli elementi vengono ridistribuiti su più partizioni. Questo è automatico; non lo attivi tu.

Una divisione può dividere la raccolta di elementi di una chiave di partizione in corrispondenza di una chiave di ordinamento confine, quindi il carico di una chiave occupata può essere distribuito su più partizioni. Che scissione non è possibile salvare un singolo item attivo, una chiave di ordinamento in costante aumento o una tabella con un LSI: bloccano la raccolta su una partizione.

Assegna un nome alla trappola: partizione hot

Una partizione attiva è la classica arma da fuoco. Succede quando una chiave di partizione valore (o un piccolo insieme di essi) assorbe una quota sproporzionata di traffico.

Fallimento concreto: si passa da SensorReadings a una chiave di partizione region con valori come "us-east", "eu-west". Tre regioni significano tre valori chiave: al massimo: tre partizioni che svolgono un lavoro reale. Slam "us-east" con letture e questo rallenta a 3.000 RCU mentre la capacità totale fornita del tavolo rimane inutilizzata.

La capacità adattiva di DynamoDB attenua questo problema: può spostare il throughput inutilizzato verso una partizione occupata e isola un singolo tasto molto importante da solo partizione. AWS lo ha spiegato dettagliatamente nel re:Invent "Advanced Design Patterns for DynamoDB" sessioni di immersione profonda. Ma la capacità adattiva fa guadagnare tempo, non immunità: a singolo hot item, una chiave di ordinamento sempre crescente o un LSI limita ancora una chiave alla volta partizione unica. Design per la diffusione; non appoggiarti alla rete di sicurezza.

Scegli una chiave ad alta cardinalità

La soluzione è la cardinalità: il numero di valori chiave distinti e il grado di uniformità il traffico li investe.

  • Bassa cardinalità (region, status, true/false): poche partizioni, il traffico si concentra, rallenti presto.
  • Alta cardinalità (deviceId, userId, un ID ordine): hashing di molti valori attraverso molte partizioni, il carico si distribuisce e l'headroom aumenta.

Provenendo da SQL indicizzeresti felicemente una colonna status e filtreresti su di essa. Come a La chiave di partizione DynamoDB è una trappola: non può diffondersi. Mantenere una cardinalità bassa attributi come filtri o come chiave di ordinamento dell'indice secondario, mai come la cosa che decide il posizionamento.

Quando una chiave naturalmente buona è ancora distorta: una manciata di inquilini balena supera la rest — aggiungi un suffisso per distribuire un valore logico su N partizioni, ad es. tenantId#3 per un percorso di scrittura partizionato. Riaggregi in lettura.

Per indirizzare gli elementi all'interno di una partizione una volta diffusa la chiave, scriverai a KeyConditionExpression sulla chiave di ordinamento. Puoi assemblarne uno contro il tuo schema nel creatore di espressioni DynamoDB prima di collegarlo al codice:

deviceId = "vac-7741" AND readingTs BETWEEN "2026-06-01" AND "2026-06-30"

Questo legge la finestra di giugno di un dispositivo da una singola partizione: un Query, non un Scan. La chiave di partizione blocca la macchina; la chiave di ordinamento condizione restringe le righe.

Insidie e passaggi successivi

  • Non scegliere una chiave in base a ciò che si legge bene in SQL. Sceglila in base a ciò che si diffonde. Prima la cardinalità, poi la comodità delle query.
  • Non dare per scontato che la capacità totale della tabella sia tua per chiave. Il throughput lo è per partizione; un valore caldo può rallentare mentre la tabella sembra inattiva.
  • Non combattere una scissione. È automatico e guidato dall'hashish: il tuo compito è darlo chiavi abbastanza distinte da diffondere.

Una volta che la chiave si è diffusa in modo pulito, le decisioni successive riguardano come disporre gli oggetti all'interno una partizione - vedere progettazione a tabella singola - e quando a indice secondario è lo strumento giusto per un secondo accesso modello.

Scarica DynoTable ed esegui un GROUP BY sulla chiave di partizione in SQL Workbench per vedere quali chiavi accumulano elementi prima che uno si trasformi in una partizione attiva.

Aggiornato