gpt4 book ai didi

java - Cross Group (XG) 交易中超过 5 个实体组

转载 作者:行者123 更新时间:2023-11-29 05:52:36 26 4
gpt4 key购买 nike

背景:

我最近在 GAE SDK 1.7.3 中更新到 JDO 2.0/Datanucleus 3.1.1。我有二级缓存到 memcache,我发现当我对子实体执行某些操作时,我在缓存中看到过时的数据。例如,当我从一个集合中删除一些子项时,片刻之后又添加新的,然后它更新数据存储,但不更新缓存,因此后续读取将发回陈旧数据。

无论如何,这是一个单独的问题——我的解决方法是将更新放入事务中,这样缓存条目就会失效并被删除(事务不会将更改写入内存缓存)。

这行得通。但是,我有很多无主关系,所以有时我会更新 5 个以上的实体组 - 例如,我执行批量标记操作,将整个加载的行标记为“完成”。奇怪的是 IT WORKS,尽管它在 Google 文档中明确表示 XG 交易仅限于 5 个实体组。我在这里遗漏了什么吗?

我还应该提到,我没有为 JDO 显式启用 XG 事务 - 同样,它似乎可以工作。日志表明它实际上是在进行交易。

我只是有点困惑。这可能会在未来停止工作吗? JDO 是否以某种方式管理事务的大小? XG 事务是由最新的 JDO 自动管理的,还是默认打开的?

最佳答案

我不确定这是否是一个答案,但我可以告诉您,5 个实体组的限制肯定是强制执行的(或者至少从 SDK 1.7.1 开始是这样),因为我已经与它抗争了很多次。

首先,您确定您的 jdoconfig.xml 中没有以下内容:

<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>

我的模型中也有许多无主关系,我绕过实体组限制的解决方案是将多个对象放在同一个实体组中。基本上我有一些类似的东西:

X -- has a -- A
\- has a -- B
\- has a -- C

但 A 也是 B 的父级,B 是 C 的父级 - 因此只有 2 个实体组,即使与 X 的所有关系都标记为@Unowned。

顺便说一句,这也意味着你只需要坚持A。

因为你没有分享你的对象模型的任何细节,我不能说这是否与你拥有的一样......

关于java - Cross Group (XG) 交易中超过 5 个实体组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com