我正在开发一个需要处理大量数据(以 GB 为单位)的应用程序。我在任何时候都不需要一次所有的数据。可以对数据进行分段并仅在任何给定实例的某个部分上工作(从而将其带入内存)。
我读过大多数需要处理大量数据的应用程序,通常是通过使用内存映射文件来实现的。进一步阅读内存映射文件,我发现从内存映射文件读取/写入数据比普通文件 IO 更快,因为我们最终使用高度优化的页面文件算法来执行读写。
以下是我的疑问:
- 使用内存映射文件(我计划使用 boost::file_mapping 并且我正在使用 Windows)进行文件 IO 与使用文件流有何不同?
- 与使用文件流(在传统硬盘 7200 rpm 上)相比,在内存映射文件的情况下,我期望数据读取/写入速度能快多少?
- 内存映射文件是处理如此大量数据的唯一方法吗?有没有更好的方法来做到这一点(考虑到我的用例)?