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

Uma*_*raa 9 postgresql json node.js sequelize.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');

        });
Run Code Online (Sandbox Code Playgroud)

Eva*_*oky 7

我利用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);
Run Code Online (Sandbox Code Playgroud)


Cle*_*ent 5

您可以使用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
})
Run Code Online (Sandbox Code Playgroud)

续集| 批量创建和更新