如何加快R树构建的过程暨答复debogger

感谢 debogger 在我的文章


RTree.c 最新源代码


评论如下:


cheungmine 同学的源代码确实不错,尤其是线程安全的. 我有500万的MBR, 每次建立R树需要3 分钟, 能不能把建立好的树保存到一个文件,然后下次我好很快的读取, 再次形成原来的树? 就是 serialize R-tree, 然后deserialize R-tre


感谢 debogger 的评论。其实我也考虑过这个问题。但是,序列化和反序列化或称持久化和反持久化,其实从一个二进制格式构建与从源数据构建没有本质的区别。从一个二进制格式构建的优点是快速(这个也存在疑问?),缺点是必须维护这样的数据源。而从源数据从头构建R树的过程,其实不见得慢。关键你的代码怎么写。一个有效的方法是,对源数据进行某种网格化的处理,也就是如果你的数据基于浮点数,那么显然12345.123和12345.321是不同的,如果你认为他们是相同的,那么就是要保留到个位(小数点前面1位)。因此构建R树的时候,采用适当的粒度,而不是直接采用原来的数据,肯定可以加快这个过程(R树的节点大大减少)。但是给定窗口查询的时候,需要在R树搜索之后的结果里再使用逐个比较。总之,我这样做的结果是效率大大提高,不像你说的那样,500万需要3分钟。


另外,你也可以做分区R树。就是把500万分成4份或更多。然后用多核或多线程,这样你要维护4棵树,但是,显然,构建R树的过程会更快。你多想想,多试试。一定可以做的更快,更好。不要纠结于serialize R-tree, 然后deserialize R-tree。

你可能感兴趣的:(多线程,网格)