Come visualizzare, sfogliare e modificare i dati DynamoDB
Ogni "guardare" o "cambiare" che fai su una tabella DynamoDB mappa su una di un
piccolo insieme di operazioni API — GetItem, Query, Scan, PutItem,
UpdateItem, DeleteItem. Non c'è un visualizzatore di tabelle relazionale sotto:
"sfogliare una tabella" è letteralmente uno Scan, e "modificare una riga" è un
UpdateItem contro una chiave primaria. Sapere su quale operazione mappa ogni clic è
la differenza tra una lettura economica e uno scan completo della tabella che non
intendevi eseguire.
DynoTable è una GUI proprio su queste operazioni — ti mostra quale stai per eseguire, e il costo, prima che colpisca la rete.
Come sfogliare una tabella DynamoDB
Aprire una tabella per "vedere cosa c'è dentro" è uno Scan — legge ogni
elemento della tabella o dell'indice
(AWS:
"Un'operazione Scan in Amazon DynamoDB legge ogni elemento in una tabella o in un
indice secondario."). Va bene per tabelle piccole; su una grande è il classico
trabocchetto di costo trattato in query vs scan.
Un singolo Scan restituisce al massimo 1 MB di dati, poi ti consegna un
LastEvaluatedKey per recuperare la pagina successiva — quindi "sfogliare l'intera
tabella" è in realtà un loop di paginazione
(AWS:
"Una singola richiesta Scan può recuperare un massimo di 1 MB di dati" e "il
LastEvaluatedKey da una risposta Scan dovrebbe essere usato come
ExclusiveStartKey per la richiesta Scan successiva"). Vedi
paginazione per come funziona il cursore e perché i numeri di
pagina in stile offset qui non esistono.
Come filtrare / scansionare i dati DynamoDB
Il trabocchetto: un'espressione di filtro non ti risparmia uno scan. DynamoDB applica il filtro dopo che la lettura è completata, quindi paghi per ogni elemento scansionato — non solo per le righe che tieni.
Un'espressione di filtro viene applicata dopo che uno
Scanfinisce ma prima che i risultati vengano restituiti. Pertanto, unoScanconsuma la stessa quantità di capacità di lettura, indipendentemente dalla presenza di un'espressione di filtro. — documentazione AWS Scan
La risposta lo rende visibile: ScannedCount è "il numero di elementi valutati,
prima che venga applicato qualsiasi ScanFilter" mentre Count è ciò che è
sopravvissuto al filtro
(AWS).
Un ScannedCount alto con un Count minuscolo è la firma di uno scan inefficiente.
Come interrogare una tabella DynamoDB
Una Query è la lettura economica e mirata — ma richiede una chiave di
partizione. Secondo
AWS:
"Devi fornire il nome dell'attributo della chiave di partizione e un singolo valore
per quell'attributo. Query restituisce tutti gli elementi con quel valore di
chiave di partizione. Facoltativamente, puoi fornire un attributo sort key e usare un
operatore di confronto per affinare i risultati della ricerca."
Quindi una Query legge solo gli elementi sotto una chiave di partizione,
facoltativamente ristretti da una condizione sulla sort key — mai l'intera tabella.
Nessuna chiave di partizione, nessuna Query: torni a uno Scan. Quella scelta è la
singola decisione di costo più importante in DynamoDB; la suddivisione completa è in
query vs scan.
Per assemblare il KeyConditionExpression / FilterExpression senza scrivere a mano
la sintassi dei placeholder, usa il
DynamoDB Expression Builder — emette le esatte
mappe di nomi/valori che l'API si aspetta.
Come modificare un elemento in DynamoDB
Modificare un elemento è un UpdateItem contro la sua chiave primaria completa.
Non riscrivi l'intero elemento — fornisci un'espressione di update che nomina solo
gli attributi che stai cambiando:
UpdateItem
Key: { "PK": "USER#42", "SK": "PROFILE" }
UpdateExpression: SET email = :e, updatedAt = :tDue fatti che fanno inciampare le persone, entrambi dalla documentazione AWS sugli elementi:
- Devi specificare l'intera chiave primaria, non solo una parte di essa. Su una tabella a chiave composta sono chiave di partizione e sort key. Non puoi "modificare una riga" tramite un attributo arbitrario — questo richiede prima uno scan per trovare la chiave.
UpdateItemè un upsert. "Se un elemento con la chiave specificata non esiste,UpdateItemcrea un nuovo elemento. Altrimenti, modifica gli attributi di un elemento esistente." Un refuso nella chiave crea silenziosamente un nuovo elemento invece di dare errore.
Come eliminare un elemento
Un DeleteItem, di nuovo con chiave la chiave primaria completa:
"DeleteItem elimina l'elemento con la chiave specificata"
(AWS).
Stessa regola della modifica — ti serve l'intera chiave, quindi eliminare "tutte le
righe dove status = 'open'" non è una sola chiamata; fai scan/query per trovare le
chiavi, poi elimini ciascuna. BatchWriteItem raggruppa fino a 25 richieste
put/delete
(AWS:
"L'operazione BatchWriteItem può contenere fino a 25 singole richieste PutItem e
DeleteItem"), ma ognuna punta comunque a una chiave — non c'è DELETE … WHERE.
Come visualizzare dati annidati / JSON
Gli elementi DynamoDB sono memorizzati in un formato su rete con tag di tipo
(DynamoDB-JSON), dove ogni valore porta un descrittore di tipo di una o due lettere
(S, N, M, L, SS… — l'elenco completo dei descrittori è nella
documentazione AWS sui tipi di dati).
Il JSON semplice non ha un tipo set, quindi un array fa round-trip come lista (L),
mai come set di stringhe (SS) — una vera limitazione di conversione, non un bug di
visualizzazione. La mappa completa dei tipi è in
tipi di dati DynamoDB; per convertire un blob DynamoDB-JSON in
JSON semplice e viceversa, usa il
convertitore JSON DynamoDB.
Oltre sfoglia-e-modifica: query che DynamoDB non può
Scan/Query/UpdateItem coprono la visualizzazione e la modifica, ma non possono
analizzare — DynamoDB non ha JOIN, GROUP BY o funzioni di aggregazione come
COUNT/SUM, e
nemmeno PartiQL le aggiunge: la sua grammatica SELECT è
solo SELECT … FROM table [WHERE …] [ORDER BY …], senza clausola di join o
raggruppamento
(riferimento AWS PartiQL SELECT),
quindi ogni istruzione mappa su un singolo Get/Query/Scan/Put/Update/Delete. Il
Workbench SQL di DynoTable colma quella lacuna materializzando le tue tabelle
attraverso il vero runtime di query di DynamoDB ed eseguendo SQL sopra — SQL
all'interno delle regole di pattern di accesso di DynamoDB — ma per il
sfoglia-e-modifica quotidiano, le operazioni sopra sono l'intero set di strumenti.
FAQ
Come visualizzo i dati DynamoDB senza la console AWS?
Usa una GUI desktop che emette le stesse chiamate Scan/Query. La console AWS
sfoglia le tabelle tramite scan paginati; un client dedicato come DynoTable fa lo
stesso ma mostra la capacità consumata e l'operazione che stai eseguendo.
Come modifico un elemento DynamoDB?
Emetti un UpdateItem contro la chiave primaria completa dell'elemento con
un'espressione di update SET che nomina solo gli attributi che stai cambiando. In
una GUI, modifica inline la cella — compila in quell'UpdateItem per te.
Perché filtrare costa comunque uno scan completo? Perché DynamoDB applica il filtro dopo che lo scan legge gli elementi. Gli elementi filtrati via vengono comunque letti e misurati. Per ridurre il costo, interroga per una chiave di partizione (o un GSI) invece di scansionare.
Posso aggiornare molti elementi in una volta?
Non in una sola chiamata. UpdateItem/DeleteItem puntano ciascuno a una singola
chiave primaria; non c'è UPDATE … WHERE. Fai scan/query per raccogliere le chiavi,
poi scrivi ciascuna (fino a 25 per BatchWriteItem).
Posso sfogliare una tabella DynamoDB Local allo stesso modo? Sì — punta la stessa GUI all'endpoint locale. Vedi DynamoDB Local.
Vuoi sfogliare, filtrare e modificare inline le tabelle DynamoDB — ed eseguire il SQL che PartiQL non può? Scarica DynoTable.