【问题标题】:Multidimensional search by combining geospatial indexes通过组合地理空间索引进行多维搜索
【发布时间】:2013-05-05 13:22:09
【问题描述】:

我构建了存储数百万个浮点向量的应用程序,每个向量有大约 100 个维度。使用查询向量,我需要在这些向量中搜索最近的 k 个(欧几里得)匹配。运行时间必须比扫描所有数百万个向量更快。 “向量”是指在线性代数术语中,大约 100 个浮点数的列表,即[0.3, -15.7, 0.004, 457.1, ...]

我知道 MySQL 和 MongoDB 等数据库提供适用于二维的空间索引。有没有办法通过复合索引使其适应更多维度?还是有其他数据存储支持更多维度的索引?

【问题讨论】:

  • 当您说“向量”和“最接近”时,您能准确定义您的意思吗? - 我的理解是向量只是一个方向,因此不适合空间索引。您是否假设所有向量都来自原点,并且“最近”将通过两个给定向量的端点之间的距离来衡量?
  • 我猜在“向量作为元素序列”和“向量作为空间框架中的方向”这两种含义之间,他的真正意思是“向量作为空间框架中的位置”
  • 已澄清问题。如果还不清楚,请告诉我。

标签: database algorithm search vector geospatial


【解决方案1】:

如果您正在寻找精确匹配,100 个维度就很多了。如果您准备接受近似匹配,则有一类局部敏感散列方案。您可以为您的数据集生成一个哈希值或一系列哈希值,并使用普通数据库或二维空间数据库根据哈希值查找匹配项。一个参考是http://people.csail.mit.edu/indyk/p117-andoni.pdf

【讨论】:

    【解决方案2】:

    postgresql。它支持您想要的任意数量的维度。默认大小为 100。这可以在安装期间在 cubedata.h 文件中更改。 postgres 中的多维数据集运算符为快速查询实现了 r 树。

    【讨论】:

    • 请多解释一下,你会如何使用它来解决给定的问题?
    • 一个 100 大小的向量可以存储在 postgres 的单个单元格中。 postgres 有一个欧式距离计算器。因此 OP 可以使用立方体运算符中可用的此功能来执行 knn。为了缩短响应时间,我们可以在此列上创建索引以进行快速查询。
    【解决方案3】:

    我能理解你的痛苦。 MongoDB 中没有 R-Tree 类型的实现,我不确定 SQL DB 中是否有。我发现以下链接很有用:

    http://www.slideshare.net/nknize/mongo-sv-knizefinal

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多