由磁盘上的文件备份的键 - 值对的列表/映射

时间:2012-01-12 03:23:30

标签: c++ algorithm map

我需要列出存储在磁盘上的键值对(类似于std::map<std::string, std::string>),可以同时由多个线程访问。可以添加或删除键,可以更改值,键是唯一的。据说整个事情可能不会立即适合内存,因此必须将对地图的更新保存到磁盘。

问题在于我不确定如何解决这个问题。我理解如何处理多线程问题,但我不确定哪种数据结构适合在磁盘上存储数据。如果我直接解决问题,我能想到的几乎所有东西都可以大大改变结构并导致大量覆盖磁盘存储。另一方面,关系数据库和Windows注册表处理这个问题,因此必须有一种方法来处理它。

是否存在针对此类情况“制作”的数据结构? 或者我只是使用任何传统的数据结构(例如树或跳过列表)并制作某种“内存管理器”(磁盘支持的“堆”),它分配磁盘空间块,根据请求将它们加载到内存中并卸载必要时将它们放到磁盘上?我可以想象如何编写这样的“基于磁盘的堆”,但是这个解决方案不是很优雅,特别是当你为图片添加多线程时。

想法?

3 个答案:

答案 0 :(得分:1)

它的长短:一旦你把东西写到磁盘上,你就不再处理“数据结构” - 你正在处理“序列化”和“数据库”。

C ++ STL及其数据结构并没有真正解决这些问题,但幸运的是,已经有成千上万的程序员已经成功地解决了这些问题。他们已经写了一些适合你的东西,有99.9%的可能性。

根据您的描述,sqlite听起来对您的应用来说是一个不错的,平衡的选择。

答案 1 :(得分:1)

如果您只需要按键进行查找(以及插入,删除),而不是更复杂的基于字段的查询,BDB可能是您应用程序的更好选择。

答案 2 :(得分:1)

为您的方案“制作”的数据结构是B-tree或其变体,例如B+ tree