我在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是错误的决定吗?我对任何其他架构或解决方案持开放态度。请注意,我必须每分钟都这样做。
答案 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);