2012-09-10 3 views
3

나는 coredata를 사용하는 몇 가지 응용 프로그램을 만들었고 sqlite에 이미지를 저장했지만 어딘가에 나쁘다는 것을 발견했습니다. 나는 인터넷을 검색했지만 내가 찾은 모든이 제안입니다 : 관련 데이터와 같은 테이블에이미지를 sqlite에 저장하거나 그것에 대한 참조 만 저장 하시겠습니까?

  • 이미지 크기 < 1백킬로바이트 가게 별도의
  • 이미지 크기 < 1메가바이트 저장 표
012,351 데이터를 디스크에 저장 1메가바이트로드 불필요
  • 이미지 크기> 피하고 코어의 내부를 참조 할 관계 통해 부착

    내 질문은 : 장단점은 NSData 같이 sqlite db 이미지를 저장하고 이미지가 파일 시스템에 저장된 동안 이미지에 대한 참조 만 저장하는 것이 무엇입니까?

  • 답변

    7

    Apple은 Core Data Performance에 관한 가이드에서이 주제에 대한 지침을 제공합니다. 일반적으로 SQLite는 확장 성이 좋고 크기가 기가 바이트 인 데이터베이스를 쉽게 처리 할 수 ​​있지만 큰 바이너리 BLOB는 쿼리 할 수 ​​없거나 인덱싱 할 수 없으며 거의 ​​반환하지 않고 데이터베이스 크기를 늘립니다.

    iOS 4 이상을 타겟팅하는 경우 해당 데이터가 포함 된 속성에 "Allows External Binary Data Storage"플래그를 설정할 수 있으며, Core Data는 필요할 경우 파일 시스템에 별도로 자동 저장합니다. 데이터 저장소의 해당 데이터에 대한 링크를 자동으로 관리합니다.

    +0

    매우 좋습니다! 해결책은 내가 찾고 있던 것이 었습니다! – Lukas

    1

    장점 : 확실하지 않지만 데이터베이스에 링크 만 저장하면 몇 가지 이점이 있다고 생각할 수 있습니다.

    1. 파일 시스템과의 상호 작용이 SQLite 이미지 가져 오기보다 빠릅니다. (전체 빠른 성능)

    2. 깨끗하고 확장 가능한 데이터베이스 -

    1

    당신은 내가 비슷한 얻을 답을 확인하지 않을 경우 할 수 있습니다 (크기가 우려되는으로 이동이 쉬울 것) 같은 주제. 왜냐하면 당신은 조언을주는 사람을 찾았지만 실제로 아무도 벤치 마크 및 실제 기술 답변을 제공하지 않았습니다. 내 응용 프로그램이 DB에있는 모든 이미지를 실현하고, 앱 스토어, 배송 된 후 그 옆에

    Provide example for why it is not advisable to store images in CoreData?

    , 나는 당신이 아이 클라우드를 사용하면 일을 더 쉽게 있음을 알 수 있습니다. 섬네일 아이콘이있는 UITableView의 작은 이미지를 사용하면 비동기 이미지로드를 완전히 피할 수 있습니다.

    오직 하나의 조언으로 각 이미지 크기에 엔티티를 제공하고 주 엔티티에 첨부 된 세트에 모두 저장하십시오.

    iCloud를 사용하는 유일한 단점은 이미지를 변경할 때마다 생성되는 더 큰 트랜잭션 로그입니다. 그러나 제 경우에는 이미지가 작아서 이미지 업데이트의 필요성은 거의 없습니다. 또한 현재 iCloud + CoreData는 꽤 버그가 있으므로 운송하기 전에 제거 했으므로 현재로서는 나에게 문제가되지 않습니다.

    관련 문제