Pemula7 menit baca

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 Limit dengannya 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   points

Dasbor 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.

bawaan yang sebenarnyaPALSUKueri PERMAINAN#42ScanIndexForward?Skor tertua terlebih dahuluSkor terbaru terlebih dahulu

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"

Mengalihkan tab kueri ke urutan descending (terbaru-pertama) di DynoTable.

Jebakan + langkah selanjutnya

  • ScanIndexForward terbalik, 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 sebagaiDescending memberi AndaMengerti
Tali UTC ISO-8601 2026-06-27T10:09:00ZStempel waktu terbaru terlebih dahuluUrutan leksikografis cocok dengan kronologis ketika zona waktu ditetapkan
String zaman dengan bantalan nol 00000000001009Urutan tertinggi terlebih dahuluPengurutan nomor yang tidak diisi salah ("9" > "10") — lihat zero-padding
Tipe nomor NNilai numerik terbesar terlebih dahuluUrutan numerik alami, bukan string
Awalan status STATUS#open#...Membalikkan leksikografis pada SK penuhTidak 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 aktivitasSK adalah stempel waktu ISO; descending + Limit menghasilkan 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.

Diperbarui