在C ++中读取大于RAM的大数据文件的最佳方法是什么?

时间:2016-03-19 15:54:53

标签: c++ memory-management memory-mapping bigdata

我需要处理比可用RAM大的大数据矩阵文件。例如,矩阵有2500行和100万列,这导致~20 GB。基本上我只需要将数据读入内存,根本不需要写入操作。

我认为memory mapping会起作用。但事实证明,由于RAM会爆炸,效率不高。这是因为操作系统将始终自动将数据(页面)缓存到内存中,直到RAM满为止。之后,就像数据大于RAM的情况一样,会出现页面错误,因此页面输入和页面输出过程本质上是磁盘读/写并降低了速度。

我需要指出的是,我还想随机读取一些数据子集,比如行1000到1500和1000到5000列。

[编辑]

数据文件是一个txt文件,格式很像矩阵。基本上,我需要在大数据矩阵中读取,并逐列与另一个矢量交叉产生。

[结束编辑]

我的问题是:

  1. 是他们的另一种替代方法吗?可以直接阅读chunk-by-chunk更好吗?
  2. 或者是否有一种智能方法可以在内存映射中RAM已满之前以编程方式释放页面缓存?我认为如果我们可以在RAM满了之前从内存中分页数据可能会更好。
  3. 有没有办法逐列读取数据文件?
  4. 非常感谢你!

0 个答案:

没有答案