ndb и последовательность: почему происходит такое поведение в запросе без родителя
я делаю некоторую работу с Python и ndb и могуне понимаю почему. Я'Я опубликую случаи и код выше:
models.pyclass 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={})
Эти тесты выполняются в интерактивной консоли и с параметром --high_replication для dev_appserver.py:
Тест 1from 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
Зачем ????? Теперь давайтеs добавить сон (1) перед печатью:
Тест 2from 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')
К, давайПредположим, этоэмулируя время распространения документа на все Googles таблиц, я никогда не буду спать в моем коде, ofc. Теперь давайтеs удалить сон и добавить родителя!
Тест 3from 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')
Теперь, когдасмущает! Просто установите родителя и дайте мне сильную последовательность! Зачем ? И если это требуется для обеспечения строгой согласованности, почему бы не иметь все документы одного и того же родителя при вставке его в хранилище данных по умолчанию? Может я'Я делаю это совершенно неправильно, и есть способ сделать это лучше. Пожалуйста, кто-нибудь, ведите меня!
заранее спасибо