快速更新大量数据

时间:2016-05-10 13:27:20

标签: mysql node.js algorithm performance

我在Nodejs中创建了一个应用程序,每分钟调用一个端点并获取一个包含大约100000个元素的json数组。我需要将这些元素插入到我的数据库中,这样如果元素不存在,我将其插入列" Point"值设置为0。

到目前为止,我有一个cron作业和简单的upsert查询。但它太慢了:

 var q = async.queue(function (data, done) {
    db.query('INSERT INTO stat(`user`, `user2`, `point`) '+data.values+' ON DUPLICATE KEY UPDATE point=point+ 10',function (err, result) {
        if (err) throw err;
    });

},100000);

                //Cron job here Every 1 minute execute the lines below:
                var values='' ;
                for (var v=0;v<stats.length;v++) {

                        values = '("JACK","' + stats[v] + '", 0)';
                        q.push({values: values});
                }

我怎样才能在很短的时间内完成这项任务。使用mysql是错误的决定吗?我对任何其他架构或解决方案持开放态度。请注意,我必须每分钟都这样做。

1 个答案:

答案 0 :(得分:0)

我通过使用Bulk Upsert(来自documentation)解决了这个问题!我设法在不到3秒的时间内Upped超过24k行。基本上先创建查询然后运行它:

 INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
 ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);