Zapytania Google Datastore i ewentualna spójność
Chciałbym potwierdzić moje zrozumienie ewentualnej spójności w magazynie danych Google. Załóżmy, że mam obiekt zdefiniowany w następujący sposób (przy użyciu ndb):
class Record(ndb.Model):
name = ndb.StringProperty()
content = ndb.BlobProperty()
Myślę, że rozumiem Scenariusze 1, ale mam wątpliwości co do Scenariuszy 2 i 3, więc niektóre rady byłyby wysoko cenione.
Scenariusz 1: Wstawiam nowy rekord o nazwie „Luca” i podaną treść. Następnie wysyłam zapytanie do magazynu danych:
qry = Record.query(name=="Luca")
for r in qry.iter():
logger.info("I got this content: %r" % r.content)
Rozumiem, że ze względu na ewentualną spójność właśnie wstawiony rekord może nie być częścią zestawu wyników. Wiem o używaniu zapytań przodków, aby w razie potrzeby przejąć to zadanie.
Scenariusz 2: Czytam istniejący rekord o nazwie „Luca”, aktualizuję zawartość i zapisuję go z powrotem. Na przykład, zakładając, że mam klucz „k” tego rekordu:
r = k.get()
r.content = "new content"
r.put()
Następnie uruchamiam to samo zapytanie, co w scenariuszu 1. Kiedy otrzymuję wyniki, zakładam, że rekord jest częścią zestawu wyników (na przykład, ponieważ indeks zawierał już rekord o nazwie „Luca” i klucz k). Czy mam wtedy gwarancję, że zawartość pola będzie miała nową wartość „nowa treść”? Innymi słowy, jeśli zaktualizuję rekord, pozostawiając tylko jego klucz i indeksowane pola, czy mam gwarancję przeczytania najnowszej wartości?
Scenariusz 3: Robię podobnie do Scenariusza 2, gdzie k jest kluczem rekordu o nazwie „Luca”:
r = k.get()
r.content = "new content"
r.put()
ale potem uruchamiam zmodyfikowaną wersję zapytania:
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)
W tym przypadku logika mówi mi, że powinienem uzyskać najnowszą wartość treści, ponieważ czytanie według klucza gwarantuje dużą spójność. Byłbym wdzięczny za potwierdzenie.