핵심 데이터 대 SQLite 3 [닫기]


314

나는 이미 관계형 데이터베이스에 대해 잘 알고 있으며 과거에는 SQLite (및 다른 데이터베이스)를 사용했습니다. 그러나 Core Data 에는 특별한 매력이 있으므로 다음 응용 프로그램에서 사용할 수 있도록 시간을 투자하는 것을 고려하고 있습니다.

SQLite를 통해 Core Data를 사용하거나 그 반대의 이점이 있습니까? 각각의 장단점은 무엇입니까?

Apple이 Mail.app 또는 iPhoto.app와 같은 많은 주요 응용 프로그램에 SQLite 데이터베이스를 사용하지 않고 핵심 데이터를 배우는 데 드는 비용을 정당화하기가 어렵다는 것을 알았습니다. SQLite는 iPhone에서도 광범위하게 사용됩니다.

자신의 경험에 대해 두 가지 의견을 모두 잘 알고 있습니까? 아마도 대부분의 경우와 마찬가지로 질문이 다른 것을 사용하는 것보다 더 깊습니까?


1
그것이 무엇인지 모르는 모든 사람 을 위해 en.wikipedia.org/wiki/Core_Data에 대한 링크를 추가해 주시겠습니까 ?
RSabet

7
코어 데이터는 유의 하지 하고 데이터베이스로 사용해서는 안됩니다!

답변:


281

Core Data는 Apple의 Enterprise Object Framework 의 자손이지만 관계형 백엔드와 밀접하게 연결된 ORM (Object-Relational Mapper)이지만 Core Data는 ORM 이 아닙니다 . 사실 이것은 객체 그래프 관리 프레임 워크입니다. 잠재적으로 매우 큰 객체 인스턴스 그래프를 관리하므로 필요에 따라 메모리 안팎에서 객체에 오류를 발생시켜 앱이 메모리에 완전히 맞지 않는 그래프로 작업 할 수 있습니다. Core Data는 속성 및 관계에 대한 제약 조건을 관리하고 참조 무결성을 유지합니다 (예 : 개체가 관계에 추가 / 제거 될 때 정방향 및 역방향 링크의 일관성 유지). 따라서 Core Data는 MVC 아키텍처의 "모델"구성 요소를 구축하기위한 이상적인 프레임 워크입니다.

그 그래프 관리를 구현하기 위해, 코어 데이터는 어떻게 디스크 저장소로 SQLite는 사용할 수 있습니다. 그것은 와 같은 다른 관계형 데이터베이스 또는 비 관계형 데이터베이스를 사용하여 구현 된 CouchDB를 . 다른 사람들이 지적했듯이 Core Data는 XML 또는 이진 형식 또는 사용자 작성 원자 형식을 백엔드로 사용할 수도 있습니다 (이 옵션을 사용하려면 전체 개체 그래프가 메모리에 맞아야합니다). SQLite 백엔드에서 Core Data를 구현하는 방법에 관심이있는 경우 Core Data API 하위 집합의 오픈 소스 구현 인 OmniGroupOmniDataObjects 프레임 워크 를 확인할 수 있습니다 . BaseTen의 프레임 워크는 백엔드로의 PostgreSQL을 사용하여 코어 데이터 API의 구현입니다.

Core Data는 SQLite 용 ORM이 아니므로 임의의 SQLite 스키마를 읽을 수 없습니다. 반대로 다른 SQLite 도구를 사용하여 Core Data의 SQLite 데이터 저장소를 읽을 수 있어야합니다. 스키마는 변경 될 수있는 구현 세부 사항입니다.

따라서 Core Data 또는 SQLite를 직접 사용하는 것은 실제로 충돌이 없습니다. 관계형 데이터베이스를 원하는 경우 SQLite (직접 또는 FMDB 와 같은 Objective-C 랩퍼 중 하나를 통해 ) 또는 관계형 데이터베이스 서버를 사용하십시오. 그러나 객체 그래프 관리 프레임 워크로 사용할 핵심 데이터를 계속 배우고 싶을 수도 있습니다. Apple의 컨트롤러 클래스 및 키-값 바인딩 호환 뷰 위젯과 함께 사용하면 코드를 거의 사용 하지 않고 완전한 MVC 아키텍처를 구현할 수 있습니다 .


11
참고 fmdb는 ORM, sqlite3를 C API를 주위에 단지 objc 래퍼 아니다
robottobor

캐치 주셔서 감사합니다. 게시물을 업데이트하겠습니다.
Barry Wark

3
훌륭한 답변입니다. - FMDB는 GitHub의에 이동 github.com/ccgus/fmdb - 그리고 웹마 스터 개발자가 추천 : inessential.com/2010/02/26/on_switching_away_from_core_data
크리스 고언

50
iOS 5.0을 사용하면 Core Data를 사용하는 경우 iCloud 파일 동기화를 무료로 사용할 수 있다는 추가 이점이 있습니다. SQLite를 직접 사용하는 경우 iCloud에서 동기화하려면 많은 수동 땜질 및 구현이 필요합니다.
이상한

1
www.github.com/pmurphyjam/DBExample을보십시오. SQLite를 사용하는 Xcode 프로젝트입니다.
Pat

46

또한 iOS 5.0을 사용하면 Core Data를 사용하는 경우 iCloud 파일 동기화를 무료로 사용할 수 있다는 이점이 있습니다. SQLite를 직접 사용하는 경우 iCloud에서 동기화하려면 많은 수동 땜질 및 구현이 필요합니다.



3
물론 애플의 자부심과 기쁨을 감안하면 다가오는 iOS 버전에서 개선이 되길 바란다.
이상한

4
업데이트 (WWDC 2016 이후)-Core Data의 iCloud 기능은 더 이상 사용되지 않으며 향후 폐기 될 수 있습니다. 더보기 : mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

Core Data는 실제 데이터 저장소를 추상화하는 API이기 때문에 데이터베이스 엔진이 아닙니다. Core Data에 sqlite 데이터베이스, plist, 이진 파일 또는 사용자 정의 데이터 저장소 유형으로 저장하도록 지시 할 수 있습니다.

코코아 응용 프로그램 개발의 많은 부분을 크게 가속화하는 훌륭한 리소스이므로 Core Data를 배우는 것이 좋습니다.


13

SQLite는 Core Data의 데이터베이스 형식 중 하나입니다. Core Data를 사용하면 나머지 Cocoa API와 더 잘 통합됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.