Google App Engine HRD - Was passiert, wenn ich die Grenze von 1 Schreib pro Sekunde für das Schreiben in die Entitätsgruppe überschreite?

8

Laut der Google App Engine-Dokumentation ist das Schreiben in eine Entitätsgruppe auf einen Schreibvorgang pro Sekunde beschränkt, wenn High Replication-Datenspeicher verwendet wird. Also ...

  1. Was passiert, wenn ich dieses Limit überschreite? Eine Art Ausnahme? Und was soll ich tun?
  2. Woher weiß ich, dass ich kurz davor bin, diese Grenze zu überschreiten? Ich kann die Anwendung so gestalten, dass bestimmte Aktionen (Hinzufügen einer Entität ...) nicht oft vorkommen, aber das kann ich natürlich nicht garantieren.
tobik 04.05.2012, 18:46
quelle

2 Antworten

9

Ein Schreibvorgang pro Sekunde ist ein wenig niedrig. es unterstützt tatsächlich mehr als das. Ich würde sogar zwischen 5 und 10 Schreibvorgänge pro Sekunde sagen, aber das kann ich natürlich nicht garantieren.

Wenn Sie dieses Limit erreichen, erhalten Sie eine Ausnahme ja. Die Ausnahmebedingung lautet:
Too much contention on these datastore entities. please try again.

aber ich weiß nicht / erinnere mich an die genaue Ausnahme, die ausgelöst wird.

Sie haben die Wahl zu wiederholen, fortzufahren oder was auch immer Sie für richtig halten.

Sie können nicht sagen, ob Sie sich in der Nähe einer Grenze von 1 Schreiben pro Sekunde befinden. es passiert, und Sie beschäftigen sich damit.

    
aschmid00 04.05.2012, 19:09
quelle
15

Basierend auf der GAE-Dokumentation und meiner begrenzten Erfahrung:

  1. Erwarte etwa 1 QPS-Rate und passe deine App entsprechend an.
  2. Das Sharding ist ein häufiges Muster zur Behandlung von Datenspeicherkonflikten.
  3. Fügen Sie immer defensiven Code hinzu, um jede mögliche Ausnahme ( Application Error 5, The datastore operation timed out, Transaction collision for entity group , ..)
  4. zu behandeln
  5. Im Falle eines Fehlers versuchen Sie es erneut, indem Sie den Task in eine geeignete Taskwarteschlange verschieben oder, falls möglich, den Benutzer darauf hinweisen, es erneut zu versuchen.
  6. Wiederholen Sie einen Schreibvorgang, normalerweise funktioniert.
  7. Verwenden Sie nach Möglichkeit einen Write-Behind-Cache-Mechanismus, durch den die Schreiboperation verschoben wird, die zu einem Konflikt mit Memcache führen kann und eine Task-Warteschlange , die die Trefferquote des Datenspeichers verlangsamt.
  8. Eine gute Möglichkeit, Konflikte zu vermeiden, besteht darin, die Entitätsgruppen klein zu halten, aber zählen Sie nicht zu sehr darauf.
  9. Sie können sogar auf einzelne Entitäten streiten.
systempuntoout 04.05.2012 21:22
quelle