Базовые данные против SQLite 3 [закрыто]

314

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

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

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

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

Джейсон Медейрос
источник
1
Не могли бы вы добавить ссылку на en.wikipedia.org/wiki/Core_Data для всех, кто не знает, что это такое.
RSabet
7
Обратите внимание, что базовые данные не используются и не должны использоваться в качестве базы данных!

Ответы:

281

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

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

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

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

Барри Уарк
источник
11
Обратите внимание, что fmdb - это не ORM, а просто оболочка objc для sqlite3 C api
robottobor
Спасибо за улов; Я обновлю пост.
Барри Уарк
3
Отличный ответ. FMDB переехал в GitHub - github.com/ccgus/fmdb - и рекомендуется разработчиком NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Крис Долан
50
С iOS 5.0 вы получаете дополнительное преимущество возможности использовать синхронизацию файлов iCloud бесплатно, если вы используете Core Data. Если вы используете SQLite напрямую, для его синхронизации с iCloud потребуется много ручной работы и реализации.
странно
1
Попробуйте www.github.com/pmurphyjam/DBExample Это проект XCode, который использует SQLite.
Пэт
46

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

странный
источник
7
Примечание: iCloud сосет с
основными
3
Конечно, но, учитывая гордость и радость Apple, надеюсь, они улучшат положение в следующих версиях iOS.
странно
4
Обновление (после WWDC 2016) - возможности Core Data iCloud устарели и, вероятно, будут удалены в будущем. Больше: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Николай Суванджиев
35

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

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

Джоэл Левин
источник
13

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

cefstat
источник