Pemula6 menit baca

Cara Melihat, Menjelajah, dan Menyunting Data DynamoDB

Setiap "lihat" atau "ubah" yang kamu lakukan pada tabel DynamoDB memetakan ke salah satu dari sekumpulan kecil operasi API — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem. Tak ada penampil tabel relasional di bawahnya: "menjelajah tabel" secara harfiah adalah Scan, dan "menyunting baris" adalah UpdateItem terhadap primary key. Mengetahui operasi mana yang dipetakan tiap klik adalah perbedaan antara baca murah dan full table scan yang tak kamu maksudkan.

DynoTable adalah GUI di atas operasi-operasi ini persis — ia menunjukkan operasi mana yang akan kamu jalankan, dan biayanya, sebelum mencapai wire.

Cara menjelajah tabel DynamoDB

Membuka tabel untuk "lihat isinya" adalah Scan — ia membaca setiap item di tabel atau index (AWS: "A Scan operation in Amazon DynamoDB reads every item in a table or a secondary index."). Cukup untuk tabel kecil; pada yang besar ini footgun biaya klasik yang dibahas di query vs scan.

Satu Scan mengembalikan paling banyak 1 MB data, lalu menyerahkanmu sebuah LastEvaluatedKey untuk mengambil halaman berikutnya — jadi "jelajah seluruh tabel" sebenarnya loop paginasi (AWS: "A single Scan request can retrieve a maximum of 1 MB of data" dan "the LastEvaluatedKey from a Scan response should be used as the ExclusiveStartKey for the next Scan request"). Lihat paginasi untuk cara kursor bekerja dan mengapa nomor halaman gaya-offset tak ada di sini.

Cara memfilter / scan data DynamoDB

Jebakannya: sebuah ekspresi filter tidak menghematkanmu sebuah scan. DynamoDB menerapkan filter setelah baca selesai, jadi kamu membayar untuk setiap item yang dipindai — bukan hanya baris yang kamu simpan.

A filter expression is applied after a Scan finishes but before the results are returned. Therefore, a Scan consumes the same amount of read capacity, regardless of whether a filter expression is present. — dokumen Scan AWS

Respons membuat ini terlihat: ScannedCount adalah "the number of items evaluated, before any ScanFilter is applied" sementara Count adalah yang bertahan dari filter (AWS). ScannedCount tinggi dengan Count mungil adalah tanda scan tidak efisien.

Cara mengkueri tabel DynamoDB

Sebuah Query adalah baca murah dan tertarget — tapi membutuhkan partition key. Per AWS: "You must provide the name of the partition key attribute and a single value for that attribute. Query returns all items with that partition key value. Optionally, you can provide a sort key attribute and use a comparison operator to refine the search results."

Jadi Query membaca hanya item di bawah satu partition key, opsional dipersempit oleh kondisi sort-key — tak pernah seluruh tabel. Tanpa partition key, tanpa Query: kamu kembali ke Scan. Pilihan itu adalah keputusan biaya tunggal terpenting di DynamoDB; rincian lengkapnya di query vs scan.

Untuk menyusun KeyConditionExpression / FilterExpression tanpa menulis tangan sintaks placeholder, gunakan DynamoDB Expression Builder — ia mengeluarkan map nama/nilai persis yang diharapkan API.

Cara menyunting item di DynamoDB

Menyunting satu item adalah UpdateItem terhadap primary key penuhnya. Kamu tak menulis ulang seluruh item — kamu memberikan ekspresi update yang menamai hanya atribut yang kamu ubah:

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

Dua fakta yang membuat orang tersandung, keduanya dari dokumen items AWS:

  • Kamu harus menentukan seluruh primary key, bukan hanya sebagian. Pada tabel composite-key itu partition key dan sort key. Kamu tak bisa "menyunting baris" berdasarkan atribut sembarang — itu butuh scan untuk menemukan key dulu.
  • UpdateItem adalah upsert. "If an item with the specified key does not exist, UpdateItem creates a new item. Otherwise, it modifies an existing item's attributes." Salah ketik di key diam-diam membuat item baru alih-alih error.

Cara menghapus item

Sebuah DeleteItem, lagi-lagi dikunci oleh primary key penuh: "DeleteItem deletes the item with the specified key" (AWS). Aturan sama seperti sunting — kamu butuh seluruh key, jadi menghapus "semua baris di mana status = 'open'" bukan satu panggilan; kamu scan/query untuk menemukan key, lalu hapus masing-masing. BatchWriteItem membundel hingga 25 permintaan put/delete (AWS: "The BatchWriteItem operation can contain up to 25 individual PutItem and DeleteItem requests"), tapi tiap-tiap tetap menarget satu key — tak ada DELETE … WHERE.

Cara melihat data bersarang / JSON

Item DynamoDB disimpan dalam format wire bertag-tipe (DynamoDB-JSON), di mana setiap nilai membawa deskriptor tipe satu atau dua huruf (S, N, M, L, SS… — daftar deskriptor lengkapnya ada di dokumen tipe data AWS). JSON biasa tak punya tipe set, jadi sebuah array bolak-balik sebagai list (L), tak pernah string set (SS) — batasan konversi nyata, bukan bug tampilan. Peta tipe lengkapnya ada di tipe data DynamoDB; untuk mengonversi blob DynamoDB-JSON ke JSON biasa dan kembali, gunakan konverter DynamoDB JSON.

Melampaui jelajah-dan-sunting: kueri yang tak bisa dilakukan DynamoDB

Scan/Query/UpdateItem mencakup melihat dan menyunting, tapi tak bisa menganalisis — DynamoDB tak punya JOIN, GROUP BY, atau fungsi agregat seperti COUNT/SUM, dan PartiQL pun tak menambahnya: grammar SELECT-nya hanya SELECT … FROM table [WHERE …] [ORDER BY …], tanpa klausa join atau grouping (referensi PartiQL SELECT AWS), jadi tiap pernyataan memetakan ke satu Get/Query/Scan/Put/Update/Delete. SQL Workbench DynoTable mengisi celah itu dengan memmaterialisasi tabelmu melalui runtime kueri nyata DynamoDB dan menjalankan SQL di atasnya — SQL dalam aturan pola-akses DynamoDB — tapi untuk jelajah-dan-sunting sehari-hari, operasi di atas adalah seluruh toolbox-nya.

FAQ

Bagaimana cara melihat data DynamoDB tanpa AWS Console? Gunakan GUI desktop yang mengeluarkan panggilan Scan/Query yang sama. AWS Console menjelajah tabel via scan berpaginasi; klien khusus seperti DynoTable melakukan hal sama tapi menunjukkan kapasitas terpakai dan operasi yang kamu jalankan.

Bagaimana cara menyunting item DynamoDB? Keluarkan UpdateItem terhadap primary key penuh item dengan ekspresi update SET yang menamai hanya atribut yang kamu ubah. Di GUI, sunting-inline selnya — ia dikompilasi ke UpdateItem itu untukmu.

Mengapa memfilter tetap memakan biaya full scan? Karena DynamoDB menerapkan filter setelah scan membaca item. Item yang terfilter-keluar tetap dibaca dan dihitung. Untuk memotong biaya, Query berdasarkan partition key (atau GSI) alih-alih scan.

Bisakah saya memperbarui banyak item sekaligus? Tidak dalam satu panggilan. UpdateItem/DeleteItem masing-masing menarget satu primary key; tak ada UPDATE … WHERE. Kamu scan/query untuk mengumpulkan key, lalu tulis masing-masing (hingga 25 per BatchWriteItem).

Bisakah saya menjelajah tabel DynamoDB Local dengan cara sama? Ya — arahkan GUI yang sama ke endpoint lokal. Lihat DynamoDB Local.

Mau menjelajah, memfilter, dan menyunting-inline tabel DynamoDB — dan menjalankan SQL yang tak bisa dilakukan PartiQL? Unduh DynoTable.

Diperbarui