cocoa - Core Data vs SQLite 3
macos core-data (4)
Ya estoy bastante familiarizado con las bases de datos relacionales y he usado SQLite (y otras bases de datos) en el pasado. Sin embargo, Core Data tiene un cierto atractivo, por lo que estoy considerando pasar un tiempo para aprender a usarlo en mi próxima aplicación.
¿Hay mucho beneficio al usar Core Data sobre SQLite, o viceversa? ¿Cuáles son los pros / contras de cada uno?
Me resulta difícil justificar el costo de aprender Core Data cuando Apple no lo usa para muchas de sus aplicaciones emblemáticas como Mail.app o iPhoto.app, en lugar de optar por bases de datos SQLite. SQLite también se utiliza ampliamente en el iPhone.
¿Pueden aquellos familiarizados con el uso de ambos comentar sobre su experiencia? Quizás, como con la mayoría de las cosas, la pregunta es más profunda que simplemente usar una sobre la otra.
Aunque Core Data es un descendiente del Enterprise Object Framework de Apple, un mapeador relacional de objetos (ORM) que estaba / está estrechamente vinculado a un backend relacional, Core Data no es un ORM. Es, de hecho, un marco de gestión de gráficos de objetos. Administra un gráfico potencialmente muy grande de instancias de objetos, lo que permite que una aplicación funcione con un gráfico que no encajaría completamente en la memoria fallando objetos dentro y fuera de la memoria según sea necesario. Core Data también administra las restricciones en las propiedades y relaciones y mantiene la integridad de referencia (por ejemplo, manteniendo consistentes los enlaces hacia adelante y hacia atrás cuando se agregan / eliminan objetos de una relación). Core Data es, por lo tanto, un marco ideal para construir el componente "modelo" de una arquitectura MVC.
Para implementar su gestión de gráficos, Core Data utiliza SQLite como un almacén de discos. Podría haberse implementado utilizando una base de datos relacional diferente o incluso una base de datos no relacional como CouchDB . Como han señalado otros, Core Data también puede usar XML o un formato binario o un formato atómico escrito por el usuario como backend (aunque estas opciones requieren que todo el gráfico de objetos se ajuste a la memoria). Si está interesado en cómo se implementa Core Data en un backend SQLite, es posible que desee revisar el marco OmniDataObjects de OmniGroup, una implementación de código abierto de un subconjunto de la API Core Data. El marco BaseTen también es una implementación de la API Core Data utilizando PostgreSQL como backend.
Debido a que Core Data no pretende ser un ORM para SQLite, no puede leer un esquema de SQLite arbitrario. Por el contrario, no debe confiar en poder leer los almacenes de datos SQLite de Core Data con otras herramientas SQLite; El esquema es un detalle de implementación que puede cambiar.
Por lo tanto, no hay realmente ningún conflicto entre el uso de Core Data o SQLite directamente. Si desea una base de datos relacional, use SQLite (directamente oa través de uno de los envoltorios de Objective-C, como FMDB ), o un servidor de base de datos relacional. Sin embargo, es posible que aún desee aprender Datos básicos para utilizarlos como marco de gestión de gráficos de objetos. En combinación con las clases de controlador de Apple y los widgets de vista compatibles de enlace clave-valor, puede implementar una arquitectura MVC completa con muy poco código.
Core Data no es tanto un motor de base de datos como una API que se abstrae del almacén de datos real. Puede decirle a Core Data que guarde como una base de datos sqlite, un plist, un archivo binario o incluso un tipo de almacén de datos personalizado.
Recomendaría aprender Core Data, ya que es un excelente recurso que acelera en gran medida muchas partes del desarrollo de aplicaciones de cacao.
SQLite es uno de los formatos de base de datos para Core Data. Al usar Core Data, se obtiene una mejor integración con el resto de la API de Cocoa.
Y con iOS 5.0, obtiene el beneficio adicional de poder utilizar la sincronización de archivos de iCloud de forma gratuita si está usando Core Data. Si está utilizando SQLite directamente, tendrá que ser un montón de retoques e implementación manuales para que se sincronice en iCloud.