AppEngine - JDO - 对批量获取query.execute(...)的单个调用会引发多个datastore_v3.Get调用

时间:2012-06-02 17:39:47

标签: google-app-engine google-cloud-datastore jdo datanucleus

我已经实现了AppEngine Java应用程序。它运行得很好 - 除了我有太多的数据存储区读取操作。

所以我安装了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,为什么会多次发出这个?

我已经尝试过一些数据存储/持久性管理器设置,但没有一个帮助:(

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可能会看到密钥被分组并且查询正在异步执行。你要查询多少把钥匙?