提升:持久存储R树?

时间:2015-01-14 14:29:53

标签: c++ serialization boost boost-geometry

因此,boost以R-tree的形式提供了良好的空间索引功能。这很整洁,但是一旦它构建完成后它似乎还没有序列化它,我错了吗?

通常的“out_archive<< rtree”语法不起作用,因为rtree没有serialize()成员。在boost 1.57中似乎有一些实验代码,例如/boost/geometry/index/detail/serialization.hpp,但它实际上似乎没有编译!

所以第一个问题:有人知道如何使用boost序列化R树吗?

如果没有,那么我的第二个问题是:您将如何将索引永久存储在磁盘上以避免每次都重建它? (我有一个145M条目的数据集,构建索引需要几个小时,所以我真的不想不止一次构建它!)

1 个答案:

答案 0 :(得分:6)

  1. 包装算法&批量加载

    可以加载包(使用Packing算法)。

      

    此外,还有一些算法可以创建包含一些对象数量的R树。这种技术称为批量加载,通过使用打包算法[5] [6]完成。这种方法更快,并且导致R树具有更好的内部结构。这意味着查询性能会提高。

         

    [5] Leutenegger,Scott T。; Edgington,Jeffrey M。; Lopez,Mario A.(1997)。 STR:一种简单高效的R-Tree打包算法

         

    [6] Garcia,Yvan J。; Lopez,Mario A。; Leutenegger,Scott T.(1997)。用于批量加载R树的贪心算法

    更多详情:http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html

  2. 使用内存映射文件

    您可以将内存映射文件与自定义分配器一起使用。这样你就可以使用你想要的任何表示,它会自动持续

    更多详情:http://www.boost.org/doc/libs/1_57_0/libs/geometry/doc/html/geometry/spatial_indexes/rtree_examples/index_stored_in_mapped_file_using_boost_interprocess.html