gpt4 book ai didi

javascript - 在 NodeJS 中写入文件时内存不足

转载 作者:搜寻专家 更新时间:2023-10-31 23:26:41 24 4
gpt4 key购买 nike

我正在处理大量数据,我正在处理这些数据并将其存储在一个文件中。我遍历数据集,然后我想将它全部存储在一个 JSON 文件中。

我最初使用 fs 的方法,将其全部存储在一个对象中然后转储它,但由于内存不足而无法正常工作,而且速度变得非常慢。

我现在正在使用 fs.createWriteStream,但据我所知,它仍在将其全部存储在内存中。

我希望数据逐个对象地写入文件,除非有人可以推荐更好的方法。

我的部分代码:

  // Top of the file
var wstream = fs.createWriteStream('mydata.json');
...

// In a loop
let JSONtoWrite = {}
JSONtoWrite[entry.word] = wordData

wstream.write(JSON.stringify(JSONtoWrite))

...
// Outside my loop (when memory is probably maxed out)
wstream.end()

我想我使用的 Streams 有误,有人能告诉我如何将所有这些数据写入文件而不会耗尽内存吗?我在网上找到的每个示例都与读取流有关,但由于我对数据进行的计算,我无法使用可读流。我需要按顺序添加到这个文件。

最佳答案

问题是你不是在等待数据被刷新到文件系统,而是在一个紧密的循环中不断地将新的和新的数据同步地扔到流中。

这是一段应该适合您的伪代码:

    // Top of the file
const wstream = fs.createWriteStream('mydata.json');
// I'm no sure how're you getting the data, let's say you have it all in an object
const entry = {};
const words = Object.keys(entry);

function writeCB(index) {
if (index >= words.length) {
wstream.end()
return;
}

const JSONtoWrite = {};
JSONtoWrite[words[index]] = entry[words[index]];
wstream.write(JSON.stringify(JSONtoWrite), writeCB.bind(index + 1));
}

wstream.write(JSON.stringify(JSONtoWrite), writeCB.bind(0));

关于javascript - 在 NodeJS 中写入文件时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com