javascript - 使用 Sequelize 将 JSON 文件中的大数据导入到 MYSQL 数据库

标签 javascript node.js json sequelize.js


我正在尝试使用 Sequelize 将数据从 JSON 文件导入到 mysql 数据库。我编写了以下 JavaScript 代码来实现相同的目的。虽然它适用于小数据集,但当我为大文件(包含数百万条记录)运行它时,它不起作用并且我看到的错误是这样的。

  1. javascript 堆内存不足,然后我运行了这个 node --max-old-space-size=4096 importRecords.js 然后我得到了第二个错误
  2. 未处理的拒绝 SequelizeConnectionAcquireTimeoutError:操作超时 在 pool.acquire.catch.error (F:\demo-sequelize\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:282:52)
var Sequelize = require('sequelize');
var JM = require('json-mapper');
const fs = require('fs');

var sequelize = new Sequelize('testdb', 'root', 'root', {
    dialect : 'mysql',
    pool: {
      max: 5,
      min: 0,
      idle: 10000
    },
});

var Profile = sequelize.define('profile', {
  firstName: Sequelize.STRING,
  lastName: Sequelize.STRING,
  email: Sequelize.STRING
});

let rawdata = fs.readFileSync('largeData.json');
let input = JSON.parse(rawdata);

for(let customer of input){
  //console.log(customer.email);

  Profile.sync({force: true}).then(function () {
    // Table created
    return Profile.create({
      firstName: customer.firstName,
      lastName: customer.lastName,
      email: customer.email
    });
  });

}

任何人都可以建议我如何实现这一目标

<强>1。最短时间可能是使用异步执行。
2. 以最佳方式最小化执行时的 Sequelize 日志记录

最佳答案

我认为在内存中同步读取这个大文件不是一个好主意。在这种情况下,流媒体是更好的选择。有许多可用的软件包可以完成此类工作。我将举一个例子。

stream-json ( https://github.com/uhop/stream-json ) - https://github.com/uhop/stream-json/wiki/StreamArray

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();

假设您有以下格式的 json:

[
  {
    "id": 1,
    "field": 2
  },
  {
    "id": 2,
    "field": 5
  }
]

这将使您了解如何与现有解决方案集成。

关于javascript - 使用 Sequelize 将 JSON 文件中的大数据导入到 MYSQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60027118/

相关文章:

javascript - 确认密码自定义指令在 Angular 中不起作用

javascript - 没有匹配时跳出 ReactRouter

node.js - 在 node.js 的 vm 中运行的调试代码

json - 注释未显示在 map 上

ruby-on-rails - 检测 PostgreSQL json 字段的变化

java - 在 Android 中解析复杂的 JSON

javascript - 延迟作业后的回调方法 - 渲染 js 警报

javascript - rails 4 : changing link style upon Ajax call

javascript - "Error: FFMPEG not found": Error with simple Discord Bot

mysql - 带有mysql查询的异步函数不会返回查询结果node.js