繁体   English   中英

如何使用Sequelize和node.js进行批量插入

[英]How to do Bulk insert using Sequelize and node.js

js + sequelize使用JSON插入280K行数据。 JSON是一个280K的数组。 有没有办法在块中进行批量插入。 我发现更新数据需要花费大量时间。 当我试图将数据减少到40K行时,它可以快速工作。 我采取了正确的方法。 请指教。 我使用postgresql作为后端。

PNs.bulkCreate(JSON_Small)
        .catch(function(err) {
            console.log('Error ' + err);
        })
        .finally(function(err) {
            console.log('FINISHED  + ' \n +++++++ \n');

        });

我利用异步库的cargo实用程序一次最多加载1000行。 请参阅以下代码以将csv加载到数据库中:

var fs = require('fs'),
    async = require('async'),
    csv = require('csv');

var input = fs.createReadStream(filename);
var parser = csv.parse({
  columns: true,
  relax: true
});
var inserter = async.cargo(function(tasks, inserterCallback) {
    model.bulkCreate(tasks).then(function() {
        inserterCallback(); 
      }
    );
  },
  1000
);
parser.on('readable', function () {
  while(line = parser.read()) {
    inserter.push(line);
  }
});
parser.on('end', function (count) {
  inserter.drain = function() {
    doneLoadingCallback();
  }
});
input.pipe(parser);

您可以使用Sequelize内置的bulkCreate方法来实现此目的。

User.bulkCreate([
  { username: 'barfooz', isAdmin: true },
  { username: 'foo', isAdmin: true },
  { username: 'bar', isAdmin: false }
]).then(() => { // Notice: There are no arguments here, as of right now you'll have to...
  return User.findAll();
}).then(users => {
  console.log(users) // ... in order to get the array of user objects
})

Sequelize | 批量创建和更新

如果你真的想使用bulkInsert,那么我以前的答案就足够了。 但是,如果你有大量数据,你将耗尽内存! 它最好是使用一些内置的数据库方法,最好是这个。 问题是您将所有数据加载到内存中,直到执行bulkCreate。 如果你有一百万行,你甚至可能会在执行之前耗尽内存。 即便如此,如果你使用像async.cargo之类的东西排队 ,你仍然会等待数据库回复你,而数据异步消耗你所有的内存。

我的解决方案是放弃sequelize以加载数据(至少直到他们实现流式传输或其他东西(参见他们的github问题#2454 ))。 我最终创建了db-streamer ,但它现在只支持pg。 你想看一下mysql的streamsql

以下问题与您需要的答案相同: NodeJS,promises,streams - 处理大型CSV文件

  • 使用流来读取数据并解析它;
  • 使用来自spex的 stream.readsequence方法的组合来读取流并逐个执行查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM