Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Sequelize将JSON文件中的大数据导入MYSQL数据库_Javascript_Node.js_Json_Sequelize.js - Fatal编程技术网

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代码来实现同样的功能。虽然它适用于小数据集,但当我对大文件(包含数百万条记录)运行它时,它不起作用,我看到的错误与此类似

  • javascript内存不足,然后我使用这个节点运行--max old space size=4096 importRecords.js然后出现第二个错误
  • 未处理的拒绝SequelizeConnectionAcquireTimeoutError:操作超时 在pool.acquire.catch.error(F:\demo sequelize\node\u modules\sequelize\lib\dialogs\abstract\connection manager.js:282:52)
  • 有谁能建议我如何通过

    1。最短时间可能是使用异步执行

    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
      }
    ]