ndb und Konsistenz: Warum tritt dieses Verhalten in einer Abfrage ohne übergeordnetes Element auf?

Ich arbeite mit Python und ndb und kann nicht verstehen warum. Ich werde die Fälle und den obigen Code posten:

models.py
class Reference(ndb.Model):
  kind = ndb.StringProperty(required=True)
  created_at = ndb.DateTimeProperty(auto_now_add=True)
  some_id = ndb.StringProperty(indexed=True)
  data = ndb.JsonProperty(default={})

Diese Tests werden in der interaktiven Konsole und der Option --high_replication für dev_appserver.py ausgeführt:

Test 1
from models import Reference
from google.appengine.ext import ndb
import random

some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))

Reference(id=key_id, some_id=some_id, kind='user').put()
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user').get()

# output:
# >> None

Warum ????? Fügen wir nun vor dem Drucken einen Schlaf (1) hinzu:

Test 2
from models import Reference
from google.appengine.ext import ndb
import random
from time import sleep

some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))

Reference(id=key_id, some_id=some_id, kind='user').put()
sleep(1)
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user').get()

# output:
# >> Reference(key=Key('Reference', '99579233467078'), createdAt=datetime.datetime(2013, 1, 31, 16, 24, 46, 383100), data={}, kind=u'user', some_id=u'25000975872388')

K, nehmen wir an, es emuliert die Zeit für die Verteilung des Dokuments auf alle Google-Tabellen. Ich werde meinen Code niemals in den Ruhezustand versetzen. Jetzt entfernen wir den Schlaf und fügen einen Elternteil hinzu!

Test 3
from models import Reference
from google.appengine.ext import ndb
import random
from time import sleep

some_id = str(random.randint(1, 100000000000000))
key_id = str(random.randint(1, 100000000000000))

Reference(id='father', kind='father').put()

Reference(parent=ndb.Key(Reference, 'father'), id=key_id, some_id_id=some_id, kind='user').put()
print Reference.query(Reference.some_id == some_id, Reference.kind == 'user', ancestor=ndb.Key(Reference, 'father')).get()

# output:
# >> Reference(key=Key('Reference', '46174672092602'), createdAt=datetime.datetime(2013, 1, 31, 16, 24, 46, 383100), data={}, kind=u'user', some_id=u'55143106000841')

Das ist verwirrend! Stellen Sie einfach einen Elternteil ein und geben Sie mir starke Übereinstimmung! Warum ? Und wenn dies für eine starke Konsistenz erforderlich ist, warum sollten nicht alle Dokumente beim Einfügen in den Datenspeicher standardmäßig dasselbe übergeordnete Element haben? Vielleicht mache ich es komplett falsch und es gibt einen Weg, es besser zu machen. Bitte, jemand führt mich!

Danke im Voraus

Antworten auf die Frage(1)

Ihre Antwort auf die Frage