Datos principales frente a SQLite 3

Ya estoy bastante familiarizado con las bases de datos relacionales y he utilizado SQLite (y otras bases de datos) en el pasado. Sin embargo, Core Data tiene cierto encanto, por lo que estoy considerando dedicar algo de tiempo para aprenderlo y utilizarlo en mi próxima solicitud.

¿Hay mucho beneficio al usar Core Data en SQLite, o viceversa? ¿Cuáles son los pros / contras de cada uno?

Me resulta difícil justificar el costo de aprendizaje de Core Data cuando Apple no lo usa para muchas de sus aplicaciones más importantes, como Mail.app o iPhoto.app, sino que opta por bases de datos SQLite. SQLite también se usa extensivamente en el iPhone.

¿Pueden los que están familiarizados con el uso de ambos comentar sobre su experiencia? Tal vez, como con la mayoría de las cosas, ¿la pregunta es más profunda que solo usar una sobre la otra?

Aunque Core Data es un descendiente de Enterprise Object Framework de Apple, un mapeador relacional de objetos (ORM) que estaba / está estrechamente ligado a un backend relacional, Core Data no es un ORM. Es, de hecho, un marco de gestión de gráficos de objetos. Gestiona un gráfico potencialmente muy grande de instancias de objeto, lo que permite que una aplicación funcione con un gráfico que no encajaría completamente en la memoria al dañar objetos dentro y fuera de la memoria, según sea necesario. Core Data también maneja las restricciones en las propiedades y las relaciones y mantiene la integridad de referencia (por ejemplo, mantener los enlaces hacia adelante y hacia atrás consistentes cuando los objetos se agregan / eliminan a / de una relación). Core Data es, por lo tanto, un marco ideal para construir el componente “modelo” de una architecture MVC.

Para implementar su gestión de gráficos, Core Data pasa a utilizar SQLite como una tienda de discos. Se podría haber implementado usando una base de datos relacional diferente o incluso una base de datos no relacional como CouchDB . Como otros han señalado, Core Data también puede usar XML o un formato binario o un formato atómico escrito por el usuario como back-end (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 back-end SQLite, es posible que desee verificar 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 de datos centrales utilizando PostgreSQL como back-end.

Debido a que Core Data no pretende ser un ORM para SQLite, no puede leer el 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 existe 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 contenedores de Objective-C como FMDB ) o un servidor de base de datos relacional. Sin embargo, es posible que desee aprender Core Data para usar como un 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 con el enlace clave-valor, puede implementar una architecture MVC completa con muy poco código.

Y con iOS 5.0 obtendrá el beneficio adicional de poder usar la sincronización de archivos de iCloud de forma gratuita si está utilizando Core Data. Si está utilizando SQLite directamente, tendrá que realizar muchos retoques manuales e implementarlo para que se sincronice en iCloud.

Core Data no es tanto un motor de base de datos como una API que abstrae sobre el almacén de datos real. Puede indicarle 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 cocoa.

SQLite es uno de los formatos de base de datos Core Data. Al utilizar Core Data obtiene una mejor integración con el rest de Cocoa API.