クエリを実行していて、現在 1400 件の結果が返されているため、ログ ファイルに次の警告が表示されます。
com.google.appengine.api.datastore.QueryResultsSourceImpl logChunkSizeWarning: このクエリには FetchOptions で設定されたチャンク サイズがなく、1000 を超える結果が返されました。このサイズの結果セットがこのクエリで一般的である場合は、チャンク サイズを設定してパフォーマンスを向上させることを検討してください。
これを実際に実装する方法についての例はどこにも見つかりません。Pythonについてここに質問がありますが、Javaを使用していてPythonを理解していないため、翻訳に苦労しています。
また、このクエリ (以下) の実行には 17226cpu_ms かかりますが、これは長すぎるように感じます。5000 件の連絡先があり、クライアント側でそれらを検索する必要があるとしたらどうなるか想像できません (googlemail の連絡先のように! )
私が持っているコードは次のとおりです。
int index=0;
int numcontacts=0;
String[][] DetailList;
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
Query query = pm.newQuery(Contact.class, "AdminID == AID");
query.declareParameters("Long AID");
query.setOrdering("Name asc");
List<Contact> Contacts = (List<Contact>) query.execute(AdminID);
numcontacts=Contacts.size();
DetailList=new String[numcontacts][5];
for (Contact contact : Contacts)
{
DetailList[index][0]=contact.getID().toString();
DetailList[index][1]=Encode.EncodeString(contact.getName());
index++;
}
} finally {
pm.close();
}
return (DetailList);
ここで次の2つのエントリを見つけました。
ただし、これらのオプションを実装または使用する方法については、実際には詳しく説明していません。私はそれがサーバー側のプロセスであると推測しており、一度に1つのチャンクを取得するためにある種のループをセットアップすることを意図していると推測していますが、実際にそれを行うにはどうすればよいですか?
- ループ内でクエリを呼び出しますか?
- ループする回数を知るにはどうすればよいですか?
- チャンク サイズよりも少ない数のエントリが返された最初のチャンクをチェックするだけですか?
実際の例に従わずに、このようなものを見つけようとするつもりはありませんか? ここにいる他の人たちは、やり方を「知っている」ように思えます..!
申し訳ありませんが、私が正しい方法で質問をしていない場合、または私がこれについてぼんやりした初心者である場合は、これを理解するために他にどこに頼ればよいかわかりません!