Lächerlich langsame Schreibvorgänge in Amazon DynamoDB (PHP-API)

Diese Frage wurde bereits in AWS-Foren gepostet, bleibt jedoch unbeantwortethttps://forums.aws.amazon.com/thread.jspa?threadID=94589

Ich versuche, einen ersten Upload einer langen Liste von kurzen Elementen (etwa 120 Millionen) durchzuführen, um sie später mit einem eindeutigen Schlüssel abzurufen. Dies scheint ein perfekter Fall für DynamoDb zu sein.

Meine aktuelle Schreibgeschwindigkeit ist jedoch sehr langsam (ungefähr 8-9 Sekunden pro 100 Schreibvorgänge), was das erstmalige Hochladen fast unmöglich macht (bei der aktuellen Geschwindigkeit würde es ungefähr 3 Monate dauern).

Ich habe in AWS-Foren nach einer Antwort gesucht und bereits die folgenden Dinge ausprobiert:

Ich habe von einzelnen "put_item" -Aufrufen zu Stapelschreibvorgängen mit 25 Elementen gewechselt (empfohlene maximale Stapelschreibgröße), und jedes meiner Elemente ist kleiner als 1 KB (was ebenfalls empfohlen wird). Es ist sehr typisch, dass auch 25 meiner Artikel unter 1 KB sind, aber es ist nicht garantiert (und sollte sowieso keine Rolle spielen, da für DynamoDB nur die Größe einzelner Artikel wichtig ist).

Ich verwende die kürzlich eingeführte EU-Region (ich bin in Großbritannien), um ihren Einstiegspunkt direkt durch Aufrufen von set_region ('dynamodb.eu-west-1.amazonaws.com') festzulegen, da es anscheinend keine andere Möglichkeit gibt, dies in PHP zu tun API. Die AWS-Konsole zeigt, dass sich die Tabelle in einer richtigen Region befindet, damit das funktioniert.

Ich habe SSL durch Aufrufen von disable_ssl () deaktiviert (was 1 Sekunde pro 100 Datensätze bedeutet).

Ein Testsatz von 100 Elementen (4 Stapelschreibaufrufe für 25 Elemente) benötigt jedoch nie weniger als 8 Sekunden für die Indizierung. Jede Stapelschreibanforderung dauert ungefähr 2 Sekunden. Es ist also nicht so, dass die erste Anforderung sofort erfolgt und die nachfolgenden Anforderungen dann langsam sind.

Mein von der Tabelle bereitgestellter Durchsatz beträgt 100 Schreib- und 100 Leseeinheiten, was bisher ausreichen sollte (probierte auch höhere Grenzwerte für den Fall, dass keine Auswirkungen auftreten).

Ich weiß auch, dass bei der Serialisierung von Anforderungen einige Kosten anfallen, sodass ich wahrscheinlich die Warteschlange verwenden kann, um meine Anforderungen zu "akkumulieren". Aber ist das für batch_writes wirklich wichtig? Und ich denke nicht, dass dies das Problem ist, da selbst eine einzelne Anfrage zu lange dauert.

Ich habe festgestellt, dass einige Leute die cURL-Header (insbesondere "Expect:") in der API modifizieren, um die Anforderungen zu beschleunigen, aber ich denke nicht, dass dies ein angemessener Weg ist, und auch die API wurde aktualisiert, seit dieser Hinweis veröffentlicht wurde.

Der Server, auf dem meine Anwendung ausgeführt wird, ist ebenfalls in Ordnung - ich habe gelesen, dass die CPU-Auslastung manchmal überhand nimmt, aber in meinem Fall ist alles in Ordnung, es ist nur die Netzwerkanforderung, die zu lange dauert.

Ich stecke jetzt fest - kann ich noch etwas versuchen? Bitte fragen Sie nach weiteren Informationen, wenn ich nicht genug zur Verfügung gestellt habe.

Es gibt andere aktuelle Themen, die anscheinend dasselbe Problem haben:Hier (noch keine Antwort).

Dieser Service soll ultraschnell sein, daher bin ich von Anfang an sehr verwirrt über dieses Problem.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage