2016-05-10 6 views
2

私はNodejsで1分ごとにエンドポイントを呼び出し、約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

Bulk Upsert(documentation)を使用してこの問題を解決しました!私はUpsertに3秒未満で24k行以上を管理しました。基本的にクエリを作成してから実行しました:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 
関連する問題