Pemula4 menit baca

Cara Mem-Query DynamoDB dalam Urutan Menurun

Secara default sebuah Query DynamoDB mengembalikan Item dalam urutan sort-key menaik. Tetapi sebagian besar pola akses "berikan yang terbaru" menginginkan kebalikannya — terbaru dulu. Tombolnya adalah satu boolean tunggal pada Query: ScanIndexForward. Setel ke false dan Query yang sama membaca partisi secara terbalik.

Ini satu parameter, tetapi ia menjebak orang karena mudah dikacaukan dengan mengurutkan hasil setelahnya (yang tidak dilakukan DynamoDB) dan karena namanya terbaca terbalik dari apa yang ia kendalikan.

Bagaimana cara mem-Query DynamoDB dalam urutan menurun?

Setel ScanIndexForward=false pada Query. Secara default DynamoDB mengembalikan Item dalam urutan sort-key menaik; membalik boolean tunggal ini membaca partisi secara terbalik, memberikan hasil terbaru-dulu saat sort key Anda berupa timestamp atau urutan. Ini hanya mengubah pengurutan, bukan Item mana yang cocok, dan pembacaan terbalik berbiaya sama persis dengan pembacaan maju.

  • ScanIndexForward=true (default) → urutan sort-key menaik.
  • ScanIndexForward=false → urutan menurun — terbaru-dulu saat sort key Anda berupa timestamp atau urutan.
  • Ia hanya memengaruhi pengurutan, bukan Item mana yang cocok — condition key tetap yang menentukan itu.
  • Ia gratis. Urutan terbalik berbiaya sama dengan urutan maju; DynamoDB membaca urutan tersimpan partisi dalam kedua kasus.
  • Gunakan Limit bersamanya untuk mendapatkan "N terbaru" dalam satu pembacaan murah.

Masalahnya: "tunjukkan yang terbaru dulu"

Misalkan Anda menjalankan papan peringkat multiplayer dan menyimpan event skor tiap pemain di bawah satu partition key, terurut berdasarkan timestamp yang menaik:

PK: GAME#42   SK: SCORE#2026-06-27T10:00:00Z   points
PK: GAME#42   SK: SCORE#2026-06-27T10:05:00Z   points
PK: GAME#42   SK: SCORE#2026-06-27T10:09:00Z   points

Dashboard membutuhkan skor paling baru. Sebuah Query biasa pada GAME#42 mengembalikannya terlama-dulu, jadi Anda mungkin tergoda untuk membaca semuanya dan membaliknya di aplikasi Anda — boros, dan rusak begitu Anda menambahkan Limit. DynamoDB dapat menyerahkannya kembali terbaru-dulu secara langsung.

Cara kerja ScanIndexForward

Item dalam sebuah partisi secara fisik disimpan terurut berdasarkan sort key. Sebuah Query menyusuri urutan itu; ScanIndexForward sekadar memilih arah penyusuran:

  • true (default) — mulai dari sort key terendah, menyusuri ke atas (menaik).
  • false — mulai dari sort key tertinggi, menyusuri ke bawah (menurun).

Yang krusial, ini adalah properti dari pembacaan, bukan tabel — Item yang sama, condition key yang sama, hanya terbalik. Dan karena DynamoDB hanya memilih sebuah arah atas data yang sudah-terurut, pembacaan menurun sama persis murahnya dengan yang menaik. Pasangkan dengan Limit=10 dan Anda mendapatkan "10 event skor paling baru" dalam satu Query berbiaya-minimal.

true defaultfalseQuery GAME#42ScanIndexForward?Skor terlama duluSkor terbaru dulu

Satu kehalusan: saat mem-paginasi mundur melalui himpunan hasil menurun, cursor LastEvaluatedKey/ExclusiveStartKey tetap berfungsi — cukup jaga ScanIndexForward=false konsisten di setiap halaman scan yang sama, atau arah cursor dan urutannya akan berselisih.

Membangun query di DynoTable

Untuk merakit condition key itu sendiri (dan melihat map attribute-name/value yang cocok), gunakan DynamoDB expression builder.

Di DynoTable, Anda membaca sebuah Tab lewat key yang dipilih dan mengatur arah pengurutan pada Tab dengan sebuah toggle — tanpa perlu menulis sendiri ScanIndexForward. Balik toggle tersebut untuk mempratinjau hasil terbaru-dulu.

Mengalihkan sebuah Tab Query ke urutan menurun (terbaru-dulu) di DynoTable.
Mengalihkan sebuah Tab Query ke urutan menurun (terbaru-dulu) di DynoTable.

Jebakan dan langkah berikutnya

  • ScanIndexForward membalik, ia tidak mengurutkan berdasarkan atribut sembarang. Urutan selalu berdasarkan sort key — untuk mengurutkan berdasarkan hal lain Anda butuh atribut itu sebagai sort key (sering kali lewat sebuah GSI).
  • Jangan baca-semua-lalu-balik di aplikasi Anda — setel flag-nya dan tambahkan Limit.
  • Jaga flag tetap konsisten saat mem-paginasi sebuah scan multi-halaman, atau cursor akan melawan urutannya.
  • Ingin numerik terbaru-dulu? Pastikan sort key terurut dengan benar — beri padding nol pada angka agar urutan leksikografis cocok.
  • Terkait: strategi sort-key dan paginasi.

Ingin membalik urutan hasil tanpa menyentuh parameter API? Unduh DynoTable dan mem-Query tabel Anda secara langsung.

Diperbarui