2011-09-13 18 views
1

私のApp Engineアプリケーションの1つでは、種類のすべてのエンティティのキ​​ーリストをコンパイルしてリストに入れる必要があります。私はその種のクエリを実行していましたが、スケールはまったくなく、ヒープエラーが発生しています。私はデータセットを更新する際に、この問題を念頭に置いてキーを追加したり削除したりすることを検討しましたが、動作させるにはいくつか問題が発生しました。Google App Engineのシャードリスト

  • アプリエンジンではシャードリストを使用できますか?
  • シャードリストからオブジェクトを削除するよりも、シャードをすべて検索するよりも良い方法はありますか?
  • 種類のすべてのキーを取得するより良い方法はありますか?
+0

提供された情報に基づいてこれを回答することは本当に難しいです。実際に達成しようとしていることを説明できますか?それから、もっと簡単にそれを行う方法を提案することができます。 –

+0

ユーザーは、特定の種類のエンティティのすべてのキーのリストを取得する必要があります。彼らは現在、すべてのキーだけを持つXMLファイルを取得しますが、クエリが非常に遅いため非常に効率的ではありません。 –

+0

そのリストには何が必要ですか?実際にすべてのキーのリストを送信する必要がある場合、すべてのキーを取得する必要性を回避するには、とにかくするつもりはありません。 –

答えて

0

メモリが不足しているということは、キーのみを照会しているか、そのような種類のエンティティが多いことを示唆しています。いずれにしても、一度に表示するにはあまりにも多くのページがある可能性が高いので、何らかの形でページングを行っていると仮定します。

これは、カーソルの理想的な使用例です。クエリを発行し、ある程度のキー(またはエンティティ全体)を読み込み、HTMLでレンダリングし、カーソルのクエリを要求します。カーソルを保存します。ユーザーがページすると、同じクエリを再発行し、保存されたカーソルから開始するように指示します。カーソルはインデックスに依存しないので、すでにクエリから取得したエンティティのいずれかを削除しても問題は解決しません。また、ユーザーが1ページ後に興味を失った場合、キーのリスト全体を読み取るヒットを支払うことはありません。

http://code.google.com/appengine/docs/java/datastore/queries.html#Query_Cursors