【问题标题】:Does libspatialindex needs to reserialize for a simple update?libspatialindex 是否需要重新序列化以进行简单更新?
【发布时间】:2013-02-11 18:24:12
【问题描述】:

我正在寻找具有以下功能的桌面应用程序(没有服务器客户端,只需要编辑存储在磁盘中的数据)的 c 或 c++ 库

  • 将空间数据存储在虚拟内存中,因此空间查询速度很快
  • 可以选择以智能方式在磁盘中维护等效数据进行更新。更新不必是即时的,但可以缓冲。

。 libspatialindex 似乎满足要求。但是从网页上看不清楚的一件事是,假设我从磁盘加载了大量数据,只想更新一个很小的对象。 libspatialindex 是重新序列化整个数据并将其写入磁盘还是只更新需要更改的部分是否明智?

带有 RTree 的 sqlite 似乎正在实现这一点。但是,我想要一个简单的 c++ 库而不是整个 sql 的东西。

还有其他选择吗? GEOS 有没有智能磁盘镜像更新功能?

【问题讨论】:

    标签: c++ sqlite spatial-index spatial-query r-tree


    【解决方案1】:

    libspatialindex 的 DiskStorageManager documentation 说:

    磁盘存储管理器使用两个随机访问文件来存储信息。 [...] .idx 文件在初始化期间加载到主内存中,并且仅在刷新存储管理器或在对象销毁期间写入磁盘。 如果发生意外失败,对存储管理器的更改将由于过时的 .idx 文件而丢失。避免此类灾难是未来的工作。

    ...这意味着每当索引条目更改时,数据文件中的相应页面都会更新。

    这本质上类似于 SQLite 数据库,只是 SQLite 文件在崩溃后不会损坏。 (SQLite 存储管理器似乎是 libspatialindex 的一个明显扩展。)


    我建议考虑 SQLite;如果您不喜欢它的 C API,请使用封装它的框架,例如 Qt。

    【讨论】:

      猜你喜欢
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      相关资源
      最近更新 更多