ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [sqlite3] transaction 이용한 퍼포먼스 향상
    sqlite3 2013. 6. 11. 16:57
    728x90
    반응형

    그냥 보통 방법으로 INSERT와 DELETE등의 쿼리를 반복적으로 수행할때에 sqlite3의 성능은 형편없이 떨어지는데, 이럴때에는 Transaction을 이용해야 한다. 100개의 INSERT에 5초이상 걸리기도 하니 Transaction은 필수적이다.


    int TSqlite::ExecuteMulti(const list<string> &queries)

    {

    // begin

    sqlite3_exec(this->m_db, "BEGIN TRANSACTION;", 0, 0, 0);


    list<string>::const_iterator ils = queries.begin();

    while(ils != queries.end()){

    sqlite3_exec(this->m_db, ils->c_str(), 0, 0, 0);

    ils++;

    }


    // end

    sqlite3_exec(this->m_db, "END TRANSACTION;", 0, 0, 0);


    return sqlite3_total_changes(this->m_db);

    }


    sqlite3 stmt를 사용하지 않고, 간단히 구성해 보았다.  BEGIN - query - END 형식으로, 최종적으로 Effected Rows를 돌려주도록 하였다. 

    테스트로 INSERT 600개를 연속으로 보냈을때에, 실행시간은 약 5초-> 0.05초로 백배 이상 빨라졌다. 

Designed by Tistory.