2016-04-18 13 views
1

Google Datastoreテーブルから大量のデータを読み込みたいとします。パフォーマンスのために、私は並行して、それぞれがたくさんのオブジェクトを読み込むいくつかのクエリを実行したいと思います。カーソルは並列実行には適していません。Google DatastoreでQuerySplitterを使用して既知のサイズのチャンクを読み込む

QuerySplitterです。しかし、のQuerySplitterについては、分割数を教えてください。私が気にしているのは、特定の数のオブジェクトを読み込むことです。この数は、アプリケーションのニーズに合わせて選択されていますが、大きすぎます。各クエリーによって返されるオブジェクトの数が非常におおよそ同じであれば問題ありません。異なるスレッドが異なる時間稼働しているということは悪化しません。

どうすればよいですか?私はそれらを数えるためにすべてのオブジェクトのキーだけを照会し、800で割ることができます。より良い方法がありますか?

+0

種類のすべてのエンティティのクエリ(キーのみ)ではなく、[Datastore Statistics API](https://cloud.google.com/datastore/docs/concepts/stats)を使用して '__Stat_Kind__ ' – tx802

+0

ありがとう!私はそれについて知らなかった、それはおそらく私がテーブル全体をロードするために何をするのだろうか。 しかし、フィルタに基づいてテーブルのデータの一部を読み込むことができるようにしたいと思います。私はそれに応じて質問を編集しました。 あなたのコメントを回答に入れる場合は、私はupvoteと/またはそれを受け入れることができます。 –

答えて

1

すべてのエンティティ(偶数キーのみ)をクエリすることはあまり適切ではないかもしれませんが、定期的にクエリを実行し、ジョブを実行する頻度に応じてデータストアまたはmemcacheにカウントを保存できます。

ただし、特定の種類のエンティティをすべて見つけるには、Datastore Statistics APIを使用することができます。統計情報の更新頻度はわかりませんが、おそらくコンソールの統計情報と同じです。

カウントを頻繁に使用する場合や、フィルタリングされたクエリの数値を使用する場合は、カウンタを分割することを検討してください。おおよその数字だけが必要なので、新しいそれぞれのputで非同期に更新することができます。

+1

今後の参照用:シャーディングカウンターについては、こちらをご覧ください。https://cloud.google.com/appengine/articles/sharding_counters?csw=1 カウント操作についての説明http://stackoverflow.com/questions/421751/whats-the -best-way-to-count-results-in-gql –

関連する問題