我想在可以支持多维搜索的数据库(例如KDTree或RTree)之上构建一个C ++应用程序。启用了R-tree的SQLite仅支持最多5个维度,这比我需要的要小得多。有什么建议吗?
答案 0 :(得分:0)
嗯,这些查询实际上是 sense 吗?欧几里德距离是2D和3D几何数据的合理距离。但即使是“时空”,它确实不有意义。因为1秒与1米完全不同。
首先确定哪种类型的距离合理,然后考虑哪种指数是合适的。根据您的查询,您将需要非常不同的索引。
这里没有“一刀切”。对于一个任务和一个数据集执行良好的索引可能比另一个任务的线性扫描(特别是在高维度)更差。
动态数据和静态数据又是两件完全不同的东西。动态维护一个平衡良好的树很多比使用STR批量加载R-Tree并且仅使用窗口查询查询它更难。这只是几行,一个好的程序员应该能在几天内完成。
您可能想要了解高维数据的问题,例如: this rather balanced article on the "curse of dimensionality"(有很多文章说“你不能索引高维数据”作为未能做到这一点的借口,这个文章至少会给你一些关于你什么时候和什么时候不能的例子)。