提升:持久存储R树?

问题描述 投票:6回答:1

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

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

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

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

c++ serialization boost boost-geometry
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.