GAE数据存储并发问题

时间:2010-11-28 16:39:17

标签: google-app-engine concurrency google-cloud-datastore

如果两个进程同时修改同一个实体,但只修改不同的属性,那么它们是否可能会在调用DatastoreService.put时覆盖其他进程所做的更改?

流程A:

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

流程B:

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

2 个答案:

答案 0 :(得分:3)

是的,它们可能会覆盖彼此的更改,因为每次写入(而不仅仅是差异)都会将整个实体发送到数据存储区(serialized using protocol buffers)。

如果你想避免这种情况,你需要使用transactions

答案 1 :(得分:1)

是的,我观察到了这一点(尽管在我的例子中,并发请求修改了相同的属性)。

我不认为事务会有所帮助,因为它们不会锁定它们保证的数据存储区,事务中的操作将看到相同的数据。我想知道是否有人找到了解决方案。