【问题标题】:Is there any existing database (preferred embedded ones) supporting large diminutional multi-dimentional search?是否有任何支持大型小型多维搜索的现有数据库(首选嵌入式数据库)?
【发布时间】:2012-01-30 23:07:49
【问题描述】:

我想在可以支持多维搜索的数据库(例如 KDTree 或 RTree)之上构建一个 C++ 应用程序。启用 R-tree 的 SQLite 最多只支持 5 个维度,这比我需要的要小得多。有什么建议吗?

【问题讨论】:

  • 多维搜索是什么意思?在多个字段中搜索单个值?
  • 多维搜索意味着您可以在单个查询中给出不同属性的多个范围。
  • 您想要什么类型的查询?单属性查询?窗口查询?范围查询? kNN 查询? NN-加入?反向 k-NN 查询?
  • 你有多少个维度? kD 和 R-trees 有时无法工作高维数据...

标签: c++ database kdtree r-tree


【解决方案1】:

那么,这些查询真的有意义吗?欧几里得距离是 2D 和 3D 几何数据的合理距离。但即使对于“时空”,它实际上也确实有意义。因为 1 秒与 1 米完全不同。

首先决定哪种距离是合理的,然后再考虑哪种指数是合适的。根据您的查询,您将需要非常不同的索引。

这里没有“一刀切”。对一项任务和一个数据集表现良好的索引可能会比对另一项任务和一个数据集的线性扫描更差 - 特别是在高维时。

动态数据和静态数据又是两个截然不同的东西。与使用 STR 批量加载 R-Tree 并仅使用窗口查询进行查询相比,动态维护平衡良好的树很多。这只是几行代码,一个好的程序员应该可以在几天内完成。

您可能想了解高维数据的问题,例如this rather balanced article on the "curse of dimensionality"(有很多文章说“你不能索引高维数据”作为不这样做的借口,这篇至少给你一些例子,说明什么时候可以,什么时候不能)。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2010-09-18
    • 2018-05-17
    • 2021-11-18
    • 2010-11-03
    相关资源
    最近更新 更多