Cara Melihat, Menelusuri dan Mengedit Data DynamoDB
Setiap "melihat" atau "perubahan" yang Anda lakukan pada tabel DynamoDB dipetakan ke salah satu dari sekumpulan kecil
Pengoperasian API — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem.
Tidak ada penampil tabel relasional di bawahnya: "menelusuri tabel" secara harfiah berarti a
Scan, dan "mengedit baris" adalah UpdateItem versus . Mengetahui yang mana
operasi yang dipetakan setiap klik adalah perbedaan antara pembacaan murah dan tabel lengkap
pemindaian yang tidak ingin Anda jalankan.
DynoTable adalah GUI untuk operasi ini — ini menunjukkan Anda yang mana akan dijalankan, dan biayanya, sebelum mencapai batasnya.
Cara menelusuri tabel DynamoDB
Membuka tabel untuk "melihat isinya" adalah Scan — ia membaca setiap item di
tabel atau indeks (AWS:
"Operasi Scan di Amazon DynamoDB membaca setiap item dalam tabel atau item sekunder
indeks."). Baik untuk meja kecil; dalam skala besar, ini adalah senjata biaya klasik
tercakup dalam kueri vs pemindaian.
Satu Scan mengembalikan maksimal 1 MB data, lalu memberi Anda LastEvaluatedKey untuk
ambil halaman berikutnya — jadi "jelajahi seluruh tabel" sebenarnya adalah perulangan penomoran halaman
(AWS:
"Satu permintaan Scan dapat mengambil data maksimal 1 MB" dan "the
LastEvaluatedKey dari respons Scan harus digunakan sebagai ExclusiveStartKey
untuk permintaan Scan berikutnya"). Lihat
pagination untuk mengetahui cara kerja kursor dan alasan halaman bergaya offset
nomor tidak ada di sini.
Cara memfilter/memindai data DynamoDB
tidak menghemat pemindaian Anda. DynamoDB menerapkan filter setelah pembacaan selesai, sehingga Anda membayar untuk setiap item yang dipindai — bukan hanya baris yang Anda simpan.
Ekspresi filter diterapkan setelah
Scanselesai tetapi sebelum hasilnya kembali. Oleh karena itu,Scanmengkonsumsi jumlah kapasitas baca yang sama, terlepas dari apakah ekspresi filter ada. — AWS Pindai dokumen
Responsnya membuat hal ini terlihat: ScannedCount adalah "jumlah item yang dievaluasi,
sebelum ScanFilter apa pun diterapkan" sedangkan Count adalah yang selamat dari filter
(AWS).
ScannedCount yang tinggi dengan Count yang kecil adalah tanda pemindaian yang tidak efisien.
Cara menanyakan tabel DynamoDB
Query adalah pembacaan yang murah dan bertarget — tetapi memerlukan kunci partisi. Per
AWS:
"Anda harus memberikan nama atribut kunci partisi dan satu nilai untuk
atribut itu. Query mengembalikan semua item dengan nilai kunci partisi tersebut. Secara opsional,
Anda dapat memberikan atribut kunci pengurutan dan menggunakan operator perbandingan untuk menyaringnya
hasil pencarian."
Jadi Query hanya membaca item di bawah satu kunci partisi, secara opsional dipersempit oleh a
kondisi kunci sortir - tidak pernah seluruh tabel. Tidak ada kunci partisi, tidak ada Query: Anda
kembali ke Scan. Pilihan tersebut merupakan satu-satunya keputusan biaya yang paling penting
DynamoDB; rincian lengkapnya ada di query vs scan.
Sesuai permintaan di us-east-1, membuka tabel untuk "menjelajah" itu menjalankan halaman Scan
yang menagih 0,5 RCU per 4 KB pada akhirnya konsisten per item yang diperiksa — GUI
menelusuri tabel 10 GB dengan baris 1 KB berada di urutan 2,5
juta RCU jika Anda memuat semuanya. Query yang ditargetkan pada satu kunci partisi terbaca
hanya koleksi item itu. Perkirakan penelusuran vs kueri di
kalkulator harga.Untuk merakit KeyConditionExpression / FilterExpression tanpa tulisan tangan
sintaks placeholder, gunakan
DynamoDB Expression Builder — ia memancarkan
nama persisnya /values memetakan yang diharapkan API.
Cara mengedit item di DynamoDB
Mengedit satu item adalah UpdateItem terhadap kunci utama lengkapnya. Anda tidak
tulis ulang seluruh item — Anda hanya memberikan yang memberi nama
atribut yang Anda ubah:
UpdateItem
Key: { "PK": "USER#42", "SK": "PROFILE" }
UpdateExpression: SET email = :e, updatedAt = :tDua fakta yang membuat orang tersandung, keduanya dari Dokumen item AWS:
- Anda harus menentukan seluruh kunci utama, bukan hanya sebagian saja. Pada a Tabel itu kunci partisi dan kunci pengurutan. Anda tidak dapat "mengedit satu baris" demi atribut arbitrer — yang memerlukan pemindaian untuk menemukan kuncinya terlebih dahulu.
UpdateItemadalah upsert. "Jika item dengan kunci yang ditentukan tidak ada,UpdateItemmembuat item baru. Jika tidak, itu akan mengubah item yang sudah ada atribut." Kesalahan ketik pada kunci secara diam-diam akan membuat item baru, bukannya kesalahan.
Cara menghapus item
DeleteItem, sekali lagi dikunci dengan kunci utama lengkap:
"DeleteItem menghapus item dengan kunci yang ditentukan"
(AWS).
Aturan yang sama seperti edit — Anda memerlukan seluruh kunci, jadi hapus "semua baris dengan status =
'terbuka'" bukanlah satu panggilan; Anda memindai/query untuk menemukan kuncinya, lalu menghapusnya satu per satu.
BatchWriteItem menggabungkan hingga 25 permintaan put/delete
(AWS:
"Operasi BatchWriteItem dapat berisi hingga 25 PutItem individu dan
Permintaan DeleteItem"), tetapi masing-masing masih menargetkan satu kunci — tidak ada DELETE … WHERE.
Cara melihat data bersarang / JSON
Item DynamoDB disimpan dalam format kawat bertanda tipe (DynamoDB-JSON), di mana setiap
nilai membawa deskriptor tipe satu atau dua huruf (S, N, M, L, SS… — the
daftar deskripsi lengkap ada di
dokumen tipe data AWS).
JSON biasa tidak memiliki tipe set, jadi array bolak-balik sebagai daftar (L), tidak pernah berupa string
set (SS) — batasan konversi nyata, bukan bug tampilan. Peta tipe lengkap ada di
Tipe data DynamoDB; untuk mengonversi gumpalan DynamoDB-JSON menjadi biasa
JSON dan sebaliknya, gunakan DynamoDB JSON converter.
Selain menelusuri dan mengedit: menanyakan bahwa DynamoDB tidak bisa
Tampilan dan pengeditan sampul Scan/Query/UpdateItem, tetapi mereka tidak dapat menganalisis —
DynamoDB tidak memiliki JOIN, GROUP BY, atau fungsi agregat seperti COUNT/SUM, dan
PartiQL juga tidak menambahkannya: tata bahasa SELECT-nya adalah
hanya SELECT … FROM table [WHERE …] [ORDER BY …], tanpa klausa gabung atau pengelompokan
(AWS PartiQL PILIH referensi),
jadi setiap pernyataan dipetakan ke satu Get/Query/Scan/Put/Update/Delete. SQL milik DynoTable
Workbench mengisi kesenjangan itu dengan mewujudkan tabel Anda melalui kueri nyata DynamoDB
runtime dan menjalankan SQL di atas — SQL dalam aturan pola akses DynamoDB —
namun untuk penjelajahan dan pengeditan sehari-hari, operasi di atas adalah keseluruhan kotak peralatan.
FAQ
Bagaimana cara melihat data DynamoDB tanpa Konsol AWS?
Gunakan GUI desktop yang mengeluarkan panggilan Scan/Query yang sama. Konsol AWS
menelusuri tabel melalui pemindaian halaman; klien khusus seperti DynoTable melakukan hal yang sama tetapi
menunjukkan kapasitas yang dikonsumsi dan operasi yang Anda jalankan.
Bagaimana cara mengedit item DynamoDB?
Terbitkan UpdateItem terhadap kunci utama lengkap item dengan pembaruan SET
ekspresi hanya menyebutkan atribut yang Anda ubah. Di GUI, edit sebaris
sel — itu dikompilasi ke UpdateItem untuk Anda.
Mengapa pemfilteran masih memerlukan pemindaian penuh? Karena DynamoDB menerapkan filter setelah pemindaian membaca item. Difilter item masih dibaca dan diukur. Untuk menghemat biaya, lakukan kueri berdasarkan kunci partisi (atau a GSI) alih-alih memindai.
Dapatkah saya memperbarui banyak item sekaligus?
Tidak ada UPDATE … WHERE — setiap UpdateItem/DeleteItem menargetkan satu primer
kunci. Untuk mengubah beberapa item dalam satu permintaan atom, TransactWriteItems berlaku hingga
100 tindakan tulis (termasuk Update) yang semuanya berhasil atau semuanya dibatalkan. Kalau tidak, kamu
scan/query untuk mengumpulkan kunci, lalu tulis masing-masing kunci (hingga 25 per BatchWriteItem).Dapatkah saya menelusuri tabel Lokal DynamoDB dengan cara yang sama?
Ya — arahkan GUI yang sama ke titik akhir lokal. Lihat
DynamoDB Lokal.
Ingin menelusuri, memfilter, dan mengedit tabel DynamoDB sebaris — dan menjalankan SQL PartiQL tidak bisa? Unduh DynoTable.