【发布时间】:2017-01-21 18:27:21
【问题描述】:
我正在使用csv-to-json,这是一个处理 CSV 文件的简洁库。
我有一个用例,我需要处理一个大型(>200 万行)CSV 并将其插入数据库。
为了在不遇到内存问题的情况下执行此操作,我打算将 CSV 作为流处理,每 10000 行暂停一次流,将行插入我的数据库中,然后恢复流。
由于某种原因,我似乎无法pause 流。
以下面的代码为例:
const rs = fs.createReadStream("./foo.csv");
rs.pause();
let count = 0;
csv()
.fromStream(rs)
.on("json", (json) => {
count++;
console.log(count);
})
.on("done", () => {
cb(null, count);
})
.on("error", (err) => {
cb(err);
})
count 被记录了 200 次(这是我的 CSV 中有多少行) - 我希望它不会记录任何内容,因为流在传递给 fromStream() 之前已暂停
【问题讨论】:
-
您在数据库中一次插入一行?为什么不创建一个队列并限制同时执行的请求或使用一些异步方法来防止内存泄漏并避免刷新请求?
-
@AsifSaeed 除了暂停流或有关这是否可行的信息之外,我对其他任何事情都不感兴趣 - 无论如何谢谢