2009-02-07 42 views
293

Tôi đã khá quen thuộc với cơ sở dữ liệu quan hệ và đã sử dụng SQLite (và các cơ sở dữ liệu khác) trong quá khứ. Tuy nhiên, Core Data có một sức quyến rũ nhất định, vì vậy tôi đang xem xét dành thời gian để tìm hiểu nó để sử dụng trong ứng dụng tiếp theo của tôi.Dữ liệu chính vs SQLite 3

Có nhiều lợi ích khi sử dụng Dữ liệu cốt lõi qua SQLite hay ngược lại? Những ưu/khuyết điểm của mỗi cái là gì?

Tôi thấy khó để biện minh cho chi phí học Core Data khi Apple không sử dụng nó cho nhiều ứng dụng hàng đầu của nó như Mail.app hoặc iPhoto.app - thay vì chọn cơ sở dữ liệu SQLite. SQLite cũng được sử dụng rộng rãi trên iPhone.

Những người quen thuộc có thể sử dụng cả nhận xét về trải nghiệm của họ không? Có lẽ, như với hầu hết mọi thứ, câu hỏi là sâu sắc hơn là chỉ sử dụng một trong những khác?

+1

Bạn có thể thêm liên kết vào http://en.wikipedia.org/wiki/Core_Data cho mọi người không biết đó là gì. – RSabet

+7

Lưu ý rằng Dữ liệu cốt lõi là ** không ** và không nên được sử dụng làm cơ sở dữ liệu! –

Trả lời

270

Mặc dù dữ liệu lõi là hậu duệ của một người lập bản đồ quan hệ đối tượng (ORM) của Apple được liên kết chặt chẽ với chương trình phụ trợ quan hệ, Dữ liệu cốt lõi là không phải một ORM. Đó là, trên thực tế, một khung quản lý đồ thị đối tượng. Nó quản lý một đồ thị tiềm năng rất lớn của các thể hiện đối tượng, cho phép ứng dụng làm việc với một biểu đồ không hoàn toàn phù hợp với bộ nhớ bằng cách làm hỏng các đối tượng trong và ngoài bộ nhớ khi cần thiết. Dữ liệu cốt lõi cũng quản lý các ràng buộc về các thuộc tính và mối quan hệ và duy trì tính toàn vẹn tham chiếu (ví dụ: giữ các liên kết chuyển tiếp và lạc hậu nhất quán khi các đối tượng được thêm/xóa vào/từ một mối quan hệ). Do đó, Core Data là một khung lý tưởng để xây dựng thành phần "mô hình" của kiến ​​trúc MVC.

Để triển khai quản lý biểu đồ, Dữ liệu chính xảy ra để sử dụng SQLite làm cửa hàng đĩa. Nó có thể đã được triển khai bằng cơ sở dữ liệu quan hệ khác hoặc thậm chí một cơ sở dữ liệu không quan hệ như CouchDB. Như những người khác đã chỉ ra, Core Data cũng có thể sử dụng XML hoặc định dạng nhị phân hoặc định dạng nguyên tử do người dùng viết dưới dạng phụ trợ (mặc dù các tùy chọn này yêu cầu toàn bộ biểu đồ đối tượng khớp với bộ nhớ). Nếu bạn quan tâm đến cách Core Data được triển khai trên một phần phụ trợ SQLite, bạn có thể muốn kiểm tra khung công tác OmniDataObjects của OmniGroup, một triển khai mã nguồn mở của một tập hợp con của API dữ liệu lõi. Khung công tác BaseTen cũng là việc triển khai API dữ liệu cốt lõi bằng cách sử dụng PostgreSQL như một phụ trợ.

Do dữ liệu cốt lõi không được dự định là một ORM cho SQLite, nên nó không thể đọc lược đồ SQLite tùy ý. Ngược lại, bạn không nên dựa vào việc có thể đọc các kho dữ liệu SQLite của Core Data với các công cụ SQLite khác; lược đồ là một chi tiết triển khai có thể thay đổi.

Do đó, không có bất kỳ xung đột nào giữa việc sử dụng Dữ liệu lõi hoặc SQLite trực tiếp. Nếu bạn muốn có một cơ sở dữ liệu quan hệ, hãy sử dụng SQLite (trực tiếp hoặc thông qua một trong các trình bao bọc Objective-C chẳng hạn như FMDB) hoặc một máy chủ cơ sở dữ liệu quan hệ. Tuy nhiên, bạn vẫn có thể muốn học Core Data để sử dụng như một khung quản lý đồ thị đối tượng.Kết hợp với các lớp điều khiển của Apple và các tiện ích quan điểm tương thích với khóa-giá trị ràng buộc, bạn có thể triển khai một kiến ​​trúc MVC hoàn chỉnh với mã số rất.

+10

Lưu ý fmdb không phải là ORM, chỉ là một wrapper objc xung quanh sqlite3 C api – robottobor

+0

Cảm ơn bạn đã nắm bắt; Tôi sẽ cập nhật bài đăng. –

+0

Câu trả lời hay - cảm ơn rất nhiều! –

9

SQLite là một trong các định dạng cơ sở dữ liệu cho Dữ liệu cốt lõi. Sử dụng Dữ liệu cốt lõi bạn sẽ tích hợp tốt hơn với phần còn lại của API Cocoa.

30

Dữ liệu chính không phải là một công cụ cơ sở dữ liệu vì nó là một API tóm tắt trên kho dữ liệu thực tế. Bạn có thể nói với Core Data để lưu dưới dạng một cơ sở dữ liệu sqlite, một plist, một tệp nhị phân hoặc thậm chí một kiểu lưu trữ dữ liệu tùy chỉnh.

Tôi khuyên bạn nên học Core Data, vì nó là một nguồn tài nguyên tuyệt vời giúp tăng tốc rất nhiều phần phát triển ứng dụng ca cao.

44

Và với iOS 5.0 bạn nhận được lợi ích bổ sung khi có thể sử dụng đồng bộ hóa tệp iCloud miễn phí nếu bạn đang sử dụng Dữ liệu cốt lõi. Nếu bạn đang sử dụng SQLite trực tiếp nó sẽ phải có rất nhiều hướng dẫn sử dụng tinkering và thực hiện để có được nó để đồng bộ trên iCloud.

+6

Lưu ý: [iCloud hút với dữ liệu cốt lõi] (http://www.theverge.com/2013/3/26/4148628/why-doesnt-icloud-just-work) –

+3

Chắc chắn, nhưng với niềm tự hào và niềm vui của Apple , hy vọng họ sẽ cải thiện mọi thứ trong các phiên bản iOS sắp tới. – strange

+2

Cập nhật (sau WWDC 2016) - Các tính năng iCloud của Dữ liệu cốt lõi không được chấp nhận và có thể sẽ bị gỡ bỏ trong tương lai. Thêm: http://mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data/ –

Các vấn đề liên quan