【发布时间】:2016-04-08 16:40:54
【问题描述】:
在recent SO question 中,我概述了在处理大量包含数百万条记录的 csv 文件时遇到的 OOM 情况。
我对问题的研究越多,对 Node.js 的阅读越多,我就越确信 OOM 不是因为内存泄漏而发生,而是因为我没有限制数据输入进入系统。
代码只是盲目地吸入所有数据,为每一行创建一个回调事件。事件不断被添加到主事件循环中,最终变得如此之大以致耗尽所有可用内存。
Node 处理这种情况的惯用模式是什么?我是否应该将读取 csv 文件绑定到某种阻塞队列,一旦填满,会阻止文件读取器解析更多数据?有没有处理大型数据集的好例子?
更新:换句话说,Node 处理输入的速度比处理输出的速度要快,并且 slack 存储在内存中(作为事件队列的事件排队)。因为有很多松弛,内存最终会耗尽。所以问题是:将输入限制为输出速率的惯用方法是什么?
【问题讨论】:
-
如果我的回答没有提供足够的细节,分享一些示例代码将帮助我做一个更具体的例子。
-
代码链接在第一句话中。谢谢。
-
我的错误,我习惯于在被问到的问题中看到相关代码。我会尽快更新我的答案。
标签: javascript node.js