是否可以强制GAE数据存储的强一致性?
我有这段代码:
#!/usr/bin/env python
Import OS, says
import wsgiref.handlers
import webapp2
from google.appengine.ext import db
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
class guestbook(db.Model):
message = db.StringProperty(required=True)
when = db.DateTimeProperty(auto_now_add=True)
who = db.StringProperty()
class ShowGuestbookPage(webapp2.RequestHandler):
def get(self):
# Read from the Datastore
shouts = db.GqlQuery('SELECT * FROM guestbook ORDER BY when DESC')
values = {'shouts': shouts}
self.response.out.write(template.render('main.html', values))
class MakeGuestbookEntry(webapp2.RequestHandler):
def post(self):
shout = guestbook(message=self.request.get('message'), who=self.request.get('who'))
# Write into the datastore
shout.put()
self.redirect('/')
app = webapp2.WSGIApplication([('/', ShowGuestbookPage),
('/make_entry', MakeGuestbookEntry),
debug=True)
def main():
run_wsgi_app(app)
if __name__ == "__main__":
main()
实现强一致性的最简单方法是什么?
我不明白如何将Google的解释[1]翻译成源代码。
[1] https://developers.google.com/appengine/docs/java/datastore/structuring_for_strong_consistency
感谢您的帮助。
答案 0 :(得分:2)
是的,您可以使用实体组。阅读文档中的优点和缺点。
您还可以定义自己的实体ID并通过id“获取它们”,这始终保证一致。
答案 1 :(得分:1)
获取,放置和删除操作始终非常一致。 Ancestor queries也非常一致。
其余查询不是非常一致,并且没有特殊的配置参数来使它们保持一致。
答案 2 :(得分:1)
为了强制执行强一致性,必须应用两个条件:
然后将使用强一致性来查询所有孩子。
一个很好的解释可以是here