问题:
我有一个巨大的特征向量表。向量中的每个元素都由两个 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
---------------------------------------------------------------------------------
假设我有大约 1200 万行具有唯一键和大约 200 列(=400 个子列)。如您所见,如果该元素没有该功能,则可能会丢失随机列中的值。
我想使用一些定制的相似度函数 f(vector1, vector2) 来针对表查询行 X(表中不存在)以找到前 N (N = 10-20 可能)最佳匹配项 ==检查并返回考虑不同权重以匹配不同列的相似性分数。
问题:
就 NoSQL 数据库而言,您认为哪种实现最适合?我想进行实时查询。我正在考虑将 HBase 与 Hadoop 一起使用(或 MongoDB 与 Hadoop,哪个更好?)并编写一个 MapReduce 作业以在每一行上执行相似度函数并获得结果。我担心 Hadoop 的批处理主力能否为我提供良好的实时性能(最多 2 秒)。我对 Lucene 没有太多经验 - 这在这里有用吗?
除此之外,关于如何避免进行全表 MapReduce 扫描并以某种方式优化它的任何想法?