同じ種類のエンティティを操作するビューがたくさんあります:
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=なし、y=なし)
- view2 はユーザー エンティティ データ全体を読み取ります (x=なし、y=なし)
- view1
user.x = 1
(x=1, y=なし) - view2
user.y = 2
(x=なし、y=2) - view1
user.put()
(x=1, y=なし) - view2
user.put()
(x=なし、y=2)
これを修正する最善の方法と、最も適切と見なされる動作は何ですか? トランザクション (リクエストの 1 つが失敗しそうですが、大丈夫ですか)?