0
我有很多的意见操纵相同类型的实体:云存储:如何避免竞争条件
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()
...
显然,这是容易出错,由于可能的竞争条件(最后胜):
- 厂景读取整个用户实体数据(x =无,Y =无)
- 视图2读取整个用户实体数据(x =无,Y =无)
- 厂景
user.x = 1
(X = 1,Y =无) - 视图2
user.y = 2
(X =无,Y = 2) - 厂景
user.put()
(X = 1,Y =无) - 视图2
user.put()
(X =无,Y = 2)
哪些解决这个问题的最好方法以及哪种行为被认为是最体面的?交易(其中一个要求会失败,这是好的)?
是,使用事务是解决这类问题的典型方法。 –