Objectifyを使用して、Google App Engineのデータストアからランダムな要素を取得するにはどうすればよいですか?エンティティのすべてのキーを取り出してランダムに選択するか、より良い方法がありますか?Objectifyエンティティからランダムなエントリを取得する
答えて
0と1の間の乱数を、格納するときに各エンティティに割り当てます。ランダムなレコードを取得するには、0と1の間の別の乱数を生成し、ランダムな値を持つ最小のエンティティをクエリします。
すべてを取得する必要はありません。例えば :
- countall =クエリ(X.class).count()// http://groups.google.com/group/objectify-appengine/browse_frm/thread/3678cf34bb15d34d/82298e615691d6c5?lnk=gst&q=count#82298e615691d6c5
- RND =乱数[0..countall]
- ofy.queryを生成し(X.class ).order( " - 日付")。制限(rnd); //例-dateまたは
- 最終idはあなたの...
改善(最初の読み取りが平均50%以下であるといけないので、あなたが50%をfatchかでの平均で)(にあるいくつかの慢性インデックスフィールドのためにキャッシュ内に小さなキーテーブルを持つ)!
まず、すべてのX要素を覚えておいてください。 キャッシュid-sとその位置。次回は、選択したIDからさらに条件を問い合わせます(max ".limit(rnd%X)"はX-1になります)。
100%公平に近い場合、慢性的なフィールド値を推測する必要がない場合はランダムです(たとえば、10日間で1000レコード、ランダム501選択で5日以上の第2要素を選択した場合) 。
慢性フィールドの日付(またはそれに類するもの)がある場合は、ランダムな日付より古い要素を取り込み、次にランダムな日付+1(最初の日付と最後の日付を知る必要があります)の要素を取得します。 2番目はフェッチされたレコード間のランダムを選択します。クエリが空の場合などより大きい...
は客体データストアからいくつかのランダムな要素を選択についてthis postからの引用を選択:
あなたのIDが連続している場合は、一つの方法は、ランダムに5つの 番号を選択することであろう使用中であることが知られているID範囲からのものです。次に、filter()内の "in"のクエリを使用します。
5つのエントリが隣接していても構わない場合は、count()、 limit()、およびoffset()を使用して5つのエントリのブロックをランダムに見つけることができます。
それ以外の場合は、 に一度に1つのエントリをランダムに選択するには、おそらくlimit()とoffset()を使用する必要があります。
- ジョシュ
私はかなりMatejcを提供するアルゴリズムを適応させます。しかし、3つの事:代わりに、カウント()またはデータストアサービス工場(DatastoreServiceFactory.getDatastoreServiceを())を使用しての
、私は私が興味を持ってエンティティの合計数を追跡エンティティを持っていますこのアプローチの理由は次のとおりです。 a。たくさんのオブジェクトを扱うときにcount()が高価になる可能性があります。 b。ローカルにデータストアサービスのファクトリをテストすることはできません... prodでテストするのは悪い習慣です。 。乱数生成
:代わりに上限を()を使用してのThreadLocalRandom.current()nextLong(1、maxRange)
は、私が使用してオフセットので、私はソート」を心配する必要はありません。 "
- 1. データストアから一意のランダムなエントリを取得する方法
- 2. カテゴリに基づいてランダムなエントリを取得する
- 3. Objectifyでキャッシュから古くなったデータを取得するには?
- 4. CRM 4.0からエンティティを取得する
- 5. シーケンシャルコレクションからランダムな要素を取得する
- 6. PHP - 複数のフォルダからランダムな画像を取得する
- 7. XMLからランダムなURLを取得する
- 8. テーブルから3つのランダムなレコードを取得する
- 9. 配列からx個のランダムな要素を取得する
- 10. PHPはデータベースからユニークなランダムな値を取得します
- 11. テーブルからランダムなユニークなレコードを取得します
- 12. ハッシュセットからランダムな要素を取得しますか?
- 13. データベースからランダムな順序でデータを取得します。重複したエントリはありません。
- 14. Cassandra/Pycassa:ランダムな行を取得する
- 15. Doctrineでランダムなレコードを取得する
- 16. Jqueryはテキストエリアからランダムな単語を取得します
- 17. リストからランダムな色を取得します
- 18. エンティティからバンドル名を取得
- 19. Googleアプリケーションエンジンのエンティティからテキストプロパティを取得
- 20. テーブルから正確に6つのランダムなエントリを表示
- 21. Doctrine:名前のテーブルからランダムな名前を取得
- 22. ランダムな間隔でNullPointerExceptionを取得する理由がわからない
- 23. NSMangedObjectサブクラスクラスオブジェクトからのエンティティ名の取得
- 24. ランダムなオブジェクトを作成せずにランダムな値を取得
- 25. rssフィードからランダム投稿を取得する
- 26. oracleデータベースからランダムにレコードを取得する方法は?
- 27. AJAXリクエストからJSONデータを取得してランダムな項目を設定する
- 28. ランダムなフレームをビデオから取得してGIFイメージを作成する - Java
- 29. CoreDataから複数のエンティティを持つデータを取得する
- 30. 配列から反復しない値をランダムに取得する
データを選択する目的のみでインデックスを作成しているようですが、残念なことですが、残念です。私のテーブルはまれにしか更新されないので、私はキーのリストをローカルにキャッシュし、無作為に1つを取得することを考えています(追加のカラム/インデックス/クエリを避ける)。 –