2011-05-26 22 views
3

我想優化從Google的數據存儲中讀取對象的代碼。使用Java和JDO,這裏是我的代碼:減少datastore_v3.獲取對象(java)時可能會在Google App Engine中調用下一個調用嗎?

List<Article> articles = (List<Article>) query.execute(articleId); 
List<Article> detatchedArticles = (List<Article>) pm.detachCopyAll(articles); 

當我看着將Appstats日誌,這會導致:

datastore_v3.RunQuery 11ms (195ms api) 
datastore_v3.Next 15ms (183ms api) 
datastore_v3.Next 11ms (183ms api) 
datastore_v3.Next 4ms (183ms api) 

所以,我的問題是;我可以以某種方式調整(JDO設置,其他設置)每個datastore_v2.Next從數據存儲中獲取多少個對象?

我想贏取一些API兆週期。或者,很多,如果我想要的是可能的。

回答

1

如果您還沒有這樣做,我會建議使用memcache。根據你的實體,你可以簡單地在jdoconfig.xml中啓用它。這裏有一個簡短的說明:http://ukena.de/content/enabling-jdo-caching-google-app-engine。請注意,如果您正在使用嵌入式實體,則由於GAE的JDO實現中存在一些錯誤,您將不得不手動處理memcache。

+0

當我到達辦公室時,我開始編寫自己的memcache實現,因此當我閱讀您的答案時,我的實體已準備好序列化。如您所描述的那樣啓用memcache會產生巨大影響,並且應用程序運行良好。現在有更多的RPC,但每個memcache.Get(其工作而不是datastore_v3.Next)只需要2ms。如果需要的話,也許還有一些空間可供稍後調整。非常感謝,這節省了錢! – Wrench 2011-05-30 09:13:25

+0

太棒了!很高興我能幫上忙。 :) – Stefan 2011-05-30 09:29:19

+0

一個問題,雖然,你知道1.1.1版本的datanucleus緩存是GAE最好的還是最新的?有些不確定他們的版本和GAE使用什麼。 – Wrench 2011-05-31 20:38:43

相關問題