Principiante7 min di lettura

Come visualizzare, sfogliare e modificare i dati DynamoDB

Ogni "occhiata" o "modifica" apportata a un tavolo DynamoDB si associa a uno di un piccolo insieme di Operazioni API: GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem. Non c'è alcun visualizzatore di tabelle relazionali sotto: "sfogliare una tabella" è letteralmente a Scan e "modificare una riga" è un UpdateItem rispetto a un . Sapendo quale L'operazione a cui ogni clic corrisponde è la differenza tra una lettura economica e una tabella completa scansione che non volevi eseguire.

DynoTable è una GUI che esegue esattamente queste operazioni: ti mostra quale stai in procinto di funzionare, e il costo, prima che arrivi alla rete.

Come sfogliare una tabella DynamoDB

Aprire una tabella per "vedere cosa c'è dentro" è un Scan: legge ogni elemento nella tabella o indice (AWS: "Un'operazione Scan in Amazon DynamoDB legge ogni elemento in una tabella o in un file secondario indice."). Va bene per tavolini; su uno grande è la classica pistola da costo trattato in query vs scan.

Un singolo Scan restituisce al massimo 1 MB di dati, quindi ti passa un LastEvaluatedKey recupera la pagina successiva, quindi "sfoglia l'intera tabella" è in realtà un ciclo di impaginazione (AWS: "Una singola richiesta Scan può recuperare un massimo di 1 MB di dati" e "il LastEvaluatedKey da una risposta Scan deve essere utilizzato come ExclusiveStartKey per la prossima richiesta Scan"). Vedi impaginazione per sapere come funziona il cursore e perché la pagina in stile offset i numeri non esistono qui.

Come filtrare/scansionare i dati DynamoDB

A non ti salva una scansione. DynamoDB applica il filtra dopo il completamento della lettura, in modo da pagare per ogni elemento scansionato, non solo per righe che mantieni.

Un'espressione di filtro viene applicata al termine di un Scan ma prima che vengano visualizzati i risultati restituito. Pertanto, un Scan consuma la stessa quantità di capacità di lettura, indipendentemente dal fatto che sia presente un'espressione di filtro. — AWS Scan documenti

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 piccolo è il segno di una scansione inefficiente.

Come interrogare una tabella DynamoDB

Un Query è la lettura mirata ed economica, ma richiede una chiave di partizione. Per AWS: "È necessario 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 chiave di ordinamento e utilizzare un operatore di confronto per perfezionare il file risultati della ricerca."

Quindi un Query legge solo gli elementi sotto una chiave di partizione, opzionalmente ristretti da a condizione della chiave di ordinamento: mai l'intera tabella. Nessuna chiave di partizione, niente Query: sei torniamo a un Scan. Questa scelta è la decisione più importante in termini di costi DynamoDB; la suddivisione completa è in query vs scan.

Su richiesta in us-east-1, aprendo una tabella da "sfogliare" viene eseguito un paging Scan che fattura 0,5 RCU per 4 KB, eventualmente coerenti, per elemento esaminato: una GUI scorrere una tabella da 10 GB di righe da 1 KB è nell'ordine di 2,5 milioni di RCU se carichi tutto. Viene letto un Query mirato su una chiave di partizione solo quella raccolta di articoli. Stima la navigazione rispetto alla query nel file calcolatore dei prezzi.Per assemblare KeyConditionExpression / FilterExpression senza scrivere a mano la sintassi del segnaposto, utilizzare il file DynamoDB Expression Builder — emette il file nomi esattiLe mappe /values si aspettano da API.

Come modificare un elemento in DynamoDB

La modifica di un elemento è un UpdateItem rispetto alla sua chiave primaria completa. Tu no riscrivi l'intero elemento: fornisci un nominando solo il file attributi che stai modificando:

UpdateItem
  Key:              { "PK": "USER#42", "SK": "PROFILE" }
  UpdateExpression: SET email = :e, updatedAt = :t

Due fatti che fanno inciampare la gente, entrambi dal Documenti sugli articoli AWS:

  • Devi specificare l'intera chiave primaria, non solo parte di essa. Su a Tabella che rappresenta la chiave di partizione e la chiave di ordinamento. Non puoi "modificare una riga" tramite un attributo arbitrario: richiede prima una scansione per trovare la chiave.
  • UpdateItem è un upsert. "Se un elemento con la chiave specificata non esiste, UpdateItem crea un nuovo elemento. Altrimenti, modifica un elemento esistente attributi." Un errore di battitura nella chiave crea silenziosamente un nuovo elemento invece di generare errori.

Come eliminare un elemento

A DeleteItem, ancora una volta digitato con la chiave primaria completa: "DeleteItem elimina l'elemento con la chiave specificata" (AWS). Stessa regola di modifica: è necessaria l'intera chiave, quindi eliminare "tutte le righe in cui status = 'open'" non è una chiamata; esegui la scansione di /query per trovare le chiavi, quindi elimina ciascuna di esse. BatchWriteItem raggruppa fino a 25 richieste put/delete (AWS: "L'operazione BatchWriteItem può contenere fino a 25 singoli PutItem e richieste DeleteItem"), ma ciascuno punta comunque a una chiave: non esiste DELETE … WHERE.

Come visualizzare i dati nidificati/JSON

Gli elementi DynamoDB vengono archiviati in un formato cavo contrassegnato dal tipo (DynamoDB-JSON), dove ogni valore porta un descrittore di tipo di una o due lettere (S, N, M, L, SS… — il l'elenco completo dei descrittori è nel Documenti sui tipi di dati AWS). Plain JSON non ha un tipo impostato, quindi un array va avanti come un elenco (L), mai una stringa set (SS): una vera limitazione di conversione, non un bug di visualizzazione. La mappa completa è disponibile Tipi di dati DynamoDB; per convertire un blob DynamoDB-JSON in normale JSON e viceversa, utilizzare il convertitore DynamoDB JSON.

Oltre la navigazione e la 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 aggregate come COUNT/SUM e Neanche PartiQL li aggiunge: la sua grammatica SELECT è solo SELECT … FROM table [WHERE …] [ORDER BY …], senza clausola di unione o raggruppamento (Riferimento SELEZIONE AWS PartiQL), quindi ogni istruzione è mappata a un singolo Get/Query/Scan/Put/Update/Delete. SQL di DynoTable Workbench colma questa lacuna materializzando le tue tabelle attraverso la query reale di DynamoDB runtime ed esecuzione di SQL in primo piano — SQL entro le regole del modello di accesso di DynamoDB — ma per la navigazione e la modifica quotidiana, le operazioni di cui sopra costituiscono l'intero strumento.

FAQ

Come posso visualizzare i dati DynamoDB senza la console AWS? Utilizzare una GUI desktop che emetta le stesse chiamate Scan/Query. La console AWS sfoglia le tabelle tramite scansioni di pagine; un client dedicato come DynoTable fa lo stesso ma mostra la capacità consumata e l'operazione in esecuzione.

Come faccio a modificare un articolo DynamoDB? Emetti un UpdateItem rispetto alla chiave primaria completa dell'elemento con un aggiornamento SET espressione che nomina solo gli attributi che stai modificando. In una GUI, modifica in linea il file cell: viene compilato per te in quell'UpdateItem.

Perché il filtraggio costa comunque una scansione completa? Poiché DynamoDB applica il filtro dopo che la scansione ha letto gli elementi. Filtro disattivato gli elementi vengono ancora letti e misurati. Per ridurre i costi, eseguire una query tramite una chiave di partizione (o a GSI) invece di eseguire la scansione.

Posso aggiornare più elementi contemporaneamente? Non esiste UPDATE … WHERE: ogni UpdateItem/DeleteItem ha come target un singolo primario chiave. Per modificare più elementi in una richiesta atomica, TransactWriteItems si applica fino a 100 azioni di scrittura (incluso Update) tutte riuscite o tutte ripristinate. Altrimenti tu scan/query per raccogliere le chiavi, quindi scriverle ciascuna (fino a 25 per BatchWriteItem).Posso sfogliare una tabella DynamoDB Local allo stesso modo? Sì: punta la stessa GUI sull'endpoint locale. Vedi DynamoDB Locale.

Vuoi sfogliare, filtrare e modificare in linea le tabelle DynamoDB ed eseguire SQL PartiQL non puoi? Scarica DynoTable.

Aggiornato