如果两个进程同时修改同一个实体,但只修改不同的属性,那么它们是否可能会在调用DatastoreService.put
时覆盖其他进程所做的更改?
流程A:
theSameEntity.setProperty ("foo", "abc"); DatastoreService.put (theSameEntity);
流程B:
theSameEntity.setProperty ("bar", 123); DatastoreService.put (theSameEntity);
答案 0 :(得分:3)
是的,它们可能会覆盖彼此的更改,因为每次写入(而不仅仅是差异)都会将整个实体发送到数据存储区(serialized using protocol buffers)。
如果你想避免这种情况,你需要使用transactions。
答案 1 :(得分:1)
是的,我观察到了这一点(尽管在我的例子中,并发请求修改了相同的属性)。
我不认为事务会有所帮助,因为它们不会锁定它们保证的数据存储区,事务中的操作将看到相同的数据。我想知道是否有人找到了解决方案。