[SQL] 싱글 부모 엔터티와 코어 데이터 성능
SQL싱글 부모 엔터티와 코어 데이터 성능
내가 코어 데이터와 함께 작동하는 프레임 워크를 만드는 오전. 당신의 코어 데이터 클래스에 내 프레임 워크를 사용하기위한 요구 사항 중 하나는 프레임 워크의 기능을 갖고 싶어 실체가 당신에게 제공하는 엔티티의 하위 엔티티와 서브 클래스해야한다는 것입니다. 이를 위해서 그 객체 푸를 호출합니다.
오늘은 코어 데이터 테이블이라고 ZFOO에 푸의 하위 엔티티의 모든 개체를 저장 것을 깨달았다. 대규모 데이터 세트를 가진 누군가가 foo는 클래스의 모든 하위 개체가 하나 개의 거대한 ZFOO 테이블에 저장 될 것이기 때문에, 그것을 사용하려는 경우 내가 코어 데이터의 성능에 대해 걱정하고있다.
어떤 의견이나 권고 사항은 높게 평가 될 것이다.
해결법
-
==============================
1.작년에이 같은 일을 한 프로젝트에 일을, 우리는 몇 가지 일반적인 특성을 가지고 하나의 클래스에서 상속 핵심 데이터에 핵심 데이터의 모든 모든 것을 저장됩니다.
작년에이 같은 일을 한 프로젝트에 일을, 우리는 몇 가지 일반적인 특성을 가지고 하나의 클래스에서 상속 핵심 데이터에 핵심 데이터의 모든 모든 것을 저장됩니다.
핵심 데이터의 10K 기록과 성능은 우리가 그것을 다시 썼다 점에 저하와 공통 조상을 제거 - 우리가 1,000 사이 어딘가에 있었다. 나는 간단한 검색 여러 초 및 삽입을 복용 한 기억으로 / 업데이트도 꽤 엉터리였다. 그것은 일을 천천히 고통스럽게 우리가 핵심 데이터를 하나 개의 테이블에 모든 것을 저장하고 내부적으로 개방적이고 눈치 DB에 금이 있음을 먹은 후에 만했다.
미안 특정 번호를 기억하지 않는, 큰 테이크 아웃은 너무 느린 때문에 우리가 그것을 다시했다, 그리고 초기를 채울하려고 할 때 너무 느린 너무 느린 고주파 거래에 대한하지만 너무 느린 같은 응용 프로그램은로드에 추락처럼 코어 데이터 밖으로보기.
그래서,이 나이가 iOS 및 오래된 하드웨어에 있던 것을 소금의 입자로, 나는이 작업을 수행하지 않습니다 확실히 말할 것입니다.
-
==============================
2.나는 아이폰 OS 납이 프로젝트에 @deathbob로했다. 우리의 경우에 나는 속성 "remote_id"와 "remote_update"를 포함 여러 클래스를했다. 나는 처음에 서브 클래스를 사용하여 테이블을 설정합니다. 나는 자신과 그 속성과 그것에서 상속 다른 엔티티의 무리를 각각 포함 된 "RemoteEntity"추상적 인 실체가 있었다. 나는 우리가 그들의 사용자 지정 특성을 remote_id, remote_update있는 테이블 각각의 무리와 끝까지, 그리고 것이라고 생각했다. 대신 우리는 당신이 설명하는 거대한 테이블 끝났다.
나는 아이폰 OS 납이 프로젝트에 @deathbob로했다. 우리의 경우에 나는 속성 "remote_id"와 "remote_update"를 포함 여러 클래스를했다. 나는 처음에 서브 클래스를 사용하여 테이블을 설정합니다. 나는 자신과 그 속성과 그것에서 상속 다른 엔티티의 무리를 각각 포함 된 "RemoteEntity"추상적 인 실체가 있었다. 나는 우리가 그들의 사용자 지정 특성을 remote_id, remote_update있는 테이블 각각의 무리와 끝까지, 그리고 것이라고 생각했다. 대신 우리는 당신이 설명하는 거대한 테이블 끝났다.
수정은 GUI를 통해 상속을 설정해서는 안 아주 간단했다. 대신에 코어 데이터 모델러에서 공유 포함한 해당 객체에 대한 모든 속성 (이 수단 "remote_id"와 "remote_update"각 엔티티에 나타납니다. 그 존재가 우리는 여전히 서브 클래스를 사용할 수있다. 당신의 모델 '클래스를 생성 한 후, 생성을 포함 부모 개체의 클래스입니다. 이것은 GUI에있을 수 없습니다. 그것은 NSManagedObject에서 상속해야하며하는 .m 파일의 속성을 @synthesize 대신 @dynamic 사용해야합니다. 이제 당신이 하위 클래스를 조정하는 시간을 부모 클래스를 가지고 . 대신에 NSManagedObject의 설정 (내 예) RemoteEntity에 부모 클래스. 그리고 (내 예를 들어, "remote_id"와 "remote_update"에서) 수퍼 클래스에서 나타나는 특성을 제거합니다.
여기 내 상위 클래스 https://gist.github.com/1121689의 예입니다.
나는이 모자 끝이 밖을 가리키는 위해 @deathbob하는 데 도움이되기를 바랍니다.
-
==============================
3.돌이켜 보면 멋진 일이다.
돌이켜 보면 멋진 일이다.
사람들은 여전히이 Q & A를 읽고 자신의 질문에 참조하고 아무것도 변경되었습니다 생각하고, 나는 명확성을 위해 몇 가지 설명을 추가하고, "현대"또는 더 최근의 응답을 제공하고 싶습니다.
코어 데이터는 강력한 짐승,하지만 당신은 짐승을 제어하기 위해 배워야하고, 이전에 대답 한 개척자 덕분에 애플이 프레임 워크로 만든 것을 개선, 몇보다 오늘 할 많은 쉽습니다 년 전 (특히 아이폰 OS 5).
처음에 나는 견고하고 강력한 데이터 모델을 준비하는 방법을 배우는 것을 권 해드립니다. 내가 조사를 독자에게 맡겨 있도록이에 엄청난 양의 정보가있다. 이전 답변 언급, 데이터 모델의 모든 관계를 준비하는 법을 배워야하는 것이 중요하다.
그건 그렇고, 당신이 가져 오는 데이터 세트의 크기를 제어하는 메커니즘은 여러 가지가있을 수 있습니다. 그것은 더 좋을 실용적인 책장에서 책보다 나에게 설명하지 않은 - "코어 데이터, 제 2 판, 아이폰 OS, OS X, 그리고 iCloud를위한 데이터 저장 및 관리"(년 1 월 2013) 마커스 S. Zarra에 의해, 특히 "성능 튜닝"라는 제목의 4 장.
읽어.
from https://stackoverflow.com/questions/6917494/core-data-performance-with-single-parent-entity by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 스크립트는 잘못된 이메일 주소를 찾을 수 (0) | 2020.05.08 |
---|---|
[SQL] 조인에서 여러 행에 조건을 적용하기위한 SQL (0) | 2020.05.08 |
[SQL] MySQL의에서 보관 IPv6 주소 (0) | 2020.05.08 |
[SQL] SQL 쿼리는 지정된 키의 각 인스턴스에 대해 가장 최근의 행을 얻을 수 있습니다 (0) | 2020.05.08 |
[SQL] A는 포함하거나 테이블 또는 인덱싱 된 뷰에 FREETEXT 조건이 전체 텍스트하지 않기 때문에 사용할 수 없습니다 인덱스 (0) | 2020.05.08 |