2013-02-11 31 views
1

我找C或C++库的桌面应用程序(没有服务器的客户端,只需要编辑存储在磁盘上的数据)的虚拟内存,具有以下特点libspatialindex是否需要重新进行简单更新?

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

。 libspatialindex似乎符合要求。但是有一点从网页不清楚,让我们说,我已经从磁盘加载了大量数据,只想更新一个小对象。 libspatialindex是否将整个数据重新进行了串行化处理并将其写入磁盘,或者只更新需要更改的部分是否明智?

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

有没有其他的替代方案。 GEOS是否有任何智能磁盘映像更新功能?

回答

1

libspatialindex的DiskStorageManager documentation说:

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

...这意味着只要索引条目发生变化就更新数据文件中的相应页面。

这实质上与SQLite数据库类似,只是SQLite文件在崩溃后没有损坏。 (一个SQLite存储管理器似乎是libspatialindex明显延长。)


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

相关问题