Saltar al contenido

Cómo hacer una inserción masiva usando Sequelize y node.js

Agradecemos tu apoyo para extender nuestros tutoriales referente a las ciencias de la computación.

Solución:

Puede utilizar la función integrada de Sequelize bulkCreate método para lograrlo.

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
)

Secuela | Creación y actualización masiva

utilicé el cargo utilidad de la biblioteca asíncrona para cargar hasta 1000 filas a la vez. Consulte el siguiente código para cargar un csv en una base de datos:

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

Si realmente desea usar bulkInsert, mi respuesta anterior es suficiente. Sin embargo, ¡se quedará sin memoria si tiene muchos datos! Realmente es mejor usar algún método de base de datos integrado que sea mejor para esto. El problema es que está cargando todos los datos en la memoria hasta que se ejecuta bulkCreate. Si tiene un millón de filas, probablemente se quedará sin memoria antes de que se ejecute. Aún así, si lo pone en cola usando algo como async.cargo, aún estará esperando que el db se comunique con usted mientras los datos consumen toda su memoria de manera asíncrona.

Mi solución fue deshacerme de la secuencia para la carga de datos (al menos hasta que implementen la transmisión o algo así (ver su problema de github #2454)). Terminé creando db-streamer, pero por ahora solo tiene soporte para pg. Querrás ver streamsql para mysql.

Comentarios y valoraciones de la guía

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *