我需要对数据进行内存中的二维索引。 使用场景:
大量写入-新元素将以大块添加,与读取相比,添加频率非常低。
频繁读取。范围查询(a < x < b AND n < y < m
)应该很快。我没有给出“快速”是什么的任何度量标准,因为它显然取决于许多超出此问题范围的事情。
数据全部在内存中
我已经测试了两个选项:
还有哪些其他选项需要考虑,哪些可以提供最高范围的查询性能?
答案 0 :(得分:0)
正如上面的评论所述,四叉树的速度应该很快,但是在将其除以2时,就数值精度而言,它们有些困难。 R树的构建速度较慢,而且更为复杂。它们确实非常适合磁盘存储,但是您可以在内存中自由调整节点大小,直到达到最佳性能为止。如果可以批量加载,请查看STR-R-Tree(排序-分片-递归),它们构建缓慢,但之后性能最佳。否则,以我的经验,R * Tree(RStarTrees)是最好的。
如果您使用的是Java,也许可以找到我的TinSpin索引集合,则可以尝试多个索引,包括PH树(按位四叉树),该树的构建速度非常快,但也非常好(小)窗口查询。对于大窗口查询(每个窗口1000个或更多结果),Rtree可能更好。