1

Si deux processus modifient la même entité simultanément, mais ne modifient que propriétés différentes, peuvent-elles potentiellement remplacer les modifications apportées par l'autre processus lors de l'appel DatastoreService.put?Question Concurrence GAE Datastore

Processus A:

 
    theSameEntity.setProperty ("foo", "abc"); 
    DatastoreService.put (theSameEntity); 

Processus B:

 
    theSameEntity.setProperty ("bar", 123); 
    DatastoreService.put (theSameEntity); 

Répondre

3

Oui, il est possible ils écrasent les changements de chacun, puisque l'entité entière est envoyée au datastore (serialized using protocol buffers) avec chaque écriture (pas seulement un diff). Vous devrez utiliser transactions si vous voulez éviter cela.

1

Oui, j'ai observé ceci (bien que dans mon cas les demandes concurrentes aient modifié la même propriété).

Je ne pense pas que les transactions aideront parce qu'elles ne verrouillent pas la banque de données qu'elles garantissent, que les opérations dans la transaction verront les mêmes données. Je voudrais savoir si quelqu'un a trouvé une solution à cela.

Questions connexes