Core Data vs SQLite 3 [fermé]

314

Je connais déjà très bien les bases de données relationnelles et j'ai utilisé SQLite (et d'autres bases de données) dans le passé. Cependant, Core Data a une certaine allure, donc j'envisage de passer un peu de temps à l'apprendre pour l'utiliser dans ma prochaine application.

Y a-t-il beaucoup d'avantages à utiliser Core Data sur SQLite, ou vice versa? Quels sont les avantages / inconvénients de chacun?

J'ai du mal à justifier le coût de l'apprentissage des données de base lorsque Apple ne l'utilise pas pour la plupart de ses applications phares comme Mail.app ou iPhoto.app - optant plutôt pour les bases de données SQLite. SQLite est également largement utilisé sur l'iPhone.

Les personnes familières avec l'utilisation des deux peuvent-elles commenter leur expérience? Peut-être, comme pour la plupart des choses, la question est plus profonde que de simplement utiliser l'une sur l'autre?

Jason Medeiros
la source
1
Pourriez-vous s'il vous plaît ajouter un lien vers en.wikipedia.org/wiki/Core_Data pour tous ceux qui ne savent pas ce que c'est.
RSabet
7
Notez que Core Data n'est pas et ne doit pas être utilisé comme base de données!

Réponses:

281

Bien que Core Data soit un descendant de Enterprise Object Framework d'Apple , un mappeur objet-relationnel (ORM) qui était / est étroitement lié à un backend relationnel, Core Data n'est pas un ORM. Il s'agit en fait d'un cadre de gestion de graphes d'objets. Il gère un graphe potentiellement très volumineux d'instances d'objets, permettant à une application de travailler avec un graphe qui ne rentrerait pas entièrement en mémoire en défaillant les objets dans et hors de la mémoire si nécessaire. Core Data gère également les contraintes sur les propriétés et les relations et maintient l'intégrité de la référence (par exemple en gardant les liens avant et arrière cohérents lorsque des objets sont ajoutés / supprimés à / d'une relation). Core Data est donc un cadre idéal pour construire le composant "modèle" d'une architecture MVC.

Pour mettre en œuvre sa gestion graphique, les données fondamentales s'utiliser SQLite comme un magasin de disque. Il aurait pu être implémenté en utilisant une base de données relationnelle différente ou même une base de données non relationnelle telle que CouchDB . Comme d'autres l'ont souligné, Core Data peut également utiliser XML ou un format binaire ou un format atomique écrit par l'utilisateur comme backend (bien que ces options nécessitent que le graphique d'objet entier tienne en mémoire). Si vous êtes intéressé par la façon dont Core Data est implémenté sur un backend SQLite, vous voudrez peut-être consulter le cadre OmniDataObjects d' OmniGroup , une implémentation open source d'un sous-ensemble de l'API Core Data. Le framework BaseTen est également une implémentation de l'API Core Data utilisant PostgreSQL comme backend.

Étant donné que Core Data n'est pas destiné à être un ORM pour SQLite, il ne peut pas lire le schéma SQLite arbitraire. Inversement, vous ne devez pas compter sur la capacité de lire les magasins de données SQLite de Core Data avec d'autres outils SQLite; le schéma est un détail d'implémentation qui peut changer.

Ainsi, il n'y a pas vraiment de conflit entre l'utilisation directe de Core Data ou SQLite. Si vous voulez une base de données relationnelle, utilisez SQLite (directement ou via l'un des encapsuleurs Objective-C tels que FMDB ), ou un serveur de base de données relationnelle. Cependant, vous souhaiterez peut-être toujours apprendre les données de base à utiliser comme cadre de gestion de graphe d'objets. En combinaison avec les classes de contrôleur d'Apple et les widgets d'affichage compatibles avec la liaison de valeurs-clés, vous pouvez implémenter une architecture MVC complète avec très peu de code.

Barry Wark
la source
11
Remarque fmdb n'est pas un ORM, juste un wrapper objc autour de l'api sqlite3 C
robottobor
Merci pour la capture; Je mettrai à jour le message.
Barry Wark
3
Excellente réponse. FMDB a migré vers github - github.com/ccgus/fmdb - et est recommandé par un développeur NetNewsWire: inessential.com/2010/02/26/on_switching_away_from_core_data
Chris Dolan
50
Avec iOS 5.0, vous avez l'avantage supplémentaire de pouvoir utiliser la synchronisation de fichiers iCloud gratuitement si vous utilisez Core Data. Si vous utilisez directement SQLite, il faudra beaucoup de bricolage et d'implémentation manuels pour le synchroniser sur iCloud.
étrange
1
Essayez www.github.com/pmurphyjam/DBExample C'est un projet Xcode qui utilise SQLite.
Pat
46

Et avec iOS 5.0, vous obtenez l'avantage supplémentaire de pouvoir utiliser la synchronisation de fichiers iCloud gratuitement si vous utilisez Core Data. Si vous utilisez directement SQLite, il faudra beaucoup de bricolage et d'implémentation manuels pour le synchroniser sur iCloud.

étrange
la source
7
Remarque: iCloud craint avec Core Data
toasted_flakes
3
Bien sûr, mais étant donné la fierté et la joie d'Apple, j'espère qu'ils amélioreront les choses dans les prochaines versions d'iOS.
étrange
4
Mise à jour (après la WWDC 2016) - Les fonctionnalités iCloud de Core Data sont obsolètes et seront probablement retirées à l'avenir. Plus: mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data
Nikolay Suvandzhiev
35

Core Data n'est pas tant un moteur de base de données qu'une API qui résume le magasin de données réel. Vous pouvez demander à Core Data de l'enregistrer en tant que base de données sqlite, plist, fichier binaire ou même type de magasin de données personnalisé.

Je recommanderais d'apprendre Core Data, car c'est une excellente ressource qui accélère considérablement de nombreuses parties du développement d'applications de cacao.

Joel Levin
la source
13

SQLite est l'un des formats de base de données pour Core Data. En utilisant Core Data, vous obtenez une meilleure intégration avec le reste de l'API Cocoa.

cefstat
la source