2011-11-11 2 views
1

CoreData에 중복 값이 ​​있는지 빠르게 확인해야합니다. 백그라운드 동기화를 수행하고 있으며 때로는 속임수를 사용하여 시스템에 적용합니다.핵심 데이터의 중복 값을 빠르게 확인하는 방법

은 내가 ManufacturerID과 항목 ID를하고 난, 잘못된 데이터의 예를 모두 중복 값을 가질 수 없습니다 :

ManufacturerID ItemID 
35    IT001 
35    IT001 

그래서 나는 그 일이 있는지 알고 어쩌면 사람들의 목록을 얻으려면 단지 것을 ItemID의, 그때 나는 속은 사람을 제거하는 방법을 알아낼 방법이 필요하지만 이것은 좋은 출발이다.

만약 존재한다면 빠른 방법을 찾아야합니다.

답변

0

내 응용 프로그램에서는 NSoperations를 사용하여 백그라운드에서 동기화를 수행하고 alredy가 저장되지 않은 경우에만 영구 sqlite 저장소에 새 레코드를 저장하는 SynchManager가 있습니다. 는 기본적으로 내가 무엇을 할 것은 :

  1. A가 내가 부르는 저장소에 삽입하기 전에 (내 경우에는이 식별자가 URL을 나타내는 문자열입니다)
  2. 새로운 객체를 저장 ID의 컬렉션을 검색 요청을 가져 오기 실행 "shouldImportObject :"과 같은 메소드는 기본적으로 URL이 데이터베이스에 저장되어 있지 않은지 테스트합니다. 그와

    for (id objectID in ids) { 
        if ([objectID isEqual:objectToImport.objectID]) { 
        return NO; 
        } 
    } 
    
    return YES; 
    
+0

문제는 내가 통과 할 가능성이 50,000 레코드가 있습니다 : 이것은 간단한 구현 샘플입니다. 이론적으로 데이터를 얻을 때 처음에는 중복이 있는지 (이 문제는 내 문제 임) 확인하지 않았고, 그 다음부터는 항목이 있는지 확인하기 위해 가져 오기 요청을하지만 데이터의 초기 가져 오기 속도가 너무 느릴 것입니다. 미친 그리고 많은 디스크 io를 일으킬 것입니다. – Slee

+0

물론 데이터베이스가 비어 있다면 나는 테스트를 사용하지 않습니다! – daveoncode

+0

나는 당신이 방금 나를 위해 빛을 켜 보았다고 생각한다! DOH - 비어 있는지 확인할 수 있습니다 - LOL @ myself – Slee

관련 문제