La mejor manera de agrupar fotos con app: archivos o en la base de datos sqlite?

Digamos que tengo una aplicación que te permite navegar a través de una lista de los coches que se encuentran en una base de datos Sqlite. Al hacer clic en un coche en el anuncio, se abrirá una vista con la descripción del coche y una foto del coche.

Mi pregunta es: ¿Debo mantener la foto en la base de datos como una columna de datos binarios en la fila de este coche específico, o debo tener la foto en algún lugar en el directorio de recursos? ¿Qué es mejor hacer? ¿Hay alguna limitación de Sqlite en términos de cuán grande puede ser una columna de datos binarios?

La base de datos será más o menos leer sólo y se incluye con la aplicación (por lo que el usuario no sería la inserción de los coches y sus fotos).

Esta es una decisión que se discute bastante. Y en mi opinión, es una cuestión de gusto personal. Bastante como vim / emacs, windows / Linux tipo de debates. No tan caliente.

Ambos lados tienen sus ventajas y desventajas. Cuando los almacena en una base de datos, no necesita preocuparse mucho por el nombre de archivo y la ubicación. La administración también es más fácil (elimina la fila (s) que contiene los BLOBs, y eso es todo). Pero los archivos también son más difíciles de acceder y es posible que necesite escribir código de contenedor de una forma u otra (por ejemplo, algunos de esos enlaces "download.php").

Por otro lado, si los datos binarios se almacenan como un archivo independiente, la administración es más complicada (debe abrir el archivo adecuado desde el disco construyendo primero el nombre del archivo). En los conjuntos de datos grandes puede encontrarse con cuellos de botella del sistema de archivos cuando el número de archivos en un directorio crece muy grande (pero esto puede evitarse creando subdirecciones fácilmente). Pero entonces, si los datos se almacenan como archivos, reemplazarlos se hace mucho más fácil. Otras personas también pueden acceder a él sin necesidad de conocer los internos (imagine, por ejemplo, un usuario que se divierte en la personalización de su interfaz de usuario).

Estoy seguro de que hay otros puntos que deben plantearse, pero no quiero escribir demasiado ahora …

Yo diría: Piense en las operaciones que le gustaría hacer con las fotos (y las limitaciones de ambos métodos de almacenamiento), y desde allí tomar una decisión informada. No hay mucho que pueda salir mal.

TX-Log y FS-Journal

En la investigación adicional encontré un poco más de información:

  • SQLite utiliza un registro de transacciones
  • Android utiliza YAFFS en los puntos de montaje del sistema y VFAT en la tarjeta SD. Ambos son (a lo mejor de mi conocimiento) no publicados.

No conozco la implementación exacta del registro TX de SQLite, pero es de esperar que cada operación INSERT / UPDATE realice dos escrituras en el disco. Puedo estar equivocado (depende en gran medida de la implementación de las transacciones), pero, francamente, no podría ser molestado en navegar a través del código fuente de SQLite. Se siente a mí como nos empezamos a partir pelos aquí (prematuro optimización nadie?) …

Como ambos sistemas de archivos (YAFFS y VFAT) no están registrados, no tiene operaciones de escritura "ocultas" adicionales.

Estos dos puntos hablan a favor del sistema de archivos.

Tenga en cuenta que esta información se debe tomar con un grano de sal. Sólo he superado los resultados de Google de YAFFS journaling y sqlite transaction log . Puede que haya perdido algunos detalles.

El tamaño MAX SQLite predeterminado para un BLOB o String es 2 31 -1 bytes. Este valor también se aplica a los bytes máximos que se almacenarán en una fila.

En cuanto a qué método es mejor, no lo sé. Lo que haría en su caso es probar ambos métodos y monitorear el uso de la memoria y su efecto en la vida de la batería. Tal vez usted encontrará el método de sistema de archivos tiene una clara ventaja sobre el otro en esa zona y la facilidad de almacenamiento en SQLite no vale la pena para su caso de uso, o tal vez encontrará el contrario.

  • SQLiteOpenHelper no puede llamar a onCreate?
  • Prueba de unidad de base de datos SQLite de Android
  • ¿Hay alguna posibilidad de sincronizar los datos de la tabla sqlite entre dos móviles android usando wi-fi
  • Cómo formatear la cláusula WHERE y '?' En una consulta SQLite?
  • Base de datos de diccionarios sin conexión para la aplicación de Android
  • ¿El depurador de Android trunca mensajes de depuración?
  • Lectura de transacciones no confirmadas en Android
  • Almacenamiento de datos de Android, Cuándo utilizar SqlLite y cuándo usar JSON, alternativas de Linq
  • Android - ¿Puedes actualizar un Cursor para los resultados de SQLite?
  • Cómo cifrar datos y almacenarlos en Sqlite Android
  • Ver base de datos SQLite en el dispositivo en Android Studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.