Основные данные против SQLite 3

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

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

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

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

4 ответа

Решение

Хотя 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 Core Data, использующего PostgreSQL в качестве бэкэнда.

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

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

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

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

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

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

Другие вопросы по тегам