복수의 data를 insert할 때 속도 향상을 위해서는 다음 method를 이용하면 됩니다.

 

DB.beginTransaction();

DB.setTransactionSuccessful();

DB.endTransaction();

 

제 경우, 특정 파일을 읽어 각 라인을 파싱한 item을 sqlite db에 insert 하는 프로그램을 구현하는 중이었습니다.

 

위의 method를 사용하지 않고 약 500개의 item을 insert할 때 제 갤럭시S에서 로그를 출력해보니 10개당 약 5~6초의 시간이 걸려 전체 500개를 insert하는데 약 5분이상 걸렸었습니다. 만약 thread등의 처리를 하지 않는다면 그 시간동안 먹통 상태가 될 것입니다.

  

(갤럭시S의 경우 memory access 속도 등에 문제가 있어 타 제품보다 db 입출력 속도가 느리다고 하며, 같은 갤럭시S 내에서도 뽑기에 따라서 그 속도가 천차만별이라고 합니다)

 

이 문제를 해결하기 위해서 개발 포럼등을 검색한 결과 위의 method를 사용하면 빨라질 수 있다고 하여 다음과 같이 구현해 보았습니다.

 

DB.beginTransaction();

try {

  while(readline())    // 500번 반복

  {

      parsing();

      insert();

  }

  DB.setTransactionSuccessful();

} finally {

    DB.endTransaction();

}

 

로그를 확인하니 500개가 입력되는데 약 2초!! 가 걸리게 되었습니다.

 

주의할 점은 setTransactionSuccessful()을 호출하기 전에 프로그램이 종료되면, insert()를 호출하였다고 하더라도 data가 저장되지 않습니다.

 

+ Recent posts