提升::几何 R*树和分页/延迟加载
Boost::Geometry R*Tree and Paging/Lazy load?
我昨天尝试了 SqLite3 R树虚拟表,以通过 (WGS) 坐标查询获取一个或多个"数据"ID。它工作得非常快!不幸的是,插入/构建r树很慢(土耳其需要半小时)。
发现 Boost::Geometry 库也有一个 R树实现。我关于这个R树的问题是:我可以对这个 r*tree 使用分页或延迟加载吗?我们有大地图,并且只希望在通过对应坐标查询时将 id 加载到 rtree 中。它就像一个数据库,仅在用户请求时才加载页面。
多谢!
亨利
实现支持有状态分配器。 例如,可以将其与 Boost.Interprocess 一起使用,将 rtree 存储在共享内存或映射文件中。
如果您能够实现分配器将节点保存到/从文件加载,并允许在此分配器返回的指针被取消引用时访问数据,那么它将起作用。
但是,在分配器在需要时加载数据块的情况下,这可能并不那么简单。加载和访问数据很简单,但分配者(或管理器)将被迫知道何时不再需要数据,并且目前无法直接获取该信息。可以间接获得它,但在这种情况下没有测试 rtree,所以对您的问题的官方回答是它不受支持。
我计划添加对持久存储的支持,但由于时间不够而没有这样做。如果你有一些想法,想帮忙,等等。我邀请你加入邮件列表。
编辑:
实际上,如果用户明确地通知有状态分配器有关操作完成的信息,例如,在进行插入之后或根据一定数量的已完成插入或查询,则可以完成此操作。分配器仍然可以存储一些使用指标(例如作为取消引用计数器)并进行一些缓存,但它知道如果需要,可以删除一些节点。我想它会类似于ios flush()。在以自上而下的方式处理元素的打包/批量加载的情况下,它仍然无法开箱即用。所以:
persistent_allocator alloc(/*...*/);
bgi::rtree</*...*/> rt(/*...*/, alloc);
// ...
rt.insert(/*...*/);
rt.insert(/*...*/);
rt.insert(/*...*/);
alloc.flush();
- 为什么有些延迟加载 DLL 会立即使用 FFMPEG 卸载?
- 指向临时对象的自定义迭代器(延迟加载)
- 延迟加载加密++密码.dll
- C++插件不能延迟加载dll时
- 延迟加载的 DLL 在内存中彼此相距太远
- 延迟加载opengl32.dll失败,出现Qt5
- 使用延迟加载加载正确的库 - 返回值类型错误
- 延迟加载可以被视为RAII的一个例子吗
- 延迟加载DLL
- 延迟加载DLL时的函数原型
- Xcode 将 dylib 复制到具有延迟加载功能的捆绑包中
- 设计延迟加载
- 在窗口中延迟加载
- 如何在遵守得墨忒耳定律的同时延迟加载
- 提升::几何 R*树和分页/延迟加载
- 延迟加载的 DLL - 我缺少什么
- 如何在Linux中使懒惰/延迟加载工作
- 在Windows XP和CodeBlocks上延迟加载DWMAPI
- c++ unordered_map,有效的延迟加载和value的使用
- 是否有任何链接器标志告诉在打开后延迟加载动态库