1

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

4

1 回答 1

0

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

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

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

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

您可能想阅读高维数据的问题,例如这篇关于“维度诅咒”的相当平衡的文章(有很多文章说“你不能索引高维数据”作为失败的借口要做到这一点,这个至少给你一些例子,说明什么时候可以,什么时候不能)。

于 2012-01-12T22:24:46.947 回答