Core Data vs SQLite 3

Я уже хорошо знаком с реляционными базами данных и использовал SQLite (и другие базы данных) в прошлом. Однако Core Data имеет определенное очарование, поэтому я рассматриваю возможность потратить некоторое время, чтобы изучить его для использования в моем следующем приложении.

Есть ли большая польза для использования Core Data по SQLite или наоборот? Каковы преимущества/недостатки каждого?

Мне сложно обосновать стоимость обучения Core Data, когда Apple не использует его для многих своих флагманских приложений, таких как Mail.app или iPhoto.app, вместо этого выбирает базы данных SQLite. SQLite также широко используется на iPhone.

Могут ли люди, знакомые с использованием обоих комментариев на их опыте? Возможно, как и в большинстве случаев, вопрос глубже, чем просто использовать один над другим?

Ответ 1

Хотя Core Data является потомком Apple Enterprise Object Framework, объектно-реляционный картограф (ORM), который был/сильно привязан к реляционная база данных, Core Data не является ORM. Это, на самом деле, структура управления графом объектов. Он управляет потенциально очень большим графиком экземпляров объектов, позволяя приложению работать с графиком, который не будет полностью вписываться в память, если при необходимости устранить объекты в и из памяти. Core Data также управляет ограничениями на свойства и отношения и целостность ссылок на maintins (например, сохраняя прямую и обратную ссылки согласованными, когда объекты добавляются/удаляются в/из отношения). Таким образом, базовые данные являются идеальной основой для создания "модельного" компонента архитектуры MVC.

Чтобы реализовать управление графом, Core Data использует sqlite как хранилище дисков. Он мог быть реализован с использованием другой реляционной базы данных или даже нереляционной базы данных, такой как CouchDB. Как указывали другие, Core Data также может использовать XML или двоичный формат или написанный пользователем атомный формат в качестве бэкэнд (хотя для этих параметров требуется, чтобы весь граф объекта вписывался в память). Если вы заинтересованы в том, как Core Data реализуется на базе sqlite, вы можете проверить структуру OmniGroup OmniDataObjects, реализацию с открытым исходным кодом подмножество API данных ядра. Структура BaseTen также является реализацией Core Data API с использованием PostgreSQL в качестве бэкэнд.

Поскольку базовые данные не предназначены для ORM для sqlite, он не может читать произвольную схему sqlite. И наоборот, вы не должны полагаться на возможность чтения хранилищ данных SQL Server с другими инструментами sqlite; схема представляет собой деталь реализации, которая может измениться.

Таким образом, на самом деле нет никакого конфликта между использованием Core Data или sqlite напрямую. Если вам нужна реляционная база данных, используйте sqlite (напрямую или через одну из оберток Objective-C, например FMDB), или реляционную базу данных сервер. Тем не менее, вы все равно можете изучить Core Data для использования в качестве структуры управления графами объектов. В сочетании с классами контроллеров Apple и виджетами, совместимыми с привязкой к ключевому значению, вы можете реализовать полную архитектуру MVC с очень маленьким кодом.

Ответ 2

И с iOS 5.0 вы получаете дополнительное преимущество в том, что сможете бесплатно использовать синхронизацию файлов iCloud, если вы используете Core Data. Если вы используете SQLite напрямую, для его синхронизации с iCloud потребуется много ручной обработки и реализации.

Ответ 3

Core Data - это не столько механизм базы данных, сколько API, который абстрагируется от фактического хранилища данных. Вы можете указать Core Data сохранить в виде базы данных sqlite, plist, двоичного файла или даже настраиваемого типа хранилища данных.

Я бы рекомендовал изучить Core Data, так как это отличный ресурс, который значительно ускоряет многие части разработки приложений cocoa.

Ответ 4

SQLite - один из форматов базы данных для Core Data. Используя Core Data, вы получаете лучшую интеграцию с остальной частью API Cocoa.