2009-02-07 18 views
293

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 atractivo, por lo que estoy considerando pasar un tiempo para aprenderlo y utilizarlo en mi próxima aplicación.Datos principales frente a SQLite 3

¿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 los datos básicos cuando Apple no lo utiliza para muchas de sus aplicaciones más importantes, como Mail.app o iPhoto.app, sino que opta por las 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 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?

+1

¿Podría agregar un enlace a http://en.wikipedia.org/wiki/Core_Data para todo el mundo sin saber qué es eso? – RSabet

+7

¡Tenga en cuenta que Core Data ** no es ** y no debe utilizarse como base de datos! –

Respuesta

270

Aunque Core Data es un descendiente de Apple Enterprise Object Framework, un mapeador objeto-relacional (ORM) que estaba/está estrechamente ligada a un motor relacional, base de datos es no 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. Los datos principales también gestionan las restricciones en las propiedades y las relaciones y mantienen la integridad de referencia (por ejemplo, mantener los enlaces hacia adelante y hacia atrás coherentes cuando los objetos se agregan/eliminan a/desde 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 sucede para usar SQLite como una tienda de discos. Es podría se han 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 consultar 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 principales que utiliza PostgreSQL como back-end.

Dado 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 arquitectura MVC completa con muy código pequeño.

+10

Nota fmdb no es un ORM, solo un contenedor objc alrededor de sqlite3 C api – robottobor

+0

Gracias por la captura; Actualizaré la publicación. –

+0

¡Excelente respuesta, muchas gracias! –

9

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

30

Core Data no es tanto un motor de base de datos como una API que abstrae 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 recurso excelente que acelera en gran medida muchas partes del desarrollo de aplicaciones de cacao.

44

Y con iOS 5.0 tiene la ventaja adicional de poder usar la sincronización de archivos 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.

+6

Nota: [iCloud apesta con Datos básicos] (http://www.theverge.com/2013/3/26/4148628/why-doesnt-icloud-just-work) –

+3

Claro que sí, pero dado el orgullo y la alegría de Apple , con suerte, mejorarán las cosas en las próximas versiones de iOS. – strange

+2

Actualización (después de WWDC 2016) - Las capacidades de iCloud de Core Data están en desuso y probablemente se retiren en el futuro. Más: http://mjtsai.com/blog/2016/06/17/the-deprecation-of-icloud-core-data/ –

Cuestiones relacionadas