Core Data vs SQLite 3 [chiuso]


314

Conosco già abbastanza bene i database relazionali e ho usato SQLite (e altri database) in passato. Tuttavia, Core Data ha un certo fascino, quindi sto valutando di dedicare un po 'di tempo per impararlo per l'uso nella mia prossima applicazione.

Ci sono molti vantaggi nell'uso di Core Data su SQLite o viceversa? Quali sono i pro / contro di ciascuno?

Trovo difficile giustificare il costo dell'apprendimento dei Core Data quando Apple non lo utilizza per molte delle sue applicazioni di punta come Mail.app o iPhoto.app, optando invece per i database SQLite. SQLite è anche ampiamente utilizzato su iPhone.

Chi ha familiarità con entrambi può commentare la propria esperienza? Forse, come con la maggior parte delle cose, la domanda è più profonda del semplice utilizzo dell'una sull'altra?


1
Potresti per favore aggiungere un link a en.wikipedia.org/wiki/Core_Data per tutti quelli che non sanno cosa sia.
RSabet,

7
Si noti che i dati di base non sono e non devono essere utilizzati come database!

Risposte:


281

Sebbene Core Data sia un discendente dell'Enterprise Object Framework di Apple , un mappatore relazionale di oggetti (ORM) che era / è strettamente legato a un backend relazionale, Core Data non è un ORM. Si tratta, in effetti, di un framework di gestione di oggetti grafici. Gestisce un grafico potenzialmente molto grande di istanze di oggetti, consentendo a un'app di funzionare con un grafico che non si adatterebbe completamente alla memoria danneggiando e rimuovendo gli oggetti nella memoria, se necessario. Core Data gestisce anche i vincoli su proprietà e relazioni e mantiene l'integrità di riferimento (ad esempio mantenendo coerenti i collegamenti avanti e indietro quando gli oggetti vengono aggiunti / rimossi a / da una relazione). Core Data è quindi un framework ideale per la costruzione del componente "modello" di un'architettura MVC.

Per implementare la sua gestione grafico, Core Data accade per utilizzare SQLite come un negozio di dischi. Si potrebbe essere stato implementato usando un database relazionale diverso o addirittura un database non relazionali come CouchDB . Come altri hanno sottolineato, Core Data può anche utilizzare XML o un formato binario o un formato atomico scritto dall'utente come backend (anche se queste opzioni richiedono che l'intero grafico dell'oggetto si adatti alla memoria). Se sei interessato a come i Core Data sono implementati su un backend SQLite, potresti voler dare un'occhiata al framework OmniDataObjects di OmniGroup , un'implementazione open source di un sottoinsieme dell'API Core Data. Il framework BaseTen è anche un'implementazione dell'API Core Data che utilizza PostgreSQL come backend.

Poiché i dati principali non sono destinati a essere un ORM per SQLite, non possono leggere schemi SQLite arbitrari. Al contrario, non dovresti fare affidamento sul fatto di poter leggere gli archivi dati SQLite di Core Data con altri strumenti SQLite; lo schema è un dettaglio di implementazione che può cambiare.

Pertanto, non esiste alcun conflitto tra l'utilizzo diretto di Core Data o SQLite. Se si desidera un database relazionale, utilizzare SQLite (direttamente o tramite uno dei wrapper Objective-C come FMDB ) o un server di database relazionale. Tuttavia, potresti comunque voler imparare i dati di base da utilizzare come framework di gestione dei grafi di oggetti. In combinazione con classi controller di Apple e di valori-chiave vincolanti vista widget compatibili, è possibile implementare un'architettura completa MVC con molto poco codice.


11
Nota fmdb non è un ORM, solo un wrapper objc intorno a sqlite3 C api
robottobor

Grazie per la cattura; Aggiornerò il post.
Barry Wark,

3
Risposta eccellente. FMDB è passato a github - github.com/ccgus/fmdb - ed è consigliato da uno sviluppatore NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan

50
Con iOS 5.0 ottieni l'ulteriore vantaggio di poter utilizzare la sincronizzazione dei file iCloud gratuitamente se utilizzi Core Data. Se stai usando SQLite direttamente, sarà necessario un sacco di armeggi e implementazioni manuali per sincronizzarlo su iCloud.
strano il

1
Prova www.github.com/pmurphyjam/DBExample È un progetto Xcode che utilizza SQLite.
Pat

46

E con iOS 5.0 ottieni l'ulteriore vantaggio di poter utilizzare la sincronizzazione dei file iCloud gratuitamente se utilizzi Core Data. Se stai usando SQLite direttamente, sarà necessario un sacco di armeggi e implementazioni manuali per sincronizzarlo su iCloud.



3
Certo, ma dato l'orgoglio e la gioia di Apple, si spera che miglioreranno le cose nelle prossime versioni di iOS.
strano

4
Aggiornamento (dopo il WWDC 2016) - Le cabine iCloud di Core Data sono obsolete e probabilmente verranno ritirate in futuro. Altro: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev

35

Core Data non è tanto un motore di database quanto un'API che si sottrae all'archivio dati effettivo. Puoi dire a Core Data di salvare come database sqlite, plist, file binario o persino un tipo di archivio dati personalizzato.

Vorrei raccomandare l'apprendimento dei dati di base, in quanto è un'ottima risorsa che accelera notevolmente molte parti dello sviluppo di applicazioni di cacao.


13

SQLite è uno dei formati di database per Core Data. Utilizzando Core Data ottieni una migliore integrazione con il resto dell'API Cocoa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.