Core Data vs SQLite 3 [cerrado]


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 un cierto encanto, por lo que estoy considerando pasar algún tiempo para aprenderlo para usarlo en mi próxima aplicación.

¿Hay mucho beneficio en 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 Datos básicos cuando Apple no los usa para muchos de sus productos insignia aplicaciones como el correo.app o iPhoto.aplicación-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? Tal vez, como con la mayoría de las cosas, la pregunta es más profunda que solo el uso de uno sobre el otro?

Author: Jonas, 2009-02-07

4 answers

Aunque Core Data es un descendiente del Enterprise Object Framework de Apple, un mapeador objeto-relacional (ma) que estaba/está estrechamente ligado a un backend relacional, Core Data es no un OR. Es, de hecho, un marco de gestión de gráficos de objetos. Gestiona un gráfico potencialmente muy grande de instancias de objetos, lo que permite a una aplicación trabajar con un gráfico que no se ajustaría completamente a la memoria al introducir y sacar objetos de la memoria según sea necesario. Core Data también gestiona las restricciones en propiedades y relaciones y mantiene la integridad de la referencia (por ejemplo, mantener los enlaces hacia adelante y hacia atrás consistentes cuando se agregan/eliminan objetos 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 administración de gráficos, Core Data sucede para usar SQLite como un almacén de discos. Esto es puede se han implementado utilizando una base de datos relacional diferente o incluso una base de datos no relacional, tales 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 motor (aunque estas opciones requieren que todo el gráfico de objetos quepa en la memoria). Si está interesado en cómo se implementan los datos centrales en un backend SQLite, es posible que desee revisar el marco OmniGroup OmniDataObjects, una implementación de código abierto de un subconjunto de la API de datos centrales. El marco BaseTen es también una implementación del Core Data API usando PostgreSQL como backend.

Dado que Core Data no pretende ser un OR para SQLite, no puede leer esquemas SQLite arbitrarios. 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, utilice SQLite (directamente o a través de Wrappers 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 usarlos como un marco de administración de gráficos de objetos. En combinación con las clases de controladores de Apple y los widgets de vista compatibles con el enlace clave-valor, puede implementar una arquitectura MVC completa con muy poco código.

 277
Author: Barry Wark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-10 09:51:29

Y con iOS 5.0 obtienes el beneficio adicional de poder usar iCloud file-sync de forma gratuita si estás usando Core Data. Si está utilizando SQLite directamente, tendrá que ser una gran cantidad de retoques manuales e implementación para que se sincronice a través de iCloud.

 45
Author: strange,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-21 10:25:57

Core Data no es tanto un motor de base de datos como una API que se abstrae sobre el almacén de datos real. Puede indicarle a Core Data que se guarde como una base de datos sqlite, una plist, un archivo binario o incluso un tipo de almacén de datos personalizado.

Recomendaría aprender Datos básicos, ya que es un excelente recurso que acelera en gran medida muchas partes del desarrollo de aplicaciones de cacao.

 34
Author: Joel Levin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-07 09:30:23

SQLite es uno de los formatos de base de datos para Core Data. Utilizando Core Data obtienes una mejor integración con el resto de la API de Cocoa.

 12
Author: cefstat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-13 23:42:12