Principiante7 min di lettura

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 Scan finisce ma prima che i risultati vengano restituiti. Pertanto, uno Scan consuma 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 = :t

Due 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, UpdateItem crea 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.

Aggiornato