【发布时间】:2016-08-15 13:12:17
【问题描述】:
我有很多操作相同类型实体的视图:
def view1(request, key):
user = ndb.Key(urlsafe=key).get()
user.x = 1
user.put()
...
def view2(request, key):
user = ndb.Key(urlsafe=key).get()
user.y = 2
user.put()
...
显然,由于可能的竞争条件(最后获胜),这很容易出错:
- view1 读取整个用户实体数据(x=None,y=None)
- view2 读取整个用户实体数据(x=None,y=None)
- view1
user.x = 1(x=1, y=None) - view2
user.y = 2(x=None, y=2) - view1
user.put()(x=1, y=None) - view2
user.put()(x=None, y=2)
解决此问题的最佳方法是什么?什么行为被认为是最体面的?事务(其中一个请求会失败,可以吗)?
【问题讨论】:
-
是的,使用事务是解决此类问题的典型方法。
标签: google-app-engine google-cloud-datastore gae-python27