Sie suchen nach einem einfachen Beispiel für das Abrufen von 500 Elementen aus Dynamodb, um die Anzahl der Abfragen zu minimieren. Ich weiß, es gibt eine "Multiget" -Funktion, die mich in Stücke von 50 Abfragen aufteilen würde, aber nicht sicher, wie das geht.
Ich fange mit einer Liste von 500 Schlüsseln an. Ich denke dann darüber nach, eine Funktion zu schreiben, die diese Liste von Schlüsseln nimmt, sie in "Stücke" zerlegt, die Werte abruft, sie wieder zusammenfügt und ein Diktat mit 500 Schlüssel / Wert-Paaren zurückgibt.
Oder gibt es einen besseren Weg, dies zu tun?
Als eine logische Folge, wie würde ich die Artikel danach "sortieren"?
Je nach Ihrem Schema gibt es zwei Möglichkeiten, Ihre 500 Artikel effizient abzurufen.
hash_key
, mit einem range_key
query
mit hash_key
range_keys
A-Z oder Z-A BatchGetItem
Auf der praktischen Seite, da Sie Python verwenden, empfehle ich die Boto-Bibliothek für Level-Zugriff oder dynamodb-mapper-Bibliothek für den Zugriff auf höhere Ebenen (Disclaimer: Ich bin einer der Kernentwickler von dynamodb- Mapper).
Leider bietet keine dieser Bibliotheken eine einfache Möglichkeit, die Operation batch_get zu umbrechen. Im Gegenteil, es gibt einen Generator für scan
und für query
, der "vorgibt", erhalten Sie alle in einer einzigen Abfrage.
Um optimale Ergebnisse mit der Batch-Abfrage zu erhalten, empfehle ich diesen Workflow:
UnprocessedKeys
so oft wie nötig Ich nehme an, Sie haben eine Tabelle "MyTable" mit einem einzelnen hash_key
BEARBEITEN:
Ich habe eine resubmit()
-Funktion zu BatchList
im Boto-Entwicklungszweig hinzugefügt. Es vereinfacht den Arbeitsablauf erheblich:
BatchList
hinzu
submit()
resubmit()
, solange es keine None zurückgibt. Dies sollte in der nächsten Version verfügbar sein.
Tags und Links python amazon-dynamodb