Datenkonsistenz in Cloud Datastore-Abfragen

Datenkonsistenzebenen

Cloud Datastore-Abfragen können Ergebnisse auf einer von zwei Konsistenzebenen liefern:

  • Strikt konsistente Abfragen (Strong Consistency) garantieren die aktuellsten Ergebnisse, ihre Verarbeitung kann jedoch länger dauern.
  • Letztendlich konsistente Abfragen (Eventual Consistency) werden im Allgemeinen schneller ausgeführt, können jedoch gelegentlich veraltete Ergebnisse zurückgeben.

Bei einer Abfrage mit Eventual Consistency wird auf die Indexe, von denen die Ergebnisse abgerufen werden, ebenfalls mit Eventual Consistency zugegriffen. Folglich geben solche Abfragen manchmal Entitäten zurück, die nicht mehr den ursprünglichen Abfragekriterien entsprechen, während Abfragen mit Strong Consistency immer konsistent sind. Weitere Informationen zur Aktualisierung von Entitäten und Indexen finden Sie im Artikel Transaktionsisolation in App Engine.

Cloud Datastore – Datenkonsistenz in Abfragen

Die Ergebnisse von Abfragen werden je nach Art der Abfrage mit unterschiedlichen Konsistenzgarantieebenen zurückgegeben:

  • Ancestor-Abfragen sind Abfragen innerhalb einer Entitätengruppe und standardmäßig strikt konsistent. Sie können jedoch durch Anpassung der Leserichtlinien für Cloud Datastore zu letztendlich konsistenten Abfragen werden (siehe unten).
  • Nicht-Ancestor-Abfragen sind immer Eventual-Consistency-Abfragen.

Der Abruf einer Entität nach Schlüssel, auch "Suche nach Schlüssel" genannt, bietet Strong Consistency.

Cloud Datastore-Leserichtlinien festlegen

Sie können die Leserichtlinien für Cloud Datastore so festlegen, dass alle Lesevorgänge und Abfragen mit Eventual Consistency ausgeführt werden, um die Leistung zu verbessern. (Mit der API können Sie auch explizit eine Strong-Consistency-Richtlinie festlegen. Diese Einstellung hat jedoch keine praktischen Auswirkungen, weil Nicht-Ancestor-Abfragen ungeachtet der Richtlinie immer mit Eventual Consistency ausgeführt werden.)

Sie können auch ein Zeitlimit für den Aufruf von Cloud Datastore festlegen, also die maximale Zeit in Sekunden, die eine Anwendung darauf wartet, dass Cloud Datastore ein Ergebnis liefert, bevor der Vorgang mit einem Fehler abgebrochen wird. Das Zeitlimit beträgt normalerweise 60 Sekunden. Höhere Werte sind derzeit nicht möglich. Sie können das Limit jedoch verkürzen und so dafür sorgen, dass ein bestimmter Vorgang schnell fehlschlägt (z. B. damit der Nutzer eine schnellere Antwort erhält).

Wenn Sie die Leserichtlinien und das Zeitlimit für den Aufruf von Cloud Datastore in Python festlegen möchten, übergeben Sie diese Werte als Argumente an die Methoden run(), get(), fetch() und count() der Klasse Query oder GqlQuery. Beispiel:

for result in Employee.all().run(limit=5,
                                 read_policy=db.EVENTUAL_CONSISTENCY,
                                 deadline=5):
  # Body of iterative loop

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

App Engine-Standardumgebung für Python 2