背景:
我最近在 GAE SDK 1.7.3 中更新到 JDO 2.0 / Datanucleus 3.1.1。我有二级缓存到 memcache,我发现当我对子实体执行某些操作时,我在缓存中看到了陈旧的数据。例如,当我从一个集合中删除一些孩子时,稍后再添加新的孩子,然后它会更新数据存储区,但不会更新缓存,因此后续读取会发回陈旧的数据。
无论如何,这是一个单独的问题 - 我的解决方法是将更新放入事务中,以便缓存条目无效并删除(事务不会将更改写入内存缓存)。
这行得通。但是,我有很多无主关系,所以有时我会更新超过 5 个实体组 - 例如,我执行批量标记操作,将整个行负载标记为“完成”。奇怪的是 IT WORKS,尽管它在 Google 文档中明确指出 XG 交易仅限于 5 个实体组。我在这里错过了什么吗?
我还应该提到,我没有明确地为 JDO 启用 XG 事务 - 再次,它似乎工作。日志表明它实际上是在进行交易。
我只是有点困惑。这可能会在未来停止工作吗?JDO 是否以某种方式管理事务的大小?XG 事务是由最新的 JDO 自动管理,还是默认打开?