【发布时间】:2023-04-08 00:53:01
【问题描述】:
如果我浏览谷歌应用引擎教程,我可以看到他们的示例似乎鼓励我们为实体设置父级。
因此,我有以下可行的代码,用于创建用户(以电子邮件为唯一)
def parent_key():
return ndb.Key('parent', 'parent')
class User(ndb.Model):
email = ndb.StringProperty(required = True)
timestamp = ndb.DateTimeProperty(required = True)
class RegisterHandler2(webapp2.RequestHandler):
def get(self):
email = self.request.get('email')
user_timestamp = int(time.time())
user = User.get_or_insert(email, parent=parent_key(), email=email, timestamp=datetime.datetime.fromtimestamp(user_timestamp))
注意,parent 实体实际上并不存在。
虽然上面的代码运行得很好,但我想知道如果parent实体在物理上不存在,可能会出现什么问题?
我对没有父母的担忧之一是最终的一致性。写操作后,我希望我的读操作能够获取最新的写入值。我使用User.get_or_insert 来写(和读),User.get_by_id 来只读。
我想在我执行User.get_or_insert 之后,下一个请求User.get_by_id 将返回最新值。我想知道,要实现强一致性,父键是否重要?
【问题讨论】:
标签: google-app-engine google-cloud-datastore app-engine-ndb