0

我已经实现了一个 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,为什么会多次发出?

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

有任何想法吗?

4

1 回答 1

0

您可能会看到键被分成组并且查询正在异步执行。您要查询多少个键?

于 2012-06-02T19:12:39.570 回答