Armazenamento de dados em nuvem: maneiras de evitar condições de corrida
Eu tenho muitas visualizações manipulando entidades do mesmo tipo:
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()
...
Obviamente, isso é propenso a erros devido a possíveis condições de corrida (últimas vitórias):
view1 lê dados completos da entidade do usuário (x = Nenhum, y = Nenhum)view2 lê dados completos da entidade do usuário (x = Nenhum, y = Nenhum)view1user.x = 1
(x = 1, y = Nenhum)view2user.y = 2
(x = Nenhum, y = 2)view1user.put()
(x = 1, y = Nenhum)view2user.put()
(x = Nenhum, y = 2)Quais são as melhores maneiras de corrigir isso e qual comportamento é considerado mais decente? Transações (uma das solicitações falhará, tudo bem)?