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.

  • Cómo probar proveedores de contenido en Android
  • Android - SQLiteException: near "=": error de sintaxis (código 1)
  • GreenDAO soporta múltiples relaciones entre tablas
  • Cómo limitar los datos añadidos por bucle en sqlite android
  • Los datos no se insertan en la base de datos Sqlite en android
  • Problema al mostrar nombres de elementos junto con imágenes que se almacenan en sqlite para android
  • Cómo obtener las cadenas de un cursor en Android?
  • Multi-parámetro en ActiveAndroid
  • Código de error SQLite 17
  • Android sqlite: cómo recuperar datos específicos de la columna en particular?
  • Android SimpleCursorAdapter no se actualiza cuando cambia la base de datos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.