database – 分布式LSH(局部敏感散列)

我想使用LSH构建一个包含数百万个高维向量的大型可扩展数据库.由于我必须在ram中保存所有数据以进行快速查询,因此必须将数据分发到多个服务器上以保存所有对象.

一种天真的方法是将所有对象传播到不同的服务器并向每个服务器发送一个查询.具有最佳答案的服务器具有正确的对象.

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

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

谢谢你的任何提示.

最佳答案 首先,您要考虑访问数据的密钥.您想要哈希的是这些键 – 如果您知道要访问的确切键,则可以对它们进行哈希以确定要查询的服务器 – 从而无需查询每个服务器.

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

恕我直言,一切都取决于你的LSH功能 – 选择取决于你的应用程序的具体情况.

点赞