2017-12-14 9 views
1

100kを超えるデータを更新したいが、更新できません。 Sequalizeとmysqlを使用しています。 私は最初に.txtファイルからデータを読み込み、次にテーブルで既に利用可能なデータに対してテーブルデータを更新しています。 Sequalizeを使用していますが、100kレコードを更新するのに1時間以上かかります。 Sequalizeを使用してバルクデータを更新する方法はありますか?Sequelize mysqlを使用してバルクデータを更新

これは私のサンプルコードです:

私は今あなたが行ごとに異なるクエリを実行することを参照してください。

async.each(arrayData, function(_arrayData, _callback) { 
     var connection = index.connection; 
    let query = 'UPDATE debit_tran_reg SET response_status ='+'"'+_arrayData.response_status+'"'+',response_rejection_reason='+'"'+_arrayData.response_rejection_reason+'"'+',umrn_no='+'"'+_arrayData.umrn_no+'"'+'WHERE loan_no ='+'"'+_arrayData.loan_no+'"'+''; 
      connection.query(query).spread((results, metadata) => { 
      console.log("results> "+JSON.stringify(results)); 
      }); 
      _callback(); 
     },function(err){ 
     if(err){ 
      console.log(err); 
     }else{ 
      console.log("*****ALL DATA HAS BEEN PROCESSED*****") 
     } 
    }); 
+1

へのS +を追加します。 – Faz

答えて

0

私は、これらのオプションを試してみるだろう。最初に行うのは、それらをすべて単一のクエリステートメントで収集し、一度だけ実行することです。このような 何か(私はpossibileインジェクションからあなたを守り、クエリビルダを使用します):その後、

var array = [ 
    {id: 1, val:10} 
    {id: 2, val:15} 
]; 

console.log(array.reduce((s,v)=> s+"update table set col1="+v.val+" where id="+v.id+";", "")) 

とはトランザクション内で実行します。

また、トランザクション内でDELETEおよびINSERTを使用して更新操作を「シミュレート」することもできます。一括挿入は、複数の更新よりも速いスピードで行われます。

EDIT:それが助けかどうかを確認し、全体のデータに対するクエリを策定し、複数の個々のクエリとは対照的に、その後、1つのクエリとしてそれを実行してみてください機能を減らす

+0

私は、動的値である_arrayData.response_statusのように、非同期内の複数の値について各レコードを更新しています。 – Nilesh

+0

一括挿入は挿入にはうまくいきますが、動的値である一括レコードを更新したい場合は – Nilesh

+0

ですが、多くの行がある場合は、削除して+更新したものを挿入する価値があると思いますアップデートを「シミュレート」しています)、複数回のアップデートを実行するのではなく、 –

関連する問題