【发布时间】:2012-11-13 23:39:24
【问题描述】:
背景:
我最近在 GAE SDK 1.7.3 中更新到 JDO 2.0 / Datanucleus 3.1.1。我有二级缓存到 memcache,我发现当我对子实体执行某些操作时,我在缓存中看到了陈旧的数据。例如,当我从一个集合中删除一些孩子时,稍后再添加新的孩子,然后它会更新数据存储区,但不会更新缓存,因此后续读取会发回陈旧的数据。
无论如何,这是一个单独的问题 - 我的解决方法是将更新放入事务中,以便缓存条目无效并被删除(事务不会将更改写入内存缓存)。
这行得通。但是,我有很多无主关系,所以有时我会更新超过 5 个实体组 - 例如,我执行批量标记操作,将整个行负载标记为“完成”。奇怪的是 IT WORKS,尽管它在 Google 文档中明确表示 XG 交易仅限于 5 个实体组。我在这里遗漏了什么吗?
我还应该提到,我没有明确地为 JDO 启用 XG 事务 - 再次,它似乎工作。日志表明它实际上是在进行交易。
我只是有点困惑。这有可能在未来停止工作吗? JDO 是否以某种方式管理事务的大小? XG 事务是由最新的 JDO 自动管理,还是默认开启?
【问题讨论】:
-
GAE 插件不对 XG 交易进行“自动管理”;那是你来控制的。所有人都在code.google.com/p/datanucleus-appengine/source/browse/…
-
感谢@DataNucleus。然后我对它是如何工作的感到困惑。
标签: java google-app-engine jdo datanucleus