View a markdown version of this page

Hasil kueri tabel paginasi di DynamoDB - Amazon DynamoDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Hasil kueri tabel paginasi di DynamoDB

DynamoDB memberi nomor halaman hasil dari operasi Query. Dengan pemberian nomor halaman, hasil Query dibagi menjadi "halaman" data berukuran 1 MB (atau kurang). Aplikasi bisa memproses halaman pertama hasil, lalu halaman kedua, dan seterusnya.

Query tunggal hanya mengembalikan set hasil yang sesuai dalam batas ukuran 1 MB. Untuk menentukan apakah terdapat lebih banyak hasil, dan untuk mengambilkan satu halaman sekaligus, aplikasi harus melakukan hal berikut:

  1. Periksa hasil Query tingkat rendah:

    • Jika hasilnya berisi elemen LastEvaluatedKey dan elemen tersebut non-null, lanjutkan ke langkah 2.

    • Jika tidak ada LastEvaluatedKey pada hasilnya, tidak ada lagi item yang dapat diambil.

  2. Bangun a Query dengan yang samaKeyConditionExpression. Namun, kali ini, ambil nilai LastEvaluatedKey dari langkah 1 dan gunakan sebagai parameter ExclusiveStartKey dalam permintaan Query baru.

  3. Jalankan permintaan Query baru.

  4. Lanjutkan ke langkah 1.

Dengan kata lain, LastEvaluatedKey dari respons Query harus digunakan sebagai ExclusiveStartKey untuk permintaan Query berikutnya. Jika tidak ada elemen LastEvaluatedKey dalam respons Query, maka Anda telah mengambil halaman hasil akhir. Jika LastEvaluatedKey tidak kosong, bukan berarti ada lebih banyak data di set hasil. Satu-satunya cara untuk mengetahui kapan Anda telah mencapai akhir kumpulan hasil adalah ketika LastEvaluatedKey kosong.

Yang tidak kosong LastEvaluatedKey hanya berarti bahwa yang sebelumnya Query berhenti pada batas halaman—batas ukuran halaman 1 MB atau nilai—bukan berarti lebih banyak item yang cocok Limit harus tetap ada. Secara khusus, ketika Anda menggunakan aFilterExpression, Query menerapkan 1 MB/cap Limit halaman ke item yang dibacanya sebelum menerapkan filter, sehingga halaman dapat mengembalikan nol item yang cocok dan masih menyertakan aLastEvaluatedKey. Terus mengeluarkan permintaan dengan yang dikembalikan LastEvaluatedKey sampai respons tidak lagi berisi satu.

Anda dapat menggunakan AWS CLI untuk melihat perilaku ini. Men AWS CLI girim Query permintaan tingkat rendah ke DynamoDB berulang kali, hingga tidak lagi LastEvaluatedKey ada dalam hasil. Pertimbangkan AWS CLI contoh berikut yang mengambil judul film dari tahun tertentu.

aws dynamodb query --table-name Movies \ --projection-expression "title" \ --key-condition-expression "#y = :yyyy" \ --expression-attribute-names '{"#y":"year"}' \ --expression-attribute-values '{":yyyy":{"N":"1993"}}' \ --page-size 5 \ --debug

Biasanya, AWS CLI menangani pagination secara otomatis. Namun, dalam contoh ini, AWS CLI --page-size parameter membatasi jumlah item per halaman. Parameter --debug mencetak informasi tingkat rendah tentang permintaan dan respons.

catatan

Pagination otomatis adalah perilaku default di AWS CLI versi 1 dan versi 2, jadi satu perintah mengembalikan semua item yang cocok. Jika Anda malah perlu membuat paginasi sendiri, gunakan --no-paginate opsi untuk mengembalikan hanya halaman pertama (respons kemudian menyertakan LastEvaluatedKey ketika lebih banyak item tersisa), atau gunakan --max-items untuk membatasi jumlah item yang dikembalikan dan mendapatkan NextToken nilai untuk mengambil halaman berikutnya.

Jika Anda menjalankan contoh ini, respons pertama dari DynamoDB terlihat serupa dengan yang berikut ini.

2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}}, {"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}}, {"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}], "LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}}, "ScannedCount":5}'

LastEvaluatedKey dalam responsnya menunjukkan bahwa tidak semua item telah diambil. AWS CLI Kemudian mengeluarkan Query permintaan lain ke DynamoDB. Pola permintaan dan respons ini berlanjut hingga respons akhir.

2017-07-07 11:13:16,291 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":1,"Items":[{"title":{"S":"What\'s Eating Gilbert Grape"}}],"ScannedCount":1}'

Tidak adanya LastEvaluatedKey menunjukkan bahwa tidak ada lagi item yang dapat diambil.

catatan

AWS SDK menangani respons DynamoDB tingkat rendah (termasuk ada tidaknyaLastEvaluatedKey) dan menyediakan berbagai abstraksi untuk hasil paginating. Query Misalnya, antarmuka dokumen SDK untuk Java menyediakan dukungan java.util.Iterator sehingga Anda dapat mempelajari hasilnya satu per satu.

Untuk contoh kode dalam berbagai bahasa pemrograman, lihat Panduan Memulai Amazon DynamoDB dan dokumentasi AWS SDK untuk bahasa Anda.

Anda juga dapat mengurangi ukuran halaman dengan membatasi jumlah item dalam set hasil, dengan parameter Limit operasi Query.

Untuk informasi selengkapnya tentang pembuatan kueri dengan DynamoDB, lihat Mengkueri tabel di DynamoDB.