我想使用LSH建立具有数百万个高维向量的大型可伸缩数据库。由于必须将所有数据保存在ram中才能进行快速查询,因此必须将数据分发到多个服务器上以容纳所有对象。
幼稚的方法是将所有对象散布到不同的服务器,并向每个服务器发送一个查询。正确答案最佳的服务器具有正确的对象。
我确信必须有一些更好的解决方案,其中不必将查询发送到所有服务器节点,并且将相似的对象分组到一台服务器上。
什么是分布式LSH表的好方法?也许那里甚至有一些项目?
感谢您的任何提示。
最佳答案
首先,您要考虑用于访问数据的键。您希望对这些键进行哈希处理-如果您知道要访问的确切键,则可以对它们进行哈希处理以确定要查询的服务器-无需查询每个服务器。
如果您不知道确切的键(我怀疑是您的情况),情况就会变得更加困难-LSH会为您的记录生成总排序-类似的记录可能(但不能保证)具有相同的哈希值。我认为这是例如超平面到原点的法线向量长度的映射...因此,例如,如果搜索相似(但不相同)的超平面到4到5之间的超平面在距原点4个单位到5个单位之间的其他超平面中,一个很好的起点开始寻找。因此,如果此“距原点的距离”是您对位置敏感的哈希函数,则可以使用它对数据进行shard处理,这样做-您可以通过仅搜索具有匹配“与原始LCH的距离。使用这种特定的LCH,其中相似性与哈希线性相关,有可能在仅访问分布式服务器的子集的同时获得确定的结果。并非所有LSH功能都如此。
恕我直言,一切都取决于您的LSH功能-而选择取决于您的应用程序的具体情况。
关于database - 分布式LSH(位置敏感哈希),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4005338/