Google Datastore-Abfragen und eventuelle Konsistenz
Ich möchte mein Verständnis der eventuellen Konsistenz im Google-Datenspeicher bestätigen. Angenommen, ich habe eine Entität wie folgt definiert (mit ndb):
class Record(ndb.Model):
name = ndb.StringProperty()
content = ndb.BlobProperty()
Ich glaube, ich verstehe Szenarien 1, aber ich habe Zweifel an Szenarien 2 und 3, daher wären einige Ratschläge sehr willkommen.
Szenario 1: Ich füge einen neuen Datensatz mit dem Namen "Luca" und einem bestimmten Inhalt ein. Dann frage ich den Datenspeicher ab:
qry = Record.query(name=="Luca")
for r in qry.iter():
logger.info("I got this content: %r" % r.content)
Ich verstehe, dass der gerade eingefügte Datensatz aus Gründen der Konsistenz möglicherweise nicht Teil der Ergebnismenge ist. Ich weiß, wie man Ahnenabfragen verwendet, um dies bei Bedarf zu überwinden.
Szenario 2: Ich lese einen vorhandenen Datensatz mit dem Namen "Luca", aktualisiere den Inhalt und schreibe ihn zurück. Angenommen, ich habe den Schlüssel "k" dieses Datensatzes:
r = k.get()
r.content = "new content"
r.put()
Dann führe ich dieselbe Abfrage wie in Szenario 1 aus. Wenn ich die Ergebnisse erhalte, gehe ich davon aus, dass der Datensatz Teil der Ergebnismenge ist (z. B. weil der Index bereits den Datensatz mit dem Namen "Luca" und dem Schlüssel k enthielt). Bin ich dann garantiert, dass der Feldinhalt seinen neuen Wert "Neuer Inhalt" hat? Mit anderen Worten, wenn ich einen Datensatz aktualisiere und dabei den Schlüssel und die indizierten Felder unberührt lasse, wird mir garantiert, dass ich den neuesten Wert lese?
Szenario 3: Ich mache es ähnlich wie in Szenario 2, wo k der Schlüssel eines Datensatzes mit dem Namen "Luca" ist:
r = k.get()
r.content = "new content"
r.put()
aber dann führe ich eine geänderte Version der Abfrage aus:
qry = Record.query(name=="Luca")
for k in qry.iter(keys_only=True):
r = k.get()
logger.info("I got this content: %r" % r.content)
In diesem Fall sagt mir die Logik, dass ich den neuesten Wert des Inhalts erhalten soll, da das Lesen nach Schlüssel eine starke Konsistenz garantiert. Ich würde mich über eine Bestätigung freuen.