Google App Engine-Zeitüberschreitung: Die Datenspeicheroperation ist abgelaufen oder die Daten waren vorübergehend nicht verfügbar

8

Dies ist eine häufige Ausnahme. Ich erhalte täglich das Protokoll meiner Anwendung, normalerweise 5/6 mal am Tag mit einem Datenverkehr von 1K Besucher / Tag:

%Vor%

Die Funktion, die die obige Ausnahme auslöst, ist die folgende:

%Vor%

Grundsätzlich überprüft die Funktion store_printed_question , ob eine bestimmte Frage zuvor gedruckt wurde, und erhöht in diesem Fall den zugehörigen Zähler in einer einzigen Transaktion.
Diese Funktion wird von einem WebHandler zu einem verzögerten Mitarbeiter hinzugefügt, der das vordefinierte Standard Warteschlange, wie Sie vielleicht wissen, hat eine Durchsatzrate von fünf Aufgabenaufrufe pro Sekunde.

Bei einer Entität mit sechs Attributen (zwei Indizes) dachte ich, dass Sie Transaktionen verwenden , die durch eine aufgeschobene Task-Ratenbegrenzung reguliert werden, würde es mir ermöglichen, Zeitüberschreitungen im Datenspeicher zu vermeiden, aber wenn man sich das Protokoll anschaut, taucht dieser Fehler immer noch täglich auf.

Dieser Counter, den ich speichere, ist nicht so wichtig, also mache ich mir keine Sorgen darüber, diese Timeouts zu bekommen; trotzdem bin ich neugierig, warum Google App Engine kann nicht richtig mit dieser Aufgabe auch bei einer niedrigen Rate wie 5 Aufgaben pro Sekunde und wenn eine Senkung der Rate eine mögliche Lösung sein könnte Ein sharded counter für jede Frage, um Timeouts zu vermeiden, wäre für mich ein Overkill.

BEARBEITEN:
Ich habe das Ratenlimit auf 1 Task pro Sekunde in der Standardwarteschlange festgelegt. Ich bekomme immer noch den gleichen Fehler.

    
systempuntoout 20.01.2011, 09:44
quelle

2 Antworten

7

Eine Abfrage kann nur 30 Sekunden lang leben. Siehe meine Antwort zu Diese Frage für Beispielcode, um eine Abfrage mithilfe von Cursors zu lösen.

    
phatmann 02.08.2012 23:36
quelle
6

Im Allgemeinen ist eine solche Zeitüberschreitung normalerweise auf Konflikte beim Schreiben zurückzuführen. Wenn eine Transaktion läuft und Sie eine ganze Menge Sachen gleichzeitig in dieselbe Entitätsgruppe schreiben, stoßen Sie auf Konflikte mit Schreibkonflikten (ein Nebeneffekt von Optimistische Parallelität ). In den meisten Fällen wird das minimiert, wenn Sie Ihre Entitätsgruppe verkleinern Dieses Problem.

In Ihrem speziellen Fall, basierend auf dem obigen Code, liegt dies höchstwahrscheinlich daran, dass Sie einen sharded counter um das Stapeln von serialisierten Schreibvorgängen zu vermeiden.

Eine andere, weitaus weniger wahrscheinliche Möglichkeit (hier nur der Vollständigkeit halber genannt) ist, dass das Tablet, auf dem sich Ihre Daten befinden, verschoben wird .

    
Bob Aman 20.01.2011 10:13
quelle