我已经实现了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
,为什么会多次发出这个?
我已经尝试过一些数据存储/持久性管理器设置,但没有一个帮助:(
有什么想法吗?
答案 0 :(得分:0)
您可能会看到密钥被分组并且查询正在异步执行。你要查询多少把钥匙?