Einsteiger5 Min. Lesezeit

Wie du DynamoDB in absteigender Reihenfolge abfragst

Standardmäßig gibt eine DynamoDB-Query Items in aufsteigender Sort-Key-Reihenfolge zurück. Aber die meisten „gib mir das Neueste"-Access-Patterns wollen das Gegenteil — neueste zuerst. Der Schalter ist ein einzelner Boolean auf der Query: ScanIndexForward. Setze ihn auf false und dieselbe Query liest die Partition rückwärts.

Es ist ein Parameter, aber er bringt Leute durcheinander, weil er leicht damit zu verwechseln ist, die Ergebnisse nachträglich zu sortieren (was DynamoDB nicht tut), und weil der Name rückwärts zu dem liest, was er steuert.

Wie frage ich DynamoDB in absteigender Reihenfolge ab?

Setze ScanIndexForward=false auf der Query. Standardmäßig gibt DynamoDB Items in aufsteigender Sort-Key-Reihenfolge zurück; dieser einzelne Boolean kehrt die Leserichtung der Partition um und liefert dir neueste-zuerst-Ergebnisse, wenn dein Sort Key ein Timestamp oder eine Sequenz ist. Er ändert nur die Reihenfolge, nicht welche Items matchen, und absteigende Reads kosten exakt dasselbe wie aufsteigende.

  • ScanIndexForward=true (Standard) → aufsteigende Sort-Key-Reihenfolge.
  • ScanIndexForward=false → absteigende Reihenfolge — neueste-zuerst, wenn dein Sort Key ein Timestamp oder eine Sequenz ist.
  • Es beeinflusst nur die Reihenfolge, nicht, welche Items matchen — das entscheidet weiterhin die Key Condition.
  • Es ist gratis. Umgekehrte Reihenfolge kostet dasselbe wie vorwärts; DynamoDB liest so oder so die gespeicherte Reihenfolge der Partition.
  • Nutze Limit damit, um „die N neuesten" in einem billigen Read zu bekommen.

Das Problem: „zeig mir die neuesten zuerst"

Nimm an, du betreibst ein Multiplayer-Leaderboard und speicherst die Score-Events jedes Spielers unter einem Partition Key, sortiert nach einem ansteigenden Timestamp:

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

Das Dashboard braucht die neuesten Scores. Eine simple Query auf GAME#42 gibt sie älteste-zuerst zurück, also wärst du versucht, alles zu lesen und es in deiner App umzudrehen — verschwenderisch, und kaputt, sobald du Limit hinzufügst. DynamoDB kann sie direkt neueste-zuerst zurückgeben.

Wie ScanIndexForward funktioniert

Items in einer Partition sind physisch nach Sort Key geordnet gespeichert. Eine Query läuft diese Reihenfolge ab; ScanIndexForward wählt nur die Richtung des Durchlaufs:

  • true (Standard) — beginne beim niedrigsten Sort Key, lauf hoch (aufsteigend).
  • false — beginne beim höchsten Sort Key, lauf runter (absteigend).

Entscheidend: das ist eine Eigenschaft des Reads, nicht der Tabelle — dieselben Items, dieselbe Key Condition, nur umgekehrt. Und weil DynamoDB nur eine Richtung über bereits sortierte Daten wählt, sind absteigende Reads exakt so billig wie aufsteigende. Kombiniere es mit Limit=10 und du bekommst „die 10 neuesten Score-Events" in einer einzigen, minimal-teuren Query.

true StandardfalseQuery GAME#42ScanIndexForward?Aeltester Score zuerstNeuester Score zuerst

Eine Feinheit: wenn du rückwärts durch ein absteigendes Result-Set paginierst, funktioniert der LastEvaluatedKey/ExclusiveStartKey-Cursor weiterhin — halte nur ScanIndexForward=false über jede Seite desselben Scans konsistent, sonst widersprechen sich Cursor-Richtung und Reihenfolge.

Die Query in DynoTable bauen

Um die Key Condition selbst zusammenzustellen (und die passenden Attribute-Name/Value-Maps zu sehen), nutze den DynamoDB Expression Builder.

In DynoTable liest du einen Tab durch einen gewählten Key und setzt die Sortierrichtung auf dem Tab mit einem Toggle — kein Bedarf, ScanIndexForward von Hand zu schreiben. Kipp ihn, um die Ergebnisse neueste-zuerst zu previewen.

Einen Query-Tab in DynoTable auf absteigende (neueste-zuerst) Reihenfolge umschalten.
Einen Query-Tab in DynoTable auf absteigende (neueste-zuerst) Reihenfolge umschalten.

Fallstricke und nächste Schritte

  • ScanIndexForward kehrt um, es sortiert nicht nach einem beliebigen Attribut. Die Reihenfolge ist immer nach dem Sort Key — um nach etwas anderem zu sortieren, brauchst du dieses Attribut als Sort Key (oft über einen GSI).
  • Lies nicht alles-dann-umdrehen in deiner App — setze das Flag und füge Limit hinzu.
  • Halte das Flag beim Paginieren eines mehrseitigen Scans konsistent, sonst kämpft der Cursor gegen die Reihenfolge.
  • Numerisch neueste-zuerst gewünscht? Stell sicher, dass der Sort Key korrekt sortiert — Zahlen mit Nullen auffüllen, damit die lexikografische Reihenfolge passt.
  • Verwandt: Sort-Key-Strategien und Pagination.

Willst du die Ergebnisreihenfolge umkehren, ohne API-Parameter anzufassen? Lade DynoTable herunter und frage deine Tabellen direkt ab.

Aktualisiert