如何优化循环插入数据库?

您好,我目前正在尝试从XML文件中插入我的MySql数据库中的数据。 我正在使用Sails.js和waterline进行查询。 我的表是用户和宠物,一个用户可以有多个宠物,一个宠物可以有多个用户(所有者),所以我的连接表是users_pets。

-I将XML文件转换为JavaScript对象,并通过循环来插入数据。 我的问题是,我需要循环是asynchronous的,因为我不希望重复logging在宠物表中。 对于每一个迭代,我检查宠物是否存在,如果不是,我创build它,否则我将其ID和插入到插入的用户。 如果不是asynchronous的,在数据​​库中会同时创build多个“findOrCreate”触发器和宠物副本。

我怎样才能优化这个代码? 125用户xml和他们的宠物大约需要85秒,这是巨大的。

XML:

<users> <user> <pets> <pet> </pet> </pets> </user> ... </users> 

码:

 async.eachSeries(users, function(user, callback) { var pets = []; async.eachSeries(user.pets, function(pet, callback) { pets.findOrCreate({name: pet.name}).exec(function (err,userPet) { pets.push(userPet.id); callback(); }); }, function(err){ users.create({name: user.name, pets: pets}) .exec(function(err, created) { callback(); }); }); }, function(err){ ... }); 

在sails.js中,可以将.create()和一个ID数组发送到.find() 。 所以你可以做这样的事情:

 Pet .find(user.pets) .then(function (pets) { return User.create({ name: user.name, pets: pets }); }) .then(function (users) { // done });