2012-11-28 4 views
2

하나의 NSManagedObject 하위 클래스에 있어야하는 속성의 최대 수에 대한 지침이 있는지 알고 싶습니다. 필자는 Apple의 문서를주의 깊게 읽었지만 성능이 저하되기 시작하는 한계에 대해서는 언급하지 않았습니다.핵심 데이터 NSManagedObject : 최대 속성 수?

나는 NSManagedObject에 100 개가 넘는 속성이있을 때 경고를 제공하는 컴파일러 플래그 옵션을 보았지만 아무런 설명서도 찾을 수 없습니다. 여기에 많은 사람들이 많은 수의 속성을 가진 Core Data MO를 가지고있는 경험이 있습니까?

나는 메모리 사용이 아닌 성능에 중점을 둡니다. 내 응용 프로그램에서는 많은 수의 속성을 가진이 MO의 인스턴스가 약 10-20 개만 존재하며 iOS가 아닌 OS X에서 개발 중이므로 메모리 사용량이 중요하지 않습니다. 그러나 퍼포먼스 (특히 오류가 발생했을 때)가 죽기 시작하면, 지금 알고 싶습니다. 따라서 데이터 모델의 구조를 적절하게 변경할 수 있습니다.

감사합니다.

답변

3

Each attribute gets mapped to a table column, SQLite 보조 저장소를 사용하는 경우. SQLite는 사용할 수있는 열의 수에 대해 엄격한 제한을두고 있습니다 (컴파일 시간을 구성 할 수 있기 때문에 기본적으로 2000으로 설정되어 있기 때문에 Apple 구현이 다를 수 있음). they recommend not using more than one hundred. 그래서 Xcode 경고가 임계 값을 100으로 설정하는 이유 일 수 있습니다.

O (N^2) 알고리즘에 O 일반적으로 높은 숫자는 피해야합니다.

다른 파일 형식의 경우 제한이나 권장 사항을 알지 못합니다. 그러나 비슷한 일이 예상됩니다. 즉, O (N^2) 또는 그보다 더 나쁜 알고리즘이있을 수 있으므로 흔히 볼 수있는 끔찍한 사건이되지 않도록해야합니다.

+0

감사합니다. 나는 XML을 지원 저장소로 사용하고 있으므로 SQLite 제한에 대해 걱정할 필요가 없습니다. 이것은 컴파일러 플래그가 존재하는 이유입니다. 이것은 분명 도움이됩니다. ~ 150 속성 이상을 필요로하지 않기 때문에 나는 괜찮을 것이라고 생각합니다. 나는 링크를 주셔서 감사합니다! – Bryan

3

아니요. iOS에서도 실행되었습니다. 성능의 가장 큰 제한 요인은 NSPersistentStoreCoordinator의 캐시 크기이며, Mac OSX에서는 꽤 큽니다.

속성이 문자열, 숫자, 날짜 등 (즉, 바이너리 데이터가 아닌 경우) 성능이 저하되기 전에 많은 수의 속성을 가질 수 있습니다. 만약 당신이 이진 데이터로 작업하고 있다면 나는 캐시를 날려 버리지 않도록주의하고 이진 데이터를 SQLite 외부에 저장하는 것을 고려합니다. 최신 버전의 OS는 자동으로이 작업을 수행 할 수 있습니다.

그러나 나는 왜 이렇게하고 싶은지에 관해 질문 할 것입니다. 분명히 다른 것보다 중요성이 떨어지는 속성이 있으며 일대일 관계의 다른 측면에서 하위 엔티티로 추상화 될 수 있습니까?

관련 문제