복붙노트

[SQL] 싱글 부모 엔터티와 코어 데이터 성능

SQL

싱글 부모 엔터티와 코어 데이터 성능

내가 코어 데이터와 함께 작동하는 프레임 워크를 만드는 오전. 당신의 코어 데이터 클래스에 내 프레임 워크를 사용하기위한 요구 사항 중 하나는 프레임 워크의 기능을 갖고 싶어 실체가 당신에게 제공하는 엔티티의 하위 엔티티와 서브 클래스해야한다는 것입니다. 이를 위해서 그 객체 푸를 호출합니다.

오늘은 코어 데이터 테이블이라고 ZFOO에 푸의 하위 엔티티의 모든 개체를 저장 것을 깨달았다. 대규모 데이터 세트를 가진 누군가가 foo는 클래스의 모든 하위 개체가 하나 개의 거대한 ZFOO 테이블에 저장 될 것이기 때문에, 그것을 사용하려는 경우 내가 코어 데이터의 성능에 대해 걱정하고있다.

어떤 의견이나 권고 사항은 높게 평가 될 것이다.

해결법

  1. ==============================

    1.작년에이 같은 일을 한 프로젝트에 일을, 우리는 몇 가지 일반적인 특성을 가지고 하나의 클래스에서 상속 핵심 데이터에 핵심 데이터의 모든 모든 것을 저장됩니다.

    작년에이 같은 일을 한 프로젝트에 일을, 우리는 몇 가지 일반적인 특성을 가지고 하나의 클래스에서 상속 핵심 데이터에 핵심 데이터의 모든 모든 것을 저장됩니다.

    핵심 데이터의 10K 기록과 성능은 우리가 그것을 다시 썼다 점에 저하와 공통 조상을 제거 - 우리가 1,000 사이 어딘가에 있었다. 나는 간단한 검색 여러 초 및 삽입을 복용 한 기억으로 / 업데이트도 꽤 엉터리였다. 그것은 일을 천천히 고통스럽게 우리가 핵심 데이터를 하나 개의 테이블에 모든 것을 저장하고 내부적으로 개방적이고 눈치 DB에 금이 있음을 먹은 후에 만했다.

    미안 특정 번호를 기억하지 않는, 큰 테이크 아웃은 너무 느린 때문에 우리가 그것을 다시했다, 그리고 초기를 채울하려고 할 때 너무 느린 너무 느린 고주파 거래에 대한하지만 너무 느린 같은 응용 프로그램은로드에 추락처럼 코어 데이터 밖으로보기.

    그래서,이 나이가 iOS 및 오래된 하드웨어에 있던 것을 소금의 입자로, 나는이 작업을 수행하지 않습니다 확실히 말할 것입니다.

  2. ==============================

    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. ==============================

    3.돌이켜 보면 멋진 일이다.

    돌이켜 보면 멋진 일이다.

    사람들은 여전히이 Q & A를 읽고 자신의 질문에 참조하고 아무것도 변경되었습니다 생각하고, 나는 명확성을 위해 몇 가지 설명을 추가하고, "현대"또는 더 최근의 응답을 제공하고 싶습니다.

    코어 데이터는 강력한 짐승,하지만 당신은 짐승을 제어하기 위해 배워야하고, 이전에 대답 한 개척자 덕분에 애플이 프레임 워크로 만든 것을 개선, 몇보다 오늘 할 많은 쉽습니다 년 전 (특히 아이폰 OS 5).

    처음에 나는 견고하고 강력한 데이터 모델을 준비하는 방법을 배우는 것을 권 해드립니다. 내가 조사를 독자에게 맡겨 있도록이에 엄청난 양의 정보가있다. 이전 답변 언급, 데이터 모델의 모든 관계를 준비하는 법을 배워야하는 것이 중요하다.

    그건 그렇고, 당신이 가져 오는 데이터 세트의 크기를 제어하는 ​​메커니즘은 여러 가지가있을 수 있습니다. 그것은 더 좋을 실용적인 책장에서 책보다 나에게 설명하지 않은 - "코어 데이터, 제 2 판, 아이폰 OS, OS X, 그리고 iCloud를위한 데이터 저장 및 관리"(년 1 월 2013) 마커스 S. Zarra에 의해, 특히 "성능 튜닝"라는 제목의 4 장.

    읽어.

  4. from https://stackoverflow.com/questions/6917494/core-data-performance-with-single-parent-entity by cc-by-sa and MIT license