Core Data es un marco de gestión de gráficos de objetos rico y sofisticado capaz de manejar grandes volúmenes de datos. La tienda SQLite puede escalar a bases de datos de tamaño de terabyte con miles de millones de filas, tablas y columnas. A menos que sus entidades mismas tengan atributos muy grandes o grandes cantidades de propiedades, se considera que 10,000 objetos es un tamaño bastante pequeño para un conjunto de datos. Al trabajar con objetos binarios grandes, revise Objetos de datos grandes binarios (BLOB).
objetos binarios grandes (BLOB) de datos
Si la aplicación utiliza Binary Large Object (BLOB), como datos de imagen y sonido, es necesario tener cuidado para minimizar los gastos generales. Si un objeto se considera pequeño o grande depende del uso de una aplicación. Una regla general es que los objetos más pequeños que un megabyte son pequeños o medianos y los que son más grandes que un megabyte son grandes. Algunos desarrolladores han logrado un buen rendimiento con 10 MB BLOB en una base de datos. Por otro lado, si una aplicación tiene millones de filas en una tabla, incluso 128 bytes podrían ser un CLOB (OBject Large Object) que debe normalizarse en una tabla separada.
En general, si necesita almacenar BLOB en una tienda persistente, use una tienda SQLite. Las otras tiendas requieren que el gráfico completo del objeto resida en la memoria, y las escrituras de la tienda sean atómicas (consulte Tipos y comportamientos de tienda persistentes), lo que significa que no manejan de manera eficiente objetos de datos grandes. SQLite puede escalar para manejar bases de datos extremadamente grandes. Si se utiliza correctamente, SQLite proporciona un buen rendimiento para bases de datos de hasta 100 GB, y una sola fila puede contener hasta 1 GB (aunque, por supuesto, leer 1GB de datos en la memoria es una operación costosa sin importar cuán eficiente sea el repositorio).
Un BLOB a menudo representa un atributo de una entidad; por ejemplo, una fotografía puede ser un atributo de una entidad Empleado. Para BLOB de pequeño a moderado (y CLOB), cree una entidad separada para los datos y cree una relación uno a uno en lugar del atributo. Por ejemplo, puede crear entidades de Empleado y Fotografía con una relación uno a uno entre ellas, donde la relación de Empleado a Fotografía reemplaza el atributo de fotografía del Empleado. Este patrón maximiza los beneficios de fallas de objetos (vea Fallas y Uniquing). Cualquier fotografía dada solo se recupera si realmente es necesaria (si la relación se cruza).
Es mejor, sin embargo, si puede almacenar BLOB como recursos en el sistema de archivos y mantener enlaces (como URL o rutas) a esos recursos. Luego puede cargar un BLOB cuando sea necesario.
+1 para el lado. No recuerdo dónde lo leí primero, pero hay una máxima que aprendí desde el principio que si estoy tratando de entender cuáles son las limitaciones de hacer algo, entonces lo estoy haciendo mal. –
@Philip Regan - Tenemos que guardar muchas imágenes, por lo que es mejor comprobarlo ahora mismo, en lugar de pensarlo más tarde. – itsaboutcode
Si está guardando imágenes, probablemente sea mejor guardarlas en archivos y almacenar una URL en dichos archivos en Core Data. El almacenamiento de grandes cantidades de datos binarios se realiza mejor en otros lugares. – paulbailey