web-dev-qa-db-fra.com

Données de base vs SQLite 3

Je connais déjà bien les bases de données relationnelles et ai déjà utilisé SQLite (et d’autres bases de données). Cependant, Core Data a un certain attrait, je songe donc à passer du temps à l’apprendre pour l’utiliser dans ma prochaine application.

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

Je trouve difficile de justifier le coût d'apprentissage de Core Data lorsque Apple ne l'utilise pas dans bon nombre de ses applications phares telles que Mail.app ou iPhoto.app, mais plutôt pour les bases de données SQLite. SQLite est également largement utilisé sur l'iPhone.

Ceux qui sont familiers avec l'utilisation des deux peuvent commenter leur expérience? Peut-être, comme pour la plupart des choses, la question est plus profonde que de simplement utiliser l'un sur l'autre?

315
Jason Medeiros

Bien que Core Data soit un descendant de Enterprise Object Framework d'Apple, un mappeur de relation objet-objet (ORM) qui était/est étroitement lié à un système relationnel, Core Data est pas un ORM. Il s’agit en fait d’un cadre de gestion de graphe d’objet. Il gère un graphique potentiellement très volumineux d'instances d'objet, permettant ainsi à une application de travailler avec un graphique qui ne tiendrait pas entièrement en mémoire en créant des erreurs dans la mémoire des objets si nécessaire. Les données de base gèrent également les contraintes sur les propriétés et les relations et maintiennent l’intégrité des références (par exemple, en conservant la cohérence des liens en amont et en aval lorsque des objets sont ajoutés/supprimés dans/d’une relation). Core Data constitue donc un cadre idéal pour la construction du composant "modèle" d'une architecture MVC.

Pour implémenter sa gestion des graphes, Core Data utilise pour utiliser SQLite en tant que magasin de disques. Il aurait pu utiliser 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 déjà souligné, Core Data peut également utiliser le format XML, un format binaire ou un format atomique écrit par l'utilisateur (bien que ces options nécessitent que tout le graphe d'objet tienne dans la mémoire). Si vous souhaitez savoir comment Core Data est implémenté sur un backend SQLite, vous pouvez consulter le framework OmniDataObjects d'OmniGroup, une implémentation à source ouverte 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.

Parce que Core Data n'est pas destiné à être un ORM pour SQLite, il ne peut pas lire de schéma SQLite arbitraire. Inversement, vous ne devez pas vous fier à la possibilité 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’ya pas vraiment de conflit entre l’utilisation directe de Core Data ou SQLite. Si vous souhaitez une base de données relationnelle, utilisez SQLite (directement ou via l’un des wrappers 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 infrastructure de gestion de graphe d'objet. En combinaison avec les classes de contrôleurs Apple et les widgets de vue compatibles avec la liaison clé-valeur, vous pouvez implémenter une architecture MVC complète avec très peu de code .

280
Barry Wark

Et avec iOS 5.0, vous bénéficiez de la possibilité d'utiliser gratuitement la synchronisation de fichiers iCloud si vous utilisez Core Data. Si vous utilisez directement SQLite, il faudra beaucoup de bricolage manuel et de mise en œuvre pour le synchroniser via iCloud.

46
strange

Core Data n'est pas vraiment un moteur de base de données, mais une API qui résume le magasin de données réel. Vous pouvez indiquer à Core Data de sauvegarder 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 les données de base, qui constituent une excellente ressource qui accélère considérablement de nombreuses étapes du développement d'applications de cacao.

35
Joel Levin

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.

13
cefstat