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)
哪些解決這個問題的最好方法以及哪種行爲被認爲是最體面的?交易(其中一個要求會失敗,這是好的)?
是,使用事務是解決這類問題的典型方法。 –