我正在处理大量数据,并将其存储在文件中。我遍历数据集,然后将其全部存储在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/