我需要列出存储在磁盘上的键值对(类似于std::map<std::string, std::string>
),可以同时由多个线程访问。可以添加或删除键,可以更改值,键是唯一的。据说整个事情可能不会立即适合内存,因此必须将对地图的更新保存到磁盘。
问题在于我不确定如何解决这个问题。我理解如何处理多线程问题,但我不确定哪种数据结构适合在磁盘上存储数据。如果我直接解决问题,我能想到的几乎所有东西都可以大大改变结构并导致大量覆盖磁盘存储。另一方面,关系数据库和Windows注册表处理这个问题,因此必须有一种方法来处理它。
是否存在针对此类情况“制作”的数据结构? 或者我只是使用任何传统的数据结构(例如树或跳过列表)并制作某种“内存管理器”(磁盘支持的“堆”),它分配磁盘空间块,根据请求将它们加载到内存中并卸载必要时将它们放到磁盘上?我可以想象如何编写这样的“基于磁盘的堆”,但是这个解决方案不是很优雅,特别是当你为图片添加多线程时。
想法?