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

标签 c++ algorithm map

我需要制作一个存储在磁盘上的键值对列表(类似于 std::map<std::string, std::string> ),可以同时被多个线程访问。可以添加或删除键,可以更改值,键是唯一的。假设整个事情可能无法立即放入内存中,因此必须将对 map 的更新保存到磁盘中。

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

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

想法?

最佳答案

为您的场景“制作”的数据结构是B-tree或其变体,如 B+ tree .

关于c++ - 磁盘上文件备份的键值对列表/映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829712/

相关文章:

c++ - 为什么这个程序总是崩溃

c++ - 打印转义字符

c++ - 如何生成恰好有七个因数的数?

java - Java可以使用String作为索引数组键吗? (例如 : array ["a"]=1;)

c++ - C++ map 访问的段错误

C++多态概念

c++ - 混合 setStyleSheet 和 setFont : wrong background

java - 查找字符串中出现的子字符串

c++ - 计算二进制模式的子集

c++ - 如何找到 2 张 map 中所有常见的键?