是否有可能强制GAE数据存储的强一致性?

时间:2013-10-05 15:45:49

标签: google-app-engine google-cloud-datastore

是否可以强制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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

是的,您可以使用实体组。阅读文档中的优点和缺点。

您还可以定义自己的实体ID并通过id“获取它们”,这始终保证一致。

答案 1 :(得分:1)

获取,放置和删除操作始终非常一致。 Ancestor queries也非常一致。

其余查询不是非常一致,并且没有特殊的配置参数来使它们保持一致。

答案 2 :(得分:1)

为了强制执行强一致性,必须应用两个条件:

  1. db.Model实体必须具有祖先关系
  2. 并且您的查询必须按祖先
  3. 进行过滤

    然后将使用强一致性来查询所有孩子。

    一个很好的解释可以是here

相关问题