在创build或更新数据时,使用100%CPU对Sequelize / mysql进行encryption

我需要更新或创build一个大型数组(1000几个对象)的MySQL表中的数据与sequ​​elize。

当我运行以下代码时,它几乎耗尽了我的数据库服务器(vserver 2gb ram / 2cpu)的所有cpufunction,并堵塞了我的应用程序几分钟,直到完成。

有没有更好的方法来做到这一点sequelize? 这可以在后台完成,或作为批量操作,所以它不会影响我的应用程序性能?

data.forEach(function(item) { var query = { 'itemId': item.id, 'networkId': item.networkId }; db.model.findOne({ where: query }).then(function(storedItem) { try { if(!!storedItem) { storedItem.update(item); } else { db.model.create(item); } } catch(e) { console.log(e); } }); }); 

你的示例代码的第一行data.forEach()...使你的function(item){}的调用一团糟。 这个函数中的代码反过来会引发一连串的asynchronous完成操作。

尝试使用asynchttps://caolan.github.io/async/docs.htm并执行此操作

 async = require('async'); ... async.mapSeries(data, function(item){... 

它应该允许你的函数的每个迭代(在你的data数组中每个元素迭代一次)完成,然后再开始下一个。 矛盾的是,一次只做一个,可能会让他们更快完成。 它肯定会避免吸收你的资源。

几周后,我find了这个的真正原因。 (不幸的是,使用asynchronous并没有真正的帮助)这就像愚蠢一样简单:我没有itemId的MYSQL索引,所以每次迭代整个表被查询导致高CPU负载(显然)。