Pemula6 menit baca

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 Scan selesai tetapi sebelum hasilnya kembali. Oleh karena itu, Scan mengkonsumsi 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 = :t

Dua 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.
  • UpdateItem adalah upsert. "Jika item dengan kunci yang ditentukan tidak ada, UpdateItem membuat 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.

Diperbarui