【问题标题】:Boost : persistent storage of R-trees?Boost:R树的持久存储?
【发布时间】:2015-03-12 18:37:13
【问题描述】:

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

通常的“out_archive

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

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

【问题讨论】:

  • 请参阅stackoverflow.com/questions/13599557/… 了解类似问题。如果我们谈论的是 145M 条目,我认为向基于内存的 R-Trees 实现添加持久性是没有意义的。相反,请使用专为持久存储索引信息而设计的实现。
  • 另一个想法是创建一个虚拟堆(使用磁盘文件作为虚拟存储),并将所有用于分配、访问和释放 R-Tree 项的调用映射到适当的虚拟堆 API .该虚拟内存堆的“交换”文件将成为您的持久索引,并且在运行时,您可以在内存中保存尽可能多的条目,并在内存可用时缓存交换文件。

标签: c++ serialization boost boost-geometry


【解决方案1】:
  1. 打包算法和批量加载

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

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

    [5] Leutenegger, Scott T.;埃丁顿,杰弗里 M.;洛佩兹,马里奥 A. (1997)。 STR:一种简单高效的 R-Tree 打包算法

    [6] 加西亚,伊万 J.;洛佩兹,马里奥 A.; Leutenegger, Scott T. (1997)。一种批量加载 R-tree 的贪心算法

    更多详情: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

【讨论】:

  • 内存映射文件似乎可以满足我的要求,谢谢!生成的文件很大,但它们非常适合压缩,所以没关系。
  • 嘿。看到您无法透明地映射压缩文件,这有点令人困惑。我猜你想保存(多个)离线副本。
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 2013-04-27
相关资源
最近更新 更多