提升 :持久存储 R 树

Boost : persistent storage of R-trees?

本文关键字:存储 提升      更新时间:2023-10-16

所以 boost 以 R 树的形式提供了很好的空间索引功能。这很整洁,但是一旦构建了树,似乎还不可能对其进行序列化,我错了吗?

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

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

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

  1. 包装算法和批量装载

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

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

    [5] 洛伊滕格,斯科特·埃金顿、杰弗里·洛佩兹, 马里奥 A. (1997).STR:一种简单有效的R树堆积算法

    [6] 加西亚,伊万·洛佩兹、马里奥·洛伊滕格,斯科特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