Javascript 使用Sequelize将JSON文件中的大数据导入MYSQL数据库
Javascript 使用Sequelize将JSON文件中的大数据导入MYSQL数据库,javascript,node.js,json,sequelize.js,Javascript,Node.js,Json,Sequelize.js,我正在尝试使用Sequelize将数据从JSON文件导入mysql数据库。我编写了以下javascript代码来实现同样的功能。虽然它适用于小数据集,但当我对大文件(包含数百万条记录)运行它时,它不起作用,我看到的错误与此类似 javascript内存不足,然后我使用这个节点运行--max old space size=4096 importRecords.js然后出现第二个错误 未处理的拒绝SequelizeConnectionAcquireTimeoutError:操作超时 在pool.ac
我正在尝试使用Sequelize将数据从JSON文件导入mysql数据库。我编写了以下javascript代码来实现同样的功能。虽然它适用于小数据集,但当我对大文件(包含数百万条记录)运行它时,它不起作用,我看到的错误与此类似
2.以最佳方式在执行时最小化续集日志记录我认为在内存中同步读取这个大文件不是一个好主意。在这类场景中,流媒体是一个更好的选择。有很多软件包可以做这种工作。我将为其中一个例子
流式json
()-
这假设您有以下格式的json:
[
{
"id": 1,
"field": 2
},
{
"id": 2,
"field": 5
}
]
这将为您提供如何与现有解决方案集成的想法。感谢Ashish的回复,我尝试了这个方法,但仍然存在内存不足的问题,然后我使用node--max old space size=4096 importRecords.js运行了它。但这有助于读取文件(读取文件所需的时间更少),这不应该发生。您的文件有多大?文件大小约为290MB。您是否可以将代码放在github上,这样我就可以查看一下,因为290MB什么都不是。一定是其他原因导致了这个问题
const fs = require("fs");
const StreamArray = require('stream-json/streamers/StreamArray');
async function insertRec(row) {
console.log(row);
// code to insert the record
}
async function process() {
return new Promise((resolve, reject) => {
fs.createReadStream('path to json having array')
.pipe(StreamArray.withParser())
.on("data", async row => {
await insertRec(row);
})
.on("error", err => {
reject(err);
})
.on("end", () => {
console.log("CSV file successfully processed");
resolve();
});
});
}
process();
[
{
"id": 1,
"field": 2
},
{
"id": 2,
"field": 5
}
]