リレーショナルデータベースに保存されているテキストドキュメントの大規模な(300〜500k)コレクションがあるとします。各ドキュメントは、1つ以上(最大6つ)のカテゴリに属することができます。StumbleUponの動作のように、単一のエンティティが繰り返されないように、ユーザーが特定のカテゴリのドキュメントをランダムに選択できるようにする必要があります。
大量のユーザーとドキュメントを使用する低速のNOTINクエリを使用してこれを実装する方法が実際にはわかりません。そのため、この目的のためにカスタムデータ構造を実装する必要があるかもしれないと考えました。おそらく、私のニーズに適応する可能性のあるいくつかのアルゴリズムを説明する論文がすでにありますか?
現在、私は次のアプローチを検討しています。
- データベースからすべてのエントリを読み取ります
- このカテゴリに属するドキュメントのIDから、カテゴリごとにリンクリストベースのインデックスを作成します。シャッフルする
- 特定のユーザーが表示したすべてのエントリを含むブルームフィルターを作成します
- イテレータを使用してインデックスをトラバースし、ブルームフィルタを使用してアイテムをランダムに選択し、表示されていないアイテムを選択します。