Come eliminare più elementi in DynamoDB
Non c'è "DELETE FROM table WHERE..." in DynamoDB. Ogni eliminazione prende di mira uno elemento con la tua chiave primaria completa: API non ha operazioni di eliminazione in blocco, no troncare eL'istruzione "DELETE" rimuove esattamente un elemento per dichiarazione. Quindi "eliminare più elementi" è sempre un lavoro in due passaggi: trova il file chiavi, quindi eseguire un'eliminazione per chiave, raggruppate per velocità effettiva.
Questa guida copre le opzioni di raggruppamento, le transazioni tutto o niente variante, il caso elimina tutto e come fare la stessa cosa con a selezione e due sequenze di tasti in una GUI.
Come posso eliminare più elementi in DynamoDB?
Raccogli le chiavi primarie degli oggetti che vuoi eliminare (tramite Query o Scan),
quindi eliminali in batch: BatchWriteItem richiede fino a 25 DeleteRequest
per chiamata, TransactWriteItems elimina fino a 100 elementi in modo atomico e PartiQL
Le istruzioni "DELETE" possono essere raggruppate in batch 25 alla volta con "BatchExecuteStatement".
In DynoTable seleziona le righe e premi ⌘⌫ per mettere in scena
le eliminazioni, quindi rivedi e conferma.
- In blocco, al massimo:
BatchWriteItem— 25 eliminazioni per chiamata, riprova con gli avanzi. - Tutto o niente:
TransactWriteItems— fino a 100 azioni che hanno successo o falliscono insieme. - SQL sintassi simile: PartiQL
DELETE+BatchExecuteStatement- stessa regola per chiave, ortografia familiare.
- Tutto nella tabella: strategie di troncamento
- solitamente più economico eliminare e ricreare la tabella.
- Una selezione visiva: eliminazioni graduali in DynoTable
- seleziona le righe, metti in scena, rivedi le differenze rosse, esegui il commit.
Passo 0: ritira le chiavi
Un'eliminazione richiede l'intera chiave primaria — su atabella quello è
la chiave di partizione e la chiave di ordinamento
(AWS:
"Per ogni chiave primaria, devi fornire tutti gli attributi della chiave"). Tu
non può eliminare con un attributo arbitrario, quindi "elimina ogni elemento dove
status = 'archived'" inizia con una lettura:
- Se la condizione risiede su una chiave (o una chiave GSI), a
il
Querymirato raccoglie le chiavi a buon mercato. - Altrimenti è un
Scancon un filtro — che legge (e fattura) l'intero tabella, filtro o meno; vedere query vs scan.
Utilizza un ProjectionExpression che restituisca solo gli attributi chiave e segui
LastEvaluatedKey fino alla fine (pagination) oppure
elimina silenziosamente solo il valore della prima pagina da 1 MB.
Metodo 1: BatchWriteItem (fino a 25 eliminazioni per chiamata)
BatchWriteItem raggruppa fino a 25 richieste di inserimento/eliminazione o 16 MB per chiamata
(riferimento AWS API:
"Una singola chiamata a BatchWriteItem può trasmettere fino a 16 MB di dati su
rete, composta da un massimo di 25 operazioni di inserimento o eliminazione di elementi").
aws dynamodb batch-write-item --request-items '{
"Orders": [
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1001"}, "SK": {"S": "META"}}}},
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1002"}, "SK": {"S": "META"}}}},
{"DeleteRequest": {"Key": {"PK": {"S": "ORDER#1003"}, "SK": {"S": "META"}}}}
]
}'Tre proprietà del batch fanno inciampare le persone, tutte direttamente dal Riferimento API:
- Non atomico: "Le singole operazioni
PutItemeDeleteItemspecificati inBatchWriteItemsono atomici; tuttaviaBatchWriteItemnel suo complesso non lo è." Alcune eliminazioni possono avvenire mentre altre no. - Devi riprovare con
UnprocessedItems. Le richieste limitate ritornano nel file Mappa di risposta "UnprocessedItems", nella stessa forma della richiesta — "In genere, chiamerestiBatchWriteItemin un ciclo", e AWS "fortemente consiglia[s] di utilizzare un algoritmo di backoff esponenziale" tra i tentativi. - Nessuna condizione. "Non è possibile specificare le condizioni sui singoli put e
richieste di eliminazione" - un'eliminazione condizionale deve passare attraverso
DeleteItemo a transazione invece. Un batch rifiuta anche due operazioni sulla stessa chiave in una chiamata.
La forma del ciclo (pezzo per 25, invio, riaccodamento degli avanzi con backoff) è lo stesso trattato in operazioni batch.
Metodo 2: TransactWriteItems (eliminazioni atomiche)
Quando una serie di eliminazioni deve avere esito positivo o negativo insieme: rimozione di un elemento principale
l'oggetto e il tuobambini, diciamo — usa TransactWriteItems: fino a
100 azioni (eliminazioni, inserimenti, aggiornamenti, controlli delle condizioni) applicate atomicamente,
con per articoloconsentito. Il commercio: una transazione
la scrittura costa il doppio della capacità di scrittura di una scrittura semplice. La meccanica completa
(token di idempotenza, TransactionCanceledException, matematica dei costi) sono presenti
DynamoDB transazioni.
Metodo 3: PartiQL DELETE, batch
PartiQL non revoca la regola per tasto, la riscrive semplicemente. Lo sviluppatore
la guida è esplicita
(PartiQL ELIMINA):
"Puoi eliminare solo un elemento alla volta. Non puoi emettere un singolo DynamoDB
PartiQL istruzione che elimina più elementi" e la condizione WHERE
"deve risolversi in un singolo valore di chiave primaria".
Per eliminare più elementi, raggruppa le dichiarazioni di un singolo elemento:
BatchExecuteStatement
esegue fino a 25 istruzioni per batch (tutte le letture o tutte le scritture, mai mescolate):
[
{"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1001' AND SK = 'META'"},
{"Statement": "DELETE FROM \"Orders\" WHERE PK = 'ORDER#1002' AND SK = 'META'"}
]aws dynamodb batch-execute-statement --statements file://statements.jsonUn WHERE che non blocca la chiave completa fallisce: non esiste
DELETE FROM Ordini WHERE status = 'archiviato'. Altri modelli PartiQL (e il
limiti dietro di loro) in PartiQL esempi e
PartiQL vs SQL.
Eliminazione di elementi ALL (troncare)
DynamoDB non ha troncato. Le tue opzioni, in ordine di preferenza:
- Elimina e ricrea la tabella. Eliminazione articolo per articolo di un'intera tabella
fatture una scrittura per articolo;
DeleteTable+CreateTableelude il fattura intera scritta. Impostazioni tabella: indici, TTL,, modalità capacità, tag: non ritornano da soli; li dichiari nuovamente a creazione (l'infrastruttura come codice rende questo un non-evento). - Scadenza articoli con. Se "elimina tutto ciò che è più vecchio di X" è davvero quello che vuoi, TTL elimina gli elementi scaduti nel background senza consumare capacità di scrittura: un'eliminazione collettiva al rallentatore quello non costa nulla.
- Scan + eliminazione batch (Metodo 1) quando la tabella deve rimanere attiva e ne va solo un sottoinsieme, paghi una lettura per elemento scansionato più una scrittura per elemento eliminato.
Elimina più elementi in DynoTable
Il flusso di selezione e eliminazione riportato sopra (interrogazione, raccolta chiavi, blocco, ripetizione) è esattamente il lavoro intenso che una GUI dovrebbe possedere. In DynoTable è una griglia selezione:
- Eseguire o filter una query in modo che le righe vuoi sparire sono sullo schermo.
- Selezionali e premi ⌘⌫: ogni riga selezionata diventa un stage eliminare. Nulla ha ancora toccato DynamoDB: le righe si tingono di rosso nella griglia e appaiono come schede rivedibili nel pannello di staging.
- Rivedi, quindi Conferma. Impegna la spedizione come batch
TransactWriteItemscon condizioni di blocco ottimistico: un'eliminazione graduale viene eseguita solo se il file l'elemento esiste ancora e le fasi di grandi dimensioni vengono automaticamente suddivise in blocchi per rimanere entro i limiti di transazione di DynamoDB. ⌘⇧⌫ salta la revisione e elimina e conferma la selezione in un accordo.

Elimini le righe selezionate: una riga rivista, operazione recuperabile fino al commit: non un troncamento cieco di una tabella completa. Per cancellando un'intera tabella, rilasciandola e ricreandola (sopra).
Se un'eliminazione richiede una condizione scritta a mano ("attribute_exists", un file version
check), costruisci le esatte ConditionExpression + mappe segnaposto nel file
DynamoDB Expression Builder e allegarlo
a DeleteItem o transazione.
FAQ
Posso eliminare più elementi in una chiamata DynamoDB?
Sì, fino a 25 con BatchWriteItem (al massimo, riprova con UnprocessedItems)
o fino a 100 atomicamente con TransactWriteItems. Entrambi frequentano le primarie complete
chiave per articolo; nessuno dei due accetta una condizione "dove" per selezionare gli elementi.
C'è un DELETE WHERE in DynamoDB? No. Né il API di basso livello né il PartiQL possono eliminare in base alla condizione: PartiQL "DELETE" richiede un "WHERE" che "si risolva in un singolo valore di chiave primaria". Prima esegui la query o la scansione delle chiavi, quindi le elimini ciascuna.
Come faccio a eliminare tutti gli elementi in una tabella DynamoDB? Per una cancellazione completa, elimina e ricrea la tabella: evita di pagare una scrittura per articolo. Per la pulizia basata sull'età, utilizzare TTL, che elimina elementi scaduti senza consumare capacità di scrittura. Scan + batch-delete è il fallback quando la tabella deve rimanere attiva.
Perché gli elementi ricompaiono dopo l'eliminazione batch? Quasi sempre "UnprocessedItems" non riprovati: un "BatchWriteItem" limitato restituisce silenziosamente le eliminazioni non riuscite nella risposta e il codice che non lo fa il ciclo su di essi "finisce" con gli elementi ancora nella tabella. Riprova con backoff esponenziale finché la mappa non torna vuota.
Quanto costa eliminare gli elementi? Ogni eliminazione è una scrittura standard (uno WCU per 1 KB, raddoppiato all'interno di un file transazione) e trovare le chiavi costa anche la lettura. Stima il danno con il calcolatore dei prezzi.
Preferisci vedere prima cosa stai eliminando? Scarica DynoTable — seleziona le righe, organizza le eliminazioni con ⌘⌫, rivedi le differenze e impegnati quando sei sicuro.


