【发布时间】:2012-02-08 10:12:19
【问题描述】:
我需要创建一个存储在磁盘上的键值对列表(类似于std::map<std::string, std::string>),可以同时被多个线程访问。可以添加或删除键,可以更改值,键是唯一的。假设整个东西可能无法立即放入内存,因此必须将地图的更新保存到磁盘。
问题是我不确定如何解决这个问题。我了解如何处理多线程问题,但我不确定哪种数据结构适合在磁盘上存储数据。如果我正面解决问题,几乎我能想到的任何东西都会显着改变结构并导致磁盘存储大量覆盖。另一方面,关系数据库和windows注册表处理这个问题,所以必须有办法解决它。
是否有针对这种情况“制作”的数据结构?
还是我只是简单地使用任何传统的数据结构(例如树或跳过列表)并制作某种“内存管理器”(磁盘支持的“堆”)来分配磁盘空间块,根据请求将它们加载到内存中并卸载必要时将它们放到磁盘上?我可以想象如何编写这样的“基于磁盘的堆”,但这种解决方案并不是很优雅,尤其是当您在图片中添加多线程时。
想法?
【问题讨论】: