0

我无法找到完全解释从数据存储中删除的实体(我正在使用 JDO deletePersistent)的文档,而无需进行事务处理。当为了性能和避免争用而不使用事务时,我可以承受在并行更新期间失去数据准确性。

但是我如何确保当我的代码同时在不同的机器上运行时,删除操作不会被稍后的更新覆盖/在另一台机器上对该实体进行先前的读取,我让 PersistenceManager 照顾对附加对象的隐式更新。

编辑:尝试在 deletePersistent 之后更新该实体将导致异常,但那是在尝试更新传递给 deletePersistent 的完全相同的副本时。但如果它是另一台机器上的不同副本,将被视为更新已删除实体(无效)或插入或更新导致将该实体放回?

4

2 回答 2

0

这取自 GAE 文档:

使用事务

事务是对一个或多个实体的一组 Datastore 操作。每个事务都保证是原子的,这意味着事务永远不会部分应用。要么应用事务中的所有操作,要么不应用它们。

在以下情况下,操作可能会失败:

太多用户尝试同时修改实体组。应用程序达到资源限制。数据存储遇到内部错误。

由于事务保证是原子的,因此像单个删除操作这样的 ATOMIC 操作将始终在事务内部或外部工作。

于 2012-05-04T15:40:06.747 回答
0

答案是肯定的,即使在对象被删除之后,如果之前读取它并且在提交删除后提交更新,它也会被放回,因为@Nick Johnson 评论插入和更新是相同的。测试了在获取对象进行更新后使用 20 秒线程休眠,允许删除对象然后放回。

于 2012-07-25T13:01:00.670 回答