在nodejs中处理非常大的文件



我必须读取一个非常大的文件(14GB(,需要逐行处理它,然后需要将该行写入一个单独的文件中。

我最初的计划是用fs.readFileSync读取整个文件,然后用新行将其拆分,然后一次处理一行。但很快我就遇到了一个问题,因为v8的限制,我无法将整个文件读取到内存中,最重要的是,即使我可以,我也会达到我的机器的内存限制。

有什么办法可以解决这个问题?

我可以把文件分割成更小的块,然后这样处理吗?

或者在nodejs中可能有很多处理这种场景的选项。

您可以将大文件作为流逐行读取,而无需将整个文件存储在内存中,如下所示:

const fs = require('fs');
const readline = require('readline');
const rl = readline.createInterface({
input: fs.createReadStream('file.txt'),
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
console.log(line);
});

代码示例取自:如何在Node.js 中逐行读取文件

您可以尝试EventStream形式的新数据流解决方案。这是一个流行的NPM模块,每周下载量超过200万。

请参阅NPM事件流:https://www.npmjs.com/package/event-stream.

你也可以阅读这篇文章:https://itnext.io/using-node-js-to-read-really-really-large-files-pt-1-d2057fe76b33

这也描述了代码剪切后的样子。该流只使用2.55GB文件进行了测试,但您仍然可以尝试实现它

最新更新