Dữ liệu cốt lõi so với SQLite 3 [đã đóng]


314

Tôi đã khá quen thuộc với các 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 hấp dẫn nhất định, vì vậy tôi đang xem xét dành một chút thời gian để tìm hiểu nó để sử dụng trong ứng dụng tiếp theo của mình.

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

Tôi thấy khó có thể biện minh cho chi phí học Dữ liệu lõi khi Apple không sử dụng nó cho nhiều ứng dụng hàng đầu của mình như Mail.app hoặc iPhoto.app - thay vào đó chọn sử dụng 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 với việc sử dụng cả hai nhận xét về kinh nghiệm của họ? Có lẽ, như với hầu hết mọi thứ, câu hỏi sâu sắc hơn là chỉ sử dụng cái này hơn cái kia?


1
Bạn có thể vui lòng thêm một liên kết đến en.wikipedia.org/wiki/Core_Data cho mọi người không biết đó là gì.
RS.us

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

Câu trả lời:


281

Mặc dù Core Data là hậu duệ của Khung đối tượng doanh nghiệp của Apple , một trình ánh xạ quan hệ đối tượng (ORM) đã được gắn chặt với một phụ trợ quan hệ, nhưng Dữ liệu lõi không phải là ORM. Trên thực tế, đó là một khung quản lý đồ thị đối tượng. Nó quản lý một biểu đồ có khả năng rất lớn của các thể hiện đối tượng, cho phép một ứng dụng hoạt động với một biểu đồ không hoàn toàn phù hợp với bộ nhớ do lỗi các đối tượng vào và ra khỏi bộ nhớ khi cần thiết. Dữ liệu 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 tiến và lùi 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.

Để thực hiện quản lý đồ thị của mình, Core Data tình cờ sử dụng SQLite làm kho lưu trữ đĩa. Nó có thể đã được thực hiện bằng cách sử dụng một cơ sở dữ liệu quan hệ khác hoặc thậm chí là cơ sở dữ liệu không liên quan như CouchDB . Như những người khác đã chỉ ra, Dữ liệu lõi 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 làm 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 phù hợp với bộ nhớ). Nếu bạn quan tâm đến cách Dữ liệu lõi được triển khai trên phụ trợ SQLite, bạn có thể muốn kiểm tra khung OmniDataObjects của Omnigroup , một triển khai nguồn mở của một tập hợp con của API dữ liệu lõi. Khung BaseTen cũng là một triển khai API dữ liệu lõi sử dụng PostgreSQL làm phụ trợ.

Vì Dữ liệu lõi không có ý định là 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 lưu trữ 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 thực hiện có thể thay đổi.

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


11
Lưu ý fmdb không phải là ORM, chỉ là một trình bao bọc objc xung quanh sqlite3 C api
robottobor

Cảm ơn đã bắt; Tôi sẽ cập nhật bài viết.
Barry Wark

3
Câu trả lời tuyệt vời. FMDB đã chuyển sang github - github.com/ccgus/fmdb - và được nhà phát triển NetNewsWire khuyên dùng: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
Với iOS 5.0, bạn sẽ có thêm lợi ích 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 lõi. Nếu bạn đang sử dụng SQLite trực tiếp, bạn sẽ phải thực hiện nhiều thao tác và triển khai thủ công để có thể đồng bộ hóa trên iCloud.
lạ

1
Hãy thử www.github.com/pmurphyjam/DBExample Đây là một dự án Xcode sử dụng SQLite.
Pat

46

Và với iOS 5.0, bạn sẽ nhận được thêm lợi ích 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 lõi. Nếu bạn đang sử dụng SQLite trực tiếp, bạn sẽ phải thực hiện nhiều thao tác và triển khai thủ công để có thể đồng bộ hóa trên iCloud.



3
Chắc chắn là có, 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.
lạ

4
Cập nhật (sau WWDC 2016) - Các tính năng iCloud của Core Data đang bị phản đối và có thể sẽ bị loại bỏ trong tương lai. Thêm: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

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

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


13

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.