2010-10-23 93 views
4

我想用LSH构建一个具有数百万高维向量的大型可伸缩数据库。由于我必须将所有数据保存在ram中才能进行快速查询,因此必须将数据分布到多个服务器上以保存所有对象。分布式LSH(局部敏感散列)

一个简单的方法是将所有对象分散到不同的服务器,并向每个服务器发送一个查询。具有最佳答案的服务器具有正确的对象。

我确定必须有一些更好的解决方案,查询不必发送到所有服务器节点,并且类似的对象在一台服务器上组合在一起。

什么是分布式LSH表的好方法?也许还有一些项目在那里?

感谢您的任何提示。

+0

我会看看卡桑德拉,自定义分区。 – 2011-08-11 07:56:08

+0

这可能是相关的:Haghani,Michele和​​Arberer在[使用局部敏感哈希的高维分布式相似搜索](http://qid3.mmci.uni-saarland.de/publications/haghani-edbt2009.pdf)。 – 2012-10-02 15:32:39

+0

@ KiptonBarros的链接已经消失,但可以在这里找到本文:https://openproceedings.org/2009/conf/edbt/HaghaniMA09.pdf – duhaime 2017-08-16 13:19:33

回答

2

首先,您要考虑要访问数据的密钥。正是这些键你想要散列 - 并且,如果你知道你想访问的确切键,你可以散列它们来确定要查询哪个服务器 - 消除了查询每个服务器的需要。

如果您不知道确切的密钥(因为我怀疑是您的情况),事情会变得更加困难 - LSH会为您的记录生成一个总订单 - 其中类似记录可能(但不是保证)具有相同记录哈希值。例如,我认为这是超平面与其原点法线向量长度的映射......因此,例如,如果搜索类似(但不相同)的超平面到4到5之间的超平面来自原点的单位,一个开始寻找的好地方就是距离原点4到5个单位的其他超平面。因此,如果这个“起源距离”是你的本地敏感散列函数,那么你可以使用它的数据,并且这样做 - 你可以通过仅搜索具有匹配的“距离起源'LCH。通过这个特定的LCH,其中相似度与哈希线性相关,只有在访问分布式服务器的子集时,才有可能获得确定的结果。所有LSH功能都不是这种情况。

恕我直言,一切都取决于您的LSH功能 - 而且选择取决于您的应用程序的具体情况。