2012-11-13 57 views
1

背景:超過5實體組

我最近更新到JDO 2.0/DataNucleus將3.1.1中GAE SDK 1.7.3。我有第二級緩存去memcache,我發現當我對子實體進行某些操作時,我看到緩存中的陳舊數據。例如,當我從一個集合中刪除一些孩子時,過了一會兒又添加了新的孩子,然後它更新數據存儲,但不更新緩存,所以後面的讀取將發回過時的數據。

無論如何,這是另外一個問題 - 我的解決方法一直把更新的交易,從而使緩存條目被無效和刪除(交易不會更改寫入內存緩存)。

This Works。然而,我有很多無主的關係,所以有時我會更新5個以上的實體組 - 例如,我做了一個批量標記操作,將整行負載標記爲「完成」。奇怪的是IT WORKS,儘管它在Google文檔中明確表示XG交易僅限於5個實體組。我在這裏錯過了什麼嗎?

我還要提到的是我還沒有明確地啓用XG交易的JDO - 再次,它只是似乎工作。日誌表明它實際上正在進行交易。

我只是有點困惑。這可能會在未來停止工作嗎? JDO是否以某種方式管理交易的規模? XG交易是由最新的JDO自動管理的,還是默認開啓?

+0

GAE插件沒有「自動管理」XG事務;這是你要控制的。 http://code.google.com/p/datanucleus-appengine/source/browse/#svn%2Ftrunk%2Fsrc%2Fcom%2Fgoogle%2Fappengine%2Fdatanucleus – DataNucleus

+0

上的所有公開內容感謝@DataNucleus。然後我很困惑這是如何工作的。 – Martin

回答

3

我不知道這是否是一個答案,但我可以告訴你的是,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的父母,這是C的父 - 因此,只有2實體組,即使所有與X的關係都標@Unowned 。

順便說一句,這也意味着你只需要堅持A.

既然你不同意你的對象模型的任何細節,我不能說這是否是喜歡你有什麼什麼...

+0

感謝您的有用信息。我有兩種用戶和鍛鍊。每個用戶都有許多鍛鍊,這是無主的。這是在JDO 1.0中實現的,然後不是@unowned,我只是使用Key對象自己管理它。每個實體都是一個根實體。 – Martin

+0

然後我同意,如果您的鍛鍊密鑰沒有用戶密鑰作爲父項,則它們應該位於單獨的實體組中,並且在嘗試修改事務中的5個以上時失敗。也許可以考慮讓User鍵成爲鍛鍊的父母,如果你擔心鍛鍊實體的數量變得太大,可以閱讀:http:// stackoverflow。COM /問題/ 3342603 /怎麼辦 - 你 - 適當加 - 操縱 - 千位的子女合的實體組 – crazystick