0

我已經實現了一個AppEngine Java應用程序。它運行得很好 - 除了我有太多的數據存儲讀取操作。AppEngine - JDO - 一次調用批處理get querycute(...)會引發多個datastore_v3.Get調用

所以我安裝了appstats工具來分析它。這表明了該單個請求我做在我的代碼的一個觀點:

Query query = persistenceManager.newQuery(Info.class, 
        ":keys.contains(key)"); 
List<Info> storedInfos = (List<Info>) query.execute(keys); 

這一次調用execute(...)結果在多個datastore_v3.Get電話。我得到這個堆棧跟蹤多次:

com.google.appengine.tools.appstats.Recorder:297 makeAsyncCall() 
com.google.apphosting.api.ApiProxy:184 makeAsyncCall() 
com.google.appengine.api.datastore.DatastoreApiHelper:59 makeAsyncCall() 
com.google.appengine.api.datastore.AsyncDatastoreServiceImpl:351 doBatchGetBySize() 
com.google.appengine.api.datastore.AsyncDatastoreServiceImpl:400 doBatchGetByEntityGroups() 
com.google.appengine.api.datastore.AsyncDatastoreServiceImpl:292 get() 
com.google.appengine.api.datastore.DatastoreServiceImpl:87 get() 
com.google.appengine.datanucleus.WrappedDatastoreService:90 get() 
com.google.appengine.datanucleus.query.DatastoreQuery:374 executeBatchGetQuery() 
com.google.appengine.datanucleus.query.DatastoreQuery:278 performExecute() 
com.google.appengine.datanucleus.query.JDOQLQuery:164 performExecute() 
org.datanucleus.store.query.Query:1791 executeQuery() 
org.datanucleus.store.query.Query:1667 executeWithArray() 
org.datanucleus.api.jdo.JDOQuery:243 execute() 
de.goddchen.appengine.app.InfosServlet:78 doPost() 

它甚至稱executeBatchGetQuery所以這是爲什麼多次發出?

我已經嘗試了一些數據存儲/ PersistenceManager的設置,但沒有幫助:(

任何想法?

回答

0

你可能會看到的鍵被分成組,並且查詢是異步執行。多少個鍵你在查詢什麼?

+0

〜100個鍵在〜20個查詢中得到執行,但我該如何控制這種行爲? – Goddchen

相關問題