복수의 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가 저장되지 않습니다.