代码之家  ›  专栏  ›  技术社区  ›  Tony the Pony

GAE数据存储并发问题

  •  1
  • Tony the Pony  · 技术社区  · 14 年前

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

    过程A:

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

    过程B:

       theSameEntity.setProperty ("bar", 123);
       DatastoreService.put (theSameEntity);
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   Cameron    14 年前

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

    你需要使用 transactions 如果你想避免这个。

        2
  •  1
  •   Stuart Mitchell    13 年前

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

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