2017-12-14 15 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

여러 개별 쿼리에 반대 하나 개의 쿼리로 실행 후 전체 데이터에 대한 쿼리를 공식화하고 시도의의 +를 추가합니다. – 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를 사용하여 업데이트 작업을 "시뮬레이션"할 수도 있습니다. 일괄 삽입은 여러 업데이트보다 빠른 속도로 소리가납니다.

편집 :이 도움이 경우 참조 감소 기능

+0

동적 값인 _arrayData.response_status와 같은 async 내의 여러 값에 대해 각 레코드를 업데이트합니다. – Nilesh

+0

대량 삽입이 삽입에 적합하지만 동적 값인 대량 레코드를 업데이트하려고합니다. – Nilesh

+0

예, 많은 행이 있다면 삭제 된 값을 + 삽입하는 것이 좋습니다. 기본적으로 업데이트를 "시뮬레이션"하고 있음) 여러 번 업데이트를 실행하는 대신 –