2012-11-26 2 views
4

나는 Stack Overflow에서 here을 비롯한 여러 장소에서 다소 다루었지만 사람들이 사용한 다른 해결책을 찾고 있습니다. 그럼 그걸 염두에두고 ...가장 효율적인 방법으로 5000+ 안드로이드 연락처 삽입

사용자는 처음에는 모든 연락처를 데스크톱 응용 프로그램 OTA와 동기화 할 수있는 응용 프로그램을 개발하고 있습니다. 이 작업은 서버에서 100 개의 연락처 집합을 가져 와서 정보를 다운로드 및 구문 분석하고, 연락처를 Android Contact DB에 삽입하고, 이러한 연락처의 수신을 확인한 후 다음 단계로 이전 단계를 반복하는 웹 서비스 호출을 통해 수행됩니다 동기화가 완료 될 때까지 100 개의 연락처 중 하나를 선택합니다. 이 프로세스는 사용자가 주문이나 1000-2000의 연락처를 가지고있을 때 잘 작동하지만이 애플리케이션의 일반 사용자는 쉽게 5000-6000 개의 연락처를 가질 수 있습니다 (파워 유저가 10000 이상을 보유하고있는 경우). 좋아. 예를 들어 약 5300 개의 연락처 샘플을 완료하는 데 약 13.5 분이 소요될 수 있습니다. 나쁘지는 않지만 가능한 한 동일한 데이터 세트에 대해 약 8 분 실행되는 iOS만큼이나 효율적이어야합니다.

각 단계에 소요되는 시간을 기록했으며, 당연히 병목 현상이 데이터를 Android 계약 DB에 삽입하는 것으로 보입니다. 웹을 수색 한 후에는 수천 개의 연락처를 삽입하는 것과 관련하여 거의 도움이되지 않았지만 발견 한 내용은이 세 그룹에 속하는 것으로 보입니다.

1) ContentProviderOperation - Google에서 내 기준을 제시 한 권장 방법 5300 연락처의 경우 13.5 분.

2) 벌크 삽입물 - builkInsert가 applyBatch보다 더 효율적 인 경향이 있지만이 구현을 시도 할 때 실제로 5300 개의 동일한 연락처에 대해 25 분이 걸렸습니다. 이 사실은 RawContact 정보를 삽입하고 ContentProviderOperation의 backValueReference를 통해 더 자연스럽게 들어오는 bulkInsert에 대한 ContactsContract.Data를 만드는 데 사용하기 위해 결과 URI를 저장해야하기 때문에 발생합니다. 또한 안드로이드 소스 코드를 살펴본 결과 bulkInsert가 대단히 효율적이라는 느낌을받지 못했습니다.

3) DatabaseUtils.InsertHelper 및 트랜잭션을 사용하여 최적화 된 대량 삽입 만들기 - 유감스럽게도 기본 DB에 인스턴스 변수로 액세스해야하기 때문에 자신의 콘텐츠 공급자를 만든 사람들에게 적합합니다. 네이티브 연락처 DB를 사용하여이 작업을 수행하는 방법을 알 수 있습니다.

누구나 5000 시간 이상의 연락처를 삽입하는 데 경험이 있거나 내 시간을 줄이기 위해 조사 할 수있는 다른 가능한 아이디어가 있습니까? 또는 ContentProviderOperation을 최적화 된 것으로 간주해야합니까?

+0

유일한 측정 항목이 "iOS만큼 좋은"경우이 작업 및 다른 작업을 수행하지 못할 수도 있습니다. 각 플랫폼은 최적화가 다르기 때문에 다른 장점이 있습니다. – Tyrsius

+0

1) vs 2) 구현 세부 정보에 많이 의존합니다. 둘 다 많은 작업을 번들로 제공하며 기본 구현은 트랜잭션 대신 단일 작업 만 수행합니다. 무엇이 가장 잘 작동하는지, 공급자 내부 구현을 최적화 할 수는 없다. – zapl

+0

그건 아마도 공정한 응답 일 것이다. 어쩌면 메트릭은 현재 13.5 분보다 빠를 것입니다.나는 오렌지 비교에 약간의 사과가 있다는 것을 충분히 이해하지만 13 분이 지나치게 느린 것처럼 보였다. 특히 사용자가 10000 개 이상의 연락처를 갖는 경우는 드문 일이 아닙니다. – prestona

답변

0

불행히도, 나는 1이 최선의 선택이라고 믿습니다. iPhone과 비교할 때 오버 헤드의 대부분이 콘텐츠 공급 업체 디자인에 내재 한 교차 프로세스 IPC에 있다고 생각됩니다.

3의 분석이 정확합니다.

콘텐츠 제공 업체를 둘러보기위한 루팅 된 기기에는 옵션이 있지만 내가 찾고있는 것은 아닌지 의심 스럽습니다.

관련 문제