2012-07-24 2 views
6

sqlite가 트랜잭션과 관련하여 성능을 삽입하는 데 문제가 있습니다. 내 안드로이드 애플 리케이션은 웹 서비스에서 약 23.000 행을 받고 단일 테이블에 삽입해야합니다.SQLite 인서트가 트랜잭션이있는 경우에도 느려짐

웹 서비스가 분할되어 WS에 대한 모든 요청에서 약 2000 개의 행을 받고 트랜잭션 내에서 2000 개의 삽입을 래핑합니다. 삽입이 완료되면 WS에 새 요청을 보내고 새 2000 행에 대해 새 트랜잭션을 다시 사용합니다.

처음에는 제대로 작동합니다. 초당 많은 삽입 작업을 수행합니다. 그러나 시간이 지남에 따라 속도는 느려지고 23000 행을 완료 할 때까지 초당 4 또는 3 개의 삽입으로 끝납니다.

테이블 크기에 문제가 있습니까? 그것이 커지면 인서트가 느려지는 것입니까? 대용량 데이터의 성능을 향상시킬 수있는 방법이 있습니까?

도움 주셔서 감사합니다.

+3

느려질 수있는 색인이 있습니까? 그리고 매번 한 번에 2000 개를 삽입하고 (매번받은 모든 데이터) 매번 삽입하지 않았습니까? –

+3

이것은 COMMIT가 없을 때 확장되는 트랜잭션 작업 집합처럼 들립니다. – DaveE

+0

글쎄 그것은 모두 당신이 삽입하는 데이터에 따라 달라집니다, 문자열은 귀하의 DB를 느리게합니다. 바이트로 2000 행의 크기는 얼마입니까? 2000 행을 삽입 한 후 DB 파일의 크기 차이는 무엇입니까? 388000 행과 파일 크기가 64M 인 db가 있지만 데이터는 모두 두 배입니다. – JPM

답변

1

매우 좋은 질문 인 How Do I Improve The Performance of SQLite?에 SQLite 성능을 다루는 훌륭한 스레드가 있습니다. 당신이 이미 그것을 사용하지 않는다면 적어도 준비된 진술에 갈 것입니다.

그러나 Android를 사용하는 사용자는 플래시 메모리에 쓰는 일부 I/O 병목 현상을 겪고 있다고 생각합니다. 다른 제조업체의 여러 장치에서 코드를 실행 해 보아도 극단적 인 변형이 있는지 확인하십시오.

0

데이터 파티셔닝을 사용해야합니다. 100-100 삽입을 하나씩 삽입 할 수 있으므로 프로세스가 원활 해지고 데이터 손실 문제가 발생하지 않습니다.

또 다른 한가지는 비동기식 (다른 것일 수도 있음) 스레드를 사용하고 있다고 가정합니다.

또는 마지막 경우 서비스를 사용하여 한 번에 모든 데이터를 소비 할 수도 있습니다.

관련 문제