关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
6年前关门了。
改进这个问题
问题:
我有一个巨大的特征向量表。向量中的每个元素由两个整数组成。举个例子:
-------------------------------------------------------------------------------
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个子列)。如您所见,如果该元素没有该特性,则随机列中的值可能会丢失。
我想根据表查询x行(表中不存在)以找到前n个(n=10-20个可能)最佳匹配,使用一些定制的相似性函数f(vector1,vector2),它将执行==检查并返回一个相似性分数,考虑不同列匹配的不同权重。
问题:
从nosql数据库的Angular 来说,您认为什么样的实现最适合于此?我想进行实时查询。我正在考虑将hbase与hadoop结合使用(或者mongodb与hadoop结合使用,哪一种更好?),并编写一个mapreduce作业,在每一行上执行相似性函数并获得结果。我很担心hadoop的批处理工作是否能为我提供良好的实时性能(最多2秒)。我对lucene没什么经验-这在这里有用吗?
除此之外,有没有关于如何避免进行全表mapreduce扫描并以某种方式优化它的想法?
1条答案
按热度按时间33qvvth11#
从几个朋友那里得到建议后,我查阅了elasticsearch的文档。似乎这是我的用例的完美工具。它是为这样的搜索/检索需求而构建的,像碎片一样,可以处理巨大的数据。以下是应该做的:
存储文档中的每一行,关键元素是\u id字段和每个f1、f2。。。字段作为不同的字段。可以使用boost字段特性来增加某些字段的相关性(基本上为它们分配更多的权重,基本上不需要使用相似性函数)。这甚至可以在查询时完成,因此允许用户根据用例分配权重。
下面是一个可能适用于此用例的查询示例(未测试):