Cara Mengkueri DynamoDB di Pesanan Descending
Secara default, DynamoDB Query mengembalikan item dalam urutan kunci pengurutan naik. Tapi kebanyakan
Pola akses "beri saya yang terbaru" menginginkan yang sebaliknya — yang terbaru terlebih dahulu. Tombolnya adalah a
boolean tunggal pada Kueri: ScanIndexForward. Setel ke false dan sama
kueri membaca partisi secara terbalik.
Itu salah satu parameter, tapi membuat orang tersandung karena mudah dibingungkan dengan penyortiran results setelah fakta (yang tidak dilakukan DynamoDB) dan karena namanya terbaca mundur dari apa yang dikontrolnya.
Bagaimana cara menanyakan DynamoDB dalam urutan descending?
Setel ScanIndexForward=false pada Query. Secara default, DynamoDB mengembalikan item dalam urutan tombol sortir menaik; membalik boolean tunggal ini akan membaca partisi secara terbalik, memberi Anda hasil terbaru-pertama ketika kunci pengurutan Anda adalah stempel waktu atau urutan. Ini hanya mengubah pemesanan, bukan item mana yang cocok, dan biaya pembacaan terbalik sama persis dengan biaya pembacaan selanjutnya.
ScanIndexForward=true(default) → urutan tombol sortir menaik.ScanIndexForward=false→ descending order — terbaru-pertama saat kunci pengurutan Anda berada stempel waktu atau urutan.- Ini hanya memengaruhi pemesanan, bukan item mana yang cocok — kondisi utamanya tetap memutuskan itu.
- Gratis. Biaya pemesanan terbalik sama dengan biaya penerusan; DynamoDB membaca urutan partisi yang disimpan dengan cara apa pun.
- Gunakan
Limitdengannya untuk mendapatkan "N terbaru" dalam satu kali pembacaan murah.
Masalahnya: "tunjukkan yang terbaru dulu"
Katakanlah Anda menjalankan papan peringkat multipemain dan menyimpan peristiwa skor setiap pemain di bawah satu kunci partisi, diurutkan berdasarkan stempel waktu yang meningkat:
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 pointsDasbor memerlukan skor terbaru. Query biasa pada GAME#42 kembali
yang terlama terlebih dahulu, jadi Anda akan tergoda untuk membaca semuanya dan membalikkannya di aplikasi Anda —
boros, dan rusak saat Anda menambahkan Limit. DynamoDB dapat mengembalikannya
terbaru-pertama secara langsung.
Bagaimana ScanIndexForward bekerja
Item dalam partisi disimpan secara fisik diurutkan berdasarkan kunci pengurutan. Sebuah Query berjalan
perintah itu; ScanIndexForward hanya memilih arah perjalanannya:
true(default) — mulai dari tombol pengurutan terendah, naik (naik).false— mulai dari kunci pengurutan tertinggi, turun (descending).
Yang terpenting, ini adalah properti baca, bukan tabel — item yang sama, sama
syarat kuncinya, dibalik saja. Dan karena DynamoDB hanya memilih arah saja
data sudah diurutkan, descending dibaca
sama murahnya
sebagai yang menaik. Pasangkan dengan Limit=10 dan Anda mendapatkan "10 skor terbaru
acara" dalam satu Kueri berbiaya minimal.
Satu kehalusan: saat melakukan paging mundur melalui kumpulan hasil descending, file
Kursor LastEvaluatedKey/ExclusiveStartKey masih berfungsi — simpan saja
ScanIndexForward=false konsisten di setiap halaman kueri yang sama, atau kursor
arah dan urutannya tidak sesuai.
Membangun kueri di DynoTable
Untuk merakit kondisi kunci itu sendiri (dan melihat peta nama atribut/nilai yang cocok),
gunakan pembuat ekspresi DynamoDB. Untuk
seluruh permintaan — termasuk indeks, Limit, dan ScanIndexForward — the
pembuat kueri menyusun Kueri dan mengeluarkan a
program SDK v3, CLI, atau boto3 yang dapat dijalankan.
Di DynoTable, Anda membaca tab melalui tombol yang dipilih dan mengatur arah pengurutan pada tab
dengan tombol alih — tidak perlu menulis tangan ScanIndexForward. Balikkan untuk melihat pratinjau
hasil terbaru-pertama.
<gambar kelas="doc-media-placeholder" jenis data="tangkapan layar" data-src="docs/guide-dynamodb-query-descending-order-sort-toggle.png"
Jebakan + langkah selanjutnya
ScanIndexForwardterbalik, tidak mengurutkan berdasarkan atribut sewenang-wenang. Urutannya selalu dengan kunci pengurutan — untuk mengurutkan berdasarkan hal lain, Anda memerlukan atribut as a kunci pengurutan (seringkali melalui GSI).- Jangan membaca terus-menerus di aplikasi Anda — atur tandanya dan tambahkan
Limit. - Jaga agar tanda tetap konsisten saat melakukan paging kueri multi-halaman, atau kursor akan melawan memesan.
- Ingin numerik yang terbaru terlebih dahulu? Kunci pengurutan dengan tipe angka sudah mengurutkan secara numerik. Hanya jika Anda telah menyematkan angka di dalam kunci pengurutan string, apakah Anda perlu melakukannya zero-pad their sehingga urutan leksikografisnya cocok.
- Terkait: strategi kunci sortir dan paginasi.
Ingin membalik urutan hasil tanpa menyentuh parameter API? Unduh DynoTable dan kueri tabel Anda secara langsung.
Kunci pengurutan komposit dan numerik
Urutan Descending mengikuti aturan jenis kunci pengurutan, bukan model mental Anda "terbaru":
| Kunci pengurutan disimpan sebagai | Descending memberi Anda | Mengerti |
|---|---|---|
Tali UTC ISO-8601 2026-06-27T10:09:00Z | Stempel waktu terbaru terlebih dahulu | Urutan leksikografis cocok dengan kronologis ketika zona waktu ditetapkan |
String zaman dengan bantalan nol 00000000001009 | Urutan tertinggi terlebih dahulu | Pengurutan nomor yang tidak diisi salah ("9" > "10") — lihat zero-padding |
Tipe nomor N | Nilai numerik terbesar terlebih dahulu | Urutan numerik alami, bukan string |
Awalan status STATUS#open#... | Membalikkan leksikografis pada SK penuh | Tidak sama dengan "terakhir dibuka" kecuali dikodekan dalam sufiks |
Jika "terbaru" berarti selain kunci pengurutan — misalnya, mengurutkan berdasarkan
points di dalam partisi game yang sama — Anda memerlukan metrik tersebut dalam semacam itu
key (atau pada GSI yang kunci pengurutannya adalah points), bukan pengurutan pasca-kueri
kode aplikasi.
Limit dengan descending membaca
Limit membatasi item dievaluasi, bukan item yang dikembalikan setelah filter. Pasangkan
ScanIndexForward=false dengan Limit=10 pada kunci pengurutan berdasarkan waktu untuk mengambil
sepuluh peristiwa terbaru dalam satu partisi dibaca.
Contoh biaya: sepuluh item berukuran 2 KB dalam satu descending Query sentuh 20 KB → 3
RCU akhirnya konsisten (dibulatkan menjadi blok 4 KB). Membaca seluruh partisi
dari 10.000 peristiwa untuk dibalik dalam kode aplikasi menyentuh ~20 MB → ribuan
RCU untuk widget UI yang sama. Modelkan ukuran partisi Anda dengan
kalkulator ukuran barang sebelum memilih
Limit.
Penomoran halaman tetap terarah
Saat Anda membuat halaman dengan ExclusiveStartKey, tetap aktifkan ScanIndexForward
setiap permintaan. Membalik bendera antar halaman akan membalikkan semantik kursor —
Anda dapat melewati atau menduplikasi baris.
Untuk API yang mengekspos "muat lebih banyak", enkode base64 LastEvaluatedKey secara buram;
klien tidak boleh mengubah komponen kunci pengurutan. Lihat
pagination untuk pola token.
Paritas PartiQL dan SDK
Kueri PartiQL ExecuteStatement menerima semantik pengurutan yang sama
parameter Query yang mendasari ketika pelaksana memetakan ke pembacaan kondisi kunci.
Pembuat kueri mengeluarkan SDK v3, CLI, atau boto3
program dengan kabel ScanIndexForward secara eksplisit — berguna saat tim Anda berbaur
Kueri ad hoc PartiQL dengan kode SDK produksi.
Pola akses yang menggunakan urutan descending
- Umpan aktivitas —
SKadalah stempel waktu ISO; descending +Limitmenghasilkan a jendela terbaru. - Papan Peringkat — tombol pengurutan numerik
score; descending menampilkan skor tertinggi ketika kunci partisi mencakup satu pertandingan atau musim. - Audit tail — kunci pengurutan
EVENT#<ts>khusus tambahan; descending menunjukkan yang terbaru acara pertama tanpa GSI.
Ketika UI juga membutuhkan riwayat menaik ("tampilkan yang terlama terlebih dahulu"), kueri yang sama
dengan ScanIndexForward=true menghindari duplikasi data atau mempertahankan dua indeks.
Coba alihkan ke data nyata
Hubungkan DynoTable, buka tab kueri pada partisi dengan kunci pengurutan berdasarkan waktu,
flip ascending/descending, dan lihat susunan ulang grid tanpa mengedit API
parameter. Bandingkan kapasitas yang dikonsumsi dalam log operasi — maju dan
pembacaan terbalik pada Limit yang sama harus cocok.