Ich versuche, große Mengen von Daten mit AmazonDynamoDBAsyncClient auf Dynamo zu schreiben, und ich versuche zu verstehen, was die beste Praxis der Handhabung von Throttling ist?Wie DynamoDb erneut versuchen zu schreiben, wenn gedrosselt?
Zum Beispiel habe ich eine Kapazität von 3000 schreibt und zu einem bestimmten Zeitpunkt habe ich, sagen wir, 100.000 Datensätze, die ich gerne schreiben würde. Ich brauche sie nicht alle sofort, aber ich versuche herauszufinden, wie der beste Weg ist, sie zu bekommen.
Diese Anwendung läuft in einer verteilten Umgebung, so dass möglicherweise 5 Executoren gleichzeitig versuchen, dies zu tun. Wäre der beste Weg, damit umzugehen, dieser Weg? Wo sollte ich den Schreibprozess schlafen, sollten wir Gas geben? Oder sollte ich etwas tun, um die Drossel vollständig zu vermeiden. Tatsächlich macht mein Code sogar, was ich denke, es ist der Versuch, die Daten nach einer Sekunde erneut zu versuchen?
try{
amazonDynamoAsyncDb.updateItemAsync(updateRequest)
}catch{
case e: ThrottlingException => {
Thread.sleep(1000)
//retry here, but how?
}
}
Eigentlich habe ich vielleicht gerade gelernt, dass es sich automatisch um Versuche handelt. Kann jemand bestätigen? –
Was Sie brauchen, kann ein Scheduler sein, sind Sie mit Akka vertraut? Sie können einen Akteur erstellen, der dies tut, wenn der Versuch fehlschlägt, sendet der Akteur in 1 Sekunde eine Nachricht an sich selbst und erinnert sich daran, es erneut zu versuchen. Oder Sie können einfach dieses [gist] (https://gist.github.com/viktorklang/9414163) verwenden, nämlich das 'retry'-Muster. –
Ich bin nicht vertraut, aber ich habe von Akka gehört. Ich werde auf diese beiden Optionen eingehen. Danke für Ihre Hilfe. –