2016-05-06 5 views
3

Ich bin ziemlich neu in AWS DynamoDB und habe die Dokumentation gelesen Ich bin nicht 100% sicher, was mit Kostenberechnungen passiert, wenn 'Limit' Parameter in einem SCAN Betrieb.DynamoDB SCAN Betriebskosten mit "Limit" -Parameter

Ich verstehe, dass man sollte die Tabellen so auszugestalten, dass QUERY Operationen überwiegend verwendet werden und dass ein SCAN wird die gesamte Tabelle scannen, so viel Lesekapazität verbrauchen. Ich verstehe auch, dass ein FilterExpression die Kosten für das Scannen der gesamten Tabelle nicht beeinflusst, aber filtert, was nach der gesamte Scan zurückgegeben wird, und wenn die Gesamtzahl der gescannten Elemente die maximale Datensatzgröße von 1 MB überschreitet, die Scan stoppt und Ergebnisse werden zurückgegeben.

Was ich nicht sicher bin, ist, ob der 'Limit' Parameter eine Art von FilterExpression ist, oder ob es einen kompletten Scan stoppt, wodurch die Lesekosten reduziert werden.

Zum Beispiel, wenn ich eine Aktivitätstabelle mit einem Sortierschlüssel hatte, der ein Datumsfeld (updatedAt) ist und es eine Million Zeilen hatte. Wenn ich einen SCAN mit einem Limit = 10 durchgeführt habe (um die 10 neuesten Aktivitäten zu erhalten), würde ich natürlich 10 Zeilen zurückbekommen, aber würde ich dafür bezahlen, dass ich eine Million Zeilen gelesen habe? Die Kosten sind meine Hauptsorge.

Antwort

2

Ja, Limit wird auch die verbrauchte Lesekapazität rediuce, hier ist der relevante Teil der DynamoDB docs:

Der Scanvorgang stellt einen Grenzwert Parameter, der die Seitengröße für Ihre Anfrage einstellen können. Jede Abfrage oder Abfrage, die eine kleinere Seitengröße hat, verwendet weniger Lesevorgänge und erstellt eine "Pause" zwischen jeder Anforderung. Wenn beispielsweise jedes Element 4 KB groß ist und Sie die Seitengröße auf 40 Elemente festlegen, würde eine Abfrageanforderung nur 40 stark konsistente Leseoperationen oder 20 möglicherweise konsistente Leseoperationen verwenden. Eine größere Anzahl von kleineren Such- oder Abfragevorgängen würde es Ihren anderen kritischen Anforderungen ermöglichen, ohne Drosseln erfolgreich zu sein.

Wie Sie jeder Scan oder Query Anfrage sehen können, die eine kleinere Seitengröße hat verwendet weniger Leseoperationen.

+0

Danke für die Antwort. Dies beantwortet die Frage, obwohl ich kürzlich festgestellt habe, dass die Reihenfolge eines Scans momentan zufällig ist, anstatt die Reihenfolge des Sortierschlüssels beizubehalten. Das bedeutet, dass ich die letzten 10 Aktivitäten nicht über ein updatedAt-Feld abrufen konnte. Danke für die Bestätigung der Kostenfrage. – elprl

+0

@elprl, aber wenn das 'updatedAt'-Feld Ihr Sortierschlüssel ist, warum verwenden Sie' scan' Operation und nicht 'query'? –

+0

In meinem speziellen Fall war der Hash-Schlüssel der Tabelle eine HashTag-Zeichenfolge und der Sortierschlüssel war eine updatedAt epoc-Nummer. ["#cat": 1462812033, "#dog": 1462812073, ...]. Daher brauchte ich den '' Scan '', um alle Hashtags seit der Zeit X zu erhalten. – elprl