当前位置: 首页 > 知识库问答 >
问题:

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

酆乐湛
2023-03-14

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

-我将XML文件转换为javascript对象,并循环使用它来插入数据。我的问题是我需要循环是异步的,因为我不希望在pets表中有重复的记录。对于每次迭代,我检查宠物是否存在,如果它不存在,我就创建它,否则我就获取它的ID并将它插入到要插入的用户。如果这不是异步的,则多个“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){
  ...
});

共有1个答案

邢献
2023-03-14

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

Pet
    .find(user.pets)
    .then(function (pets) {
        return User.create({ name: user.name, pets: pets });
    })
    .then(function (users) {
        // done
    });
 类似资料:
  • 有时候你会遇到循环,或者递归函数,它们会花费很长的执行时间,可能是你的产品的瓶颈。在你尝试使循环变得快一点之前,花几分钟考虑是否有可能把它整个移除掉,有没有一个不同的算法?你可以在计算时做一些其他的事情吗?如果你不能找到一个方法去绕开它,你可以优化这个循环了。这是很简单的,move stuff out。最后,这不仅需要智慧而且需要理解每一种语句和表达式的开销。这里是一些建议: 删除浮点运算操作。

  • 问题内容: 我想在循环中将一组数组插入数据库(HANA)中,我的代码如下: 但这是行不通的。我尝试过 不支持此返回方法的Connection创建数组。 我的表架构看起来像 我也希望我的数据类型为整数数组。感谢您的帮助。 问题答案: 这里已经在SO上讨论了“ ARRAY插入HANA”主题。HANA仅支持通过ARRAY()函数存储数组。此函数不将列表作为参数,而仅将单独的元素作为参数。 所以,代替 你

  • 问题内容: 我使用java for循环进行了一些运行时测试,并发现了一种奇怪的行为。对于我的代码,我需要原始类型(例如int,double等)的包装对象来模拟io和输出参数,但这不是重点。只是看我的代码。具有字段访问权限的对象如何比原始类型更快? 优先类型的循环: 结果: MicroTime原语(最大值:= 10000.0):110 MicroTime原语(最大值:= 100000.0):1081

  • 现在我想在文本框中输入一些日期,并在下拉列表中选择一些值。 当我点击它应该得到保存到数据库。 我该怎么做? 这是我的密码 php插入代码:当我点击提交时,这个php代码应该 下拉列表是动态生成的 代码: ui看起来像这样...

  • 我想优化下面的代码。streams会优化下面嵌套的foreach循环吗?如果是这样的话,我是streams的新手,有人能帮我吗?出于项目保密的目的,我在下文中替换了这些名称。应使用tList进行代码中的进一步处理。有人能帮忙吗?

  • 我从复选框中得到了这个数组 PHP查询 我希望插入数组中的数据,而不是在每一行上插入数据。我希望数据以逗号分隔,如data1、data2、data3,然后插入它。