我在nodejs中有api,用于从mysql数据库读取数据并将其写入csv文件,并在完成写入csv文件后下载文件,所以当我在数据库中有大约170万条记录时,它正在工作,但现在我有大约500万条记录,所以它给我错误 javascript - 堆内存不足我在这里提供了我的 api 代码:
exports.exportdatatocsv = async (req, res) => {
con.query(
"SELECT sender_name, table_name FROM sender_tbl where sender_name ",
function (error, data) {
if (error) {
console.error(error);
res.status(500).send("Internal Server Error");
return;
}
var mysqlData = JSON.parse(JSON.stringify(data));
var workbook = new ExcelJS.stream.xlsx.WorkbookWriter({ stream: res });
mysqlData.forEach((sender, index) => {
var worksheet = workbook.addWorksheet(
sender.sender_name.substring(0, 31)
);
con.query(
`SELECT * FROM ${sender.table_name} ORDER BY id DESC`,
function (error, tableData) {
if (error) {
console.error(error);
res.status(500).send("Internal Server Error");
return;
}
var fileHeader = [
"message",
"info",
"credit/debit",
"amount",
"netbal",
];
worksheet.addRow(fileHeader);
tableData.forEach((row) => {
worksheet.addRow([
row.message,
row.info,
row.isdebit ? "debit" : "credit",
row.amount,
row.netbal,
]);
});
if (index === mysqlData.length - 1) {
workbook
.commit()
.then(function () {
res.status(200).end();
})
.catch(function (err) {
console.error(err);
res
.status(500)
.send("Error occurred while generating Excel file");
});
}
}
);
});
}
);
};
我已经实现了流,但仍然无法工作,而且我对流没有太多了解
2GB,具体取决于 Node 运行时版本。这可能会在运行时导致意外的内存问题。
可以使用传递到 Node 的命令行标志来调整最大内存上限:
node --max-old-space-size=8192 your_script.js // 8192MB = 8GB
如果您想确保所有分叉节点进程都希望使用此设置运行,请使用此
NODE_OPTIONS=--max-old-space-size=4096 node your_script.js //4GB