2009-02-07 3 views
293

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

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

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

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

+1

Не могли бы вы добавить ссылку на http://en.wikipedia.org/wiki/Core_Data для всех, не зная, что это такое. – RSabet

+7

Обратите внимание, что базовые данные ** не ** и не должны использоваться в качестве базы данных! –

ответ

270

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

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

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

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

+10

Примечание. Fmdb не является ORM, просто оболочкой objc вокруг sqlite3 C api – robottobor

+0

Спасибо за уловку; Я обновлю сообщение. –

+0

Отличный ответ - спасибо! –

9

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

30

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

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

44

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

+6

Примечание: [iCloud сосет с основными данными] (http://www.theverge.com/2013/3/26/4148628/why-doesnt-icloud-just-work) –

+3

Конечно, но, учитывая его гордость и радость от Apple , надеюсь, они улучшат ситуацию в предстоящих версиях iOS. – strange

+2

Обновление (после WWDC 2016). Основные возможности iCloud в Core Data устаревают и, вероятно, будут удалены в будущем. Подробнее: http://mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data/ –

Смежные вопросы