我正在使用 Python 和 ndb 做一些工作,但不明白为什么。我将发布上面的案例和代码:
模型.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={})
这些测试在交互式控制台和 dev_appserver.py 的 --high_replication 选项中运行:
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
为什么 ?????现在,让我们在打印之前添加一个 sleep(1) :
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,假设它正在模拟将文档传播到所有 Google 表的时间,我永远不会在我的代码中添加睡眠,ofc。现在,让我们删除睡眠并添加父级!
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')
现在这很令人困惑!就设置一个parent,给我强一致性吧!为什么 ?
如果需要提供强一致性,为什么默认情况下在将其插入数据存储中时不让所有文档具有相同的父级?
也许我做得完全错误,并且有一种方法可以做得更好。请有人指导我!
提前致谢