Основні дані проти SQLite 3 [закрито]


314

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

Чи багато користі від використання основних даних через SQLite чи навпаки? Які плюси / мінуси кожного?

Мені важко виправдати витрати на вивчення основних даних, коли Apple не використовує їх для багатьох своїх флагманських програм, таких як Mail.app або iPhoto.app - замість цього вибираючи бази даних SQLite. SQLite також широко використовується на iPhone.

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


1
Не могли б ви додати посилання на en.wikipedia.org/wiki/Core_Data для всіх, хто не знає, що це.
RSabet

7
Зауважте, що Основні дані не використовуються і не повинні використовуватися як база даних!

Відповіді:


281

Хоча Core Data є нащадком Apple Enterprise Enterprise Object Framework , об'єктно-реляційним картографом (ORM), який був / щільно прив'язаний до реляційного резервного середовища, Core Data не є ОРМ. Фактично це структура управління об'єктними графами. Він управляє потенційно дуже великим графіком екземплярів об'єктів, дозволяючи додатку працювати з графіком, який не повністю впишеться в пам'ять, пошкоджуючи об'єкти в і в пам'яті за необхідності. Основні дані також керують обмеженнями щодо властивостей та відносин та підтримують цілісність посилань (наприклад, підтримуючи послідовність прямих та зворотних посилань, коли об’єкти додаються / видаляються в / з відносини). Отже, Core Data є ідеальною основою для побудови "модельного" компонента архітектури MVC.

Для реалізації свого управління графа, Core Data відбувається використовувати SQLite в якості дискового сховища. Він міг бути реалізований за допомогою іншої реляційної бази даних або навіть нереляційної бази даних, наприклад CouchDB . Як зазначають інші, Core Data також може використовувати XML або двійковий формат або атомний формат, написаний користувачем, як резервний (хоча ці параметри вимагають, щоб весь графік об'єкта помістився в пам'ять). Якщо ви зацікавлені в тому, як основні дані реалізуються на бекенде SQLite, ви можете перевірити рамку OmniDataObjects OmniGroup , реалізацію з відкритим кодом підмножини API основних даних. BaseTen структура також є реалізація API ядра даних з використанням PostgreSQL в якості движка.

Оскільки Core Data не призначений бути ORM для SQLite, він не може читати довільну схему SQLite. І навпаки, не слід покладатися на можливість читати сховища даних SQLite Core Data за допомогою інших інструментів SQLite; схема - це деталь реалізації, яка може змінюватися.

Таким чином, між використанням Core Data або SQLite безпосередньо не існує конфлікту. Якщо ви хочете отримати реляційну базу даних, використовуйте SQLite (безпосередньо або через одну з обгортки Objective-C, наприклад FMDB ), або реляційний сервер баз даних. Однак ви, можливо, все ж захочете вивчити Основні дані для використання в якості структури управління об’єктним графіком. У поєднанні з контролерами класів Apple та віджетами сумісного перегляду, що поєднують між собою ключ та значення, ви можете реалізувати повну архітектуру MVC з дуже невеликим кодом.


11
Зауважте, fmdb - це не ORM, а лише обгортка objc навколо sqlite3 C api
robottobor

Дякую за улов; Я оновлю публікацію.
Barry Wark

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) - Кабелі iCloud Core Data відміняються і, ймовірно, в майбутньому будуть звільнені. Більше: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Микола Суванджієв

35

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

Я рекомендую вивчити основні дані, оскільки це відмінний ресурс, який значно прискорює розробку багатьох частин какао-додатків.


13

SQLite - один із форматів бази даних для основних даних. Використовуючи основні дані, ви отримуєте кращу інтеграцію з рештою API какао.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.