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');
});
答案 0 :(得分:7)
您可以使用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
})
答案 1 :(得分:4)
我利用异步库的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);
答案 2 :(得分:1)
以下问题与您需要的答案相同: NodeJS, promises, streams - processing large CSV files