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
Scanfinishes but before the results are returned. Therefore, aScanconsumes 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 = :tDua 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.
UpdateItemadalah upsert. "If an item with the specified key does not exist,UpdateItemcreates 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.