0

AppEngine Java アプリを実装しました。データストアの読み取り操作が多すぎることを除けば、問題なく動作します。

そこで、appstatsそれを分析するツールをインストールしました。単一のリクエストで、コードの1つのポイントで行っていることがわかりました:

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 に答える