Başlangıç4 dakikalık okuma

DynamoDB'yi Azalan Sırada Nasıl Sorgularsınız

Varsayılan olarak bir DynamoDB Query, item'ları artan sort key sırasında döndürür. Ama "bana en sonuncuları getir" erişim desenlerinin çoğu tersini ister — en yeni önce. Düğme, Query üzerindeki tek bir boolean: ScanIndexForward. Onu false yapın, aynı sorgu partition'ı ters yönde okur.

Tek bir parametredir, ama insanların kafasını karıştırır çünkü sonradan sonuçları sıralamakla (DynamoDB bunu yapmaz) karıştırmak kolaydır ve adı kontrol ettiği şeyin tersi gibi okunur.

DynamoDB'yi azalan sırada nasıl sorgularım?

Query'de ScanIndexForward=false ayarlayın. DynamoDB varsayılan olarak item'ları artan sort key sırasına göre döndürür; bu tek boolean'ı değiştirdiğinizde partition ters yönde okunur ve sort key'iniz bir zaman damgası ya da dizi olduğunda en yeni önce sonuçlar elde edersiniz. Yalnızca sıralamayı değiştirir, hangi item'ların eşleştiğini değil; ters yönlü okumalar ileri yönlülerle tam olarak aynı maliyettedir.

  • ScanIndexForward=true (varsayılan) → artan sort key sırası.
  • ScanIndexForward=false → azalan sıra — sort key'iniz bir zaman damgası veya dizi olduğunda en yeni önce.
  • Yalnızca sıralamayı etkiler, hangi item'ların eşleştiğini değil — buna hâlâ anahtar koşulu karar verir.
  • Bedavadır. Ters sıra, ileriyle aynı maliyettedir; DynamoDB her iki şekilde de partition'ın depolanmış sırasını okur.
  • Onunla birlikte Limit kullanın ki tek bir ucuz okumada "en yeni N tanesini" alasınız.

Sorun: "bana en sonuncuları önce göster"

Diyelim ki çok oyunculu bir liderlik tablosu çalıştırıyorsunuz ve her oyuncunun skor olaylarını tek bir partition key altında, artan bir zaman damgasına göre sıralı saklıyorsunuz:

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

Panonun en yeni skorlara ihtiyacı var. GAME#42 üzerinde sade bir Query onları en eski önce döndürür, bu yüzden her şeyi okuyup uygulamanızda tersine çevirmeye yönelirsiniz — savurgan ve Limit eklediğiniz anda bozuk. DynamoDB onları doğrudan en yeni önce geri verebilir.

ScanIndexForward nasıl çalışır

Bir partition'daki item'lar fiziksel olarak sort key'e göre sıralı depolanır. Bir Query o sırada yürür; ScanIndexForward yalnızca yürüyüşün yönünü seçer:

  • true (varsayılan) — en düşük sort key'de başla, yukarı yürü (artan).
  • false — en yüksek sort key'de başla, aşağı yürü (azalan).

Önemli nokta, bu, tablonun değil, okumanın bir özelliğidir — aynı item'lar, aynı anahtar koşulu, sadece ters. Ve DynamoDB yalnızca zaten sıralanmış veri üzerinde bir yön seçtiği için, azalan okumalar artan olanlarla tam olarak aynı ucuzluktadır. Onu Limit=10 ile eşleştirin, tek bir minimal maliyetli Query'de "en yeni 10 skor olayını" alın.

true varsayılanfalseQuery GAME#42ScanIndexForward?En eski skor önceEn yeni skor önce

Bir incelik: azalan bir sonuç kümesinde geriye doğru sayfalama yaparken, LastEvaluatedKey/ExclusiveStartKey imleci hâlâ çalışır — yalnızca aynı taramanın her sayfasında ScanIndexForward=false'u tutarlı tutun, yoksa imleç yönü ile sıra uyuşmazlığa düşer.

DynoTable'da sorguyu oluşturmak

Anahtar koşulunun kendisini birleştirmek için (ve eşleşen attribute-adı/değer haritalarını görmek için) DynamoDB expression builder'ı kullanın.

DynoTable'da bir sekmeyi seçili bir anahtar üzerinden okur ve sıralama yönünü sekme üzerindeki düğmeyle ayarlarsınız — ScanIndexForward'ı elle yazmaya gerek yok. En yeni önce sonuçları önizlemek için düğmeyi çevirin.

DynoTable'da bir sorgu sekmesini azalan (en yeni önce) sıraya geçirme.
DynoTable'da bir sorgu sekmesini azalan (en yeni önce) sıraya geçirme.

Tuzaklar + sonraki adımlar

  • ScanIndexForward tersine çevirir, rastgele bir attribute'a göre sıralamaz. Sıra her zaman sort key'e göredir — başka bir şeye göre sıralamak için o attribute'a sort key olarak (genellikle bir GSI aracılığıyla) ihtiyacınız var.
  • Uygulamanızda her şeyi okuyup sonra tersine çevirmeyin — bayrağı ayarlayın ve Limit ekleyin.
  • Çok sayfalı bir taramayı sayfalarken bayrağı tutarlı tutun, yoksa imleç sıra ile çatışır.
  • Sayısal en yeni önce mi istiyorsunuz? Sort key'in doğru sıralandığından emin olun — sözlüksel sıranın eşleşmesi için sayıları sıfır doldurun.
  • İlgili: sort-key stratejileri ve sayfalama.

API parametrelerine dokunmadan sonuç sırasını çevirmek mi istiyorsunuz? DynoTable'ı indirin ve tablolarınızı doğrudan sorgulayın.

Güncellendi