我构建了存储数百万个浮点向量的应用程序,每个向量有大约 100 个维度。使用查询向量,我需要在这些向量中搜索最近的 k 个(欧几里得)匹配。运行时间必须比扫描所有数百万个向量要快。“向量”是指在线性代数术语中,大约 100 个浮点数的列表,即[0.3, -15.7, 0.004, 457.1, ...]
我知道 MySQL 和 MongoDB 等数据库提供适用于二维的空间索引。有没有办法通过复合索引使其适应更多维度?还是有其他数据存储支持更多维度的索引?
我构建了存储数百万个浮点向量的应用程序,每个向量有大约 100 个维度。使用查询向量,我需要在这些向量中搜索最近的 k 个(欧几里得)匹配。运行时间必须比扫描所有数百万个向量要快。“向量”是指在线性代数术语中,大约 100 个浮点数的列表,即[0.3, -15.7, 0.004, 457.1, ...]
我知道 MySQL 和 MongoDB 等数据库提供适用于二维的空间索引。有没有办法通过复合索引使其适应更多维度?还是有其他数据存储支持更多维度的索引?
如果您正在寻找精确匹配,那么 100 个维度就很多了。如果您准备接受近似匹配,则有一类局部敏感散列方案。您可以为您的数据集生成一个哈希值或一系列哈希值,并使用普通数据库或二维空间数据库根据哈希值查找匹配项。一个参考是http://people.csail.mit.edu/indyk/p117-andoni.pdf。
PostgreSQL。它支持您想要的任意数量的维度。默认大小为 100。这可以在安装期间在 cubedata.h 文件中更改。postgres 中的多维数据集运算符为快速查询实现了 r 树。
我可以理解你的痛苦。MongoDB 中没有 R-Tree 类型的实现,我不确定 SQL DB 中是否有。我发现以下链接很有用: