問題:
特徴ベクトルの巨大なテーブルがあります。ベクトルの各要素は、2 つの INTEGER で構成されます。次に例を示します。
-------------------------------------------------------------------------------
KEY | VALUE
---------------------------------------------------------------------------------
| f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9
---------------------------------------------------------------------------------
1 | 13 42 | | 546 43| 43 24 | 435 634 | | 45 43| 4 5 | 5 647
2 | 24 32 | 54 35 | | | 3124 32 | 454 3 | 4 5 | 12 1 |
3 | 3 1 | 54 32 | | 43 24 | | 31 2432 | 454 3 | 4 5 | 1 21
---------------------------------------------------------------------------------
一意のキーを持つ約 1,200 万行と約 200 列 (= 400 サブ列) があるとします。ご覧のとおり、要素にその機能がない場合、ランダムな列の値が欠落している可能性があります。
== を実行するカスタムメイドの類似関数 f(vector1, vector2) を使用して、テーブルに対して行 X (テーブルに存在しない) をクエリして、上位 N (N = 10-20 の可能性がある) の最適な一致を検索します。さまざまな列のマッチングのさまざまな重みを考慮して、類似度スコアをチェックして返します。
質問:
NoSQL データベースに関して言えば、これにはどのような実装が最適だと思いますか? リアルタイムでクエリを実行したい。Hadoop で HBase (または Hadoop で MongoDB、どちらが良いでしょうか?) を使用し、MapReduce ジョブを記述してすべての行で類似関数を実行し、結果を取得することを考えています。Hadoop のバッチ処理の主力製品が優れたリアルタイム パフォーマンス (最大 2 秒) を提供してくれるかどうか心配です。私は Lucene の経験があまりありません。ここで役に立ちますか?
これとは別に、テーブル全体の MapReduce スキャンを回避し、何らかの方法で最適化する方法についてのアイデアはありますか?