我构建了存储数百万个浮点向量的应用程序,每个向量都有~100维。使用查询向量,我需要在这些向量中搜索k个最近(欧几里德)匹配。运行时间必须比扫描数百万个向量更快。通过" vector"我的意思是在线性代数项中包含约100个浮点数的列表,即[0.3, -15.7, 0.004, 457.1, ...]
我知道像MySQL和MongoDB这样的数据库提供了适用于2维的空间索引。有没有办法使用复合索引将其适应更多维度?或者在更多维度上是否有其他数据存储支持索引?
答案 0 :(得分:3)
如果您正在寻找完全匹配,那么100个尺寸就很多了。如果您准备接受近似匹配,则有一类Locality-Sensitive-Hashing方案。您可以为数据集生成散列值或一系列散列值,并使用普通数据库或2-d空间数据库根据散列值查找匹配项。一个参考是http://people.csail.mit.edu/indyk/p117-andoni.pdf。
答案 1 :(得分:1)
postgresql。它支持您想要的任意数量的维度。默认大小为100.可以在安装期间在cubedata.h文件中更改。 postgres中的cube操作符已经实现了快速查询的r树。
答案 2 :(得分:0)
我可以与你的痛苦联系起来。 MongoDB中没有R-Tree类型的实现,我不确定SQL DB中是否有一个。我发现以下链接很有用: