Login Barrapunto
No almacenar ficheros en bases de datos
Entrada escrita por fugaz y
editada por deal
el Lunes, 23 Mayo de 2011, 14:17h
desde el dept. las-cosas-bien-hechas
desde el dept. las-cosas-bien-hechas
Por favor, al diseñar un programa, no almacenar ficheros (imagenes escaneadas, PDF, documentos, etc...) en campos de la base de datos. Una Base de datos, es una base de datos, no un sistema de ficheros. Los ficheros (salvo contadas excepciones) se deben almacenar en un sistema de ficheros, que para eso están. La base de datos sólo necesita los campos de ruta y el nombre para llegar hasta el fichero. Ventajas de almacenar ficheros como ficheros: Backups mucho más rápidos. Tiempo de recuperación frente a desastre mucho más corto. Migraciones mucho más fáciles. Posibilidad de aumentar la cantidad de ficheros guardados, flexibilidad para moverlos. No tener una BBDD que crece descomunalmente. Menor ocupación en disco duro, ya que las BBDD no siempre liberan el espacio usado tras un delete (hay que compactar). Acceso mucho más facil a esos ficheros para otros programas. La seguridad es la misma, o mejor. ¿Y tú, cómo lo haces?
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.

No esta claro
(Puntos:5, Interesante)- Ten siempre una capa de abstraccion para el acceso a ficheros desde el código. Asi, podras ir cambiando, desde el sistema de ficheros a las bases de datos a ver cual se adapta mejor a tus necesidades.Mejor ser flexible que dogmatico, en informatica las necesidades varian.
- Ten en cuenta que la base de datos casi siempre es el cuello de botella de la aplicacion. No la sobrecarges inutilmente.
- Ext3 sufre a partir de 65000 ficheros por directorio. ojo
- Si optas por ficheros, el tema de la administracion, distribucion, replicacion entre varios servidores se complica, y hay que desarrollarla aparte del resto de la aplicacion. Muchos problemas y calentamientos de cabeza si los ficheros son dinamicos
- Tampoco el borrado en el sistema de archivos es la panacea, el borrado masivo siempre te tumbará el servidor, lo hagas donde lo hagas.
- controla siempre el iostat.
Por ahora, sirvo cientos de millones de ficheros y cambio de opinion cada dia, lo mejor es optar por meterlos en bbdd, pero siempre en un servidor aparte, con base de datos dedicada a tal fin.
Si y no
(Puntos:2)( http://www.cpsaez.com/ | Última bitácora: Miércoles, 07 Julio de 2010, 08:37h )
Under a sea of dust lies a vast wealth of wisdom
No entiendo la polémica
(Puntos:1, Inspirado)Y tu como lo haces? Yo los almaceno en la BBDD
(Puntos:2)( http://alacantilado.blogspot.com/ )
Trabajo en un entorno que trabaja por capas.
- Varios servidores Apache, en máquinas diferentes
- Varios servidores de aplicaciones (SA), en máquinas diferentes
- Base de datos enorme con varios nodos
Si almacenase los ficheros como 'ruta+nombre' ¿donde los guardo?, ¿una copia en cada nodo de los SA?.Prefiero almacenarlos en la base de datos.
Las bases de datos tienen campos para eso.
El inconveniente que ves tu de las copias de seguridad yo lo veo una ventaja. Necesito copias de seguridad de esos ficheros y la BBDD se encarga de ello.
Lo que hay que tener claro es donde se guardan las cosas. las bases de datos grandes permiten trabajar con varios tablespaces. Mete los ficheros en un tablespace especial, con tamaños de bloque adecuado, y con una política de copias diferente.
Lo cierto es que cada aplicación es un mundo, y no se puede dar una orden tan tajante como la que tu has dado, hay que estudiar caso por caso.
Todo depende
(Puntos:3, Interesante)( http://www.gnuinos.org/ )
En mi empresa, por ejemplo, difícilmente podríamos introducir los ficheros en la base de datos. La nuestra ya ocupa alrededor de 300gb... imagina a dónde llegaríamos almacenando vídeos y fotografías...
Así, a botepronto, diría que suele ser aconsejable separar los ficheros de la base de datos aunque no lo afirmo de forma tajante.
Saludos
Prefiero los ficheros en la base de datos
(Puntos:1, Informativo)Pues opino lo contrario
(Puntos:1, Informativo)-) Las bases de datos están diseñadas para escalar, les dices hacia qué unidad quieres que crezcan y lo hacen solas. Además no tienen problemas con nombres de archivos, de directorios, de número de archivos dentro del directorio, etc, etc... Eso lo gestiona la base de datos internamente y tu te olvidas. Los sistemas de archivos se suelen ralentizar bastante al ir añadiendo archivos en una misma carpeta y hay que dividir el contenido en subcarpetas y acaba siendo una locura, tanto la estructura de directorios que te queda como el código que tienes que meter en la aplicación para gestionar todo esto.
-) Te evitas que algún administrador del sistema te renombre algún directorio o te mueva algún archivo y la líe parda.
-) Copias de seguridad. Tengas los archivos dentro o fuera de la base de datos, tienes que hacer backups. Si los tienes dentro, un único sistema de backups te soluciona el problema. De la otra forma, tienes que tener dos, uno para la base de datos y otro para los archivos. Si quieres replicar la base de datos, también en un paso solucionas la replicación de los datos y los ficheros.
-) Seguridad. Como comentan por ahí arriba, tienes la seguridad de la base de datos y punto. De otra forma, tienes que replicar la seguridad para el acceso a la base de datos y al servidor o carpeta de archivos.
En resumen, solo les recomiendo almacenar los archivos fuera de la base de datos a mis mejores enemigos.
+1 en bbdd
(Puntos:1)En mi caso desarrollo webs para una multinacional que tiene un hosting que no nos permite escribir en disco. Además hay varios servidores web y sólo comparten entre ellos la bbdd.
Asi que usar la bbdd para ficheros y una cache a nivel de aplicacion web ha resultado una buena opción.
Elección de la BB.DD.
(Puntos:1)( http://www.voluntariado.net/ | Última bitácora: Domingo, 03 Julio de 2011, 16:21h )
Seek de archivos
(Puntos:1)Por favor, al enviar una noticia prepotente...
(Puntos:3, Informativo)( http://www.cientifico.net/ | Última bitácora: Martes, 22 Junio de 2004, 13:46h )
Por favor, al diseñar un sistema (que puede y suele contener varios programas), estudia las opciones, y sus ventajas e inconvenientes e ignora comentarios sin argumentos demostrables de barrapunto.
Falso de nuevo. Una base de datos es una base de datos. Si tu mismo lo repites, te debería quedar claro. Una base de datos es una colección de datos, y el sistema de archivos podríamos hablar que es una de las bases de datos más extendidas.
Falso. Depende de para que se necesiten, la velocidad de acceso que se requiera, el ancho de banda que se necesite, la disponibilidad, el número de réplicas necesario, la forma de actualizar ese archivo, se puede optar por cualquier sistema. Por ejemplo, en couchdb es muy normal guardar archivos adjuntos en los documentos, y es más, se recomienda su uso.
También podría necesitar el nodo en el que está almacenado. A veces tirar por almacenar en la base de datos solo referencias, te hace incrementar mucho el nivel de complejidad del sistema, ya que no hay integración entre el sistema de archivos y la aplicación, si se borra un archivo desde otra aplicación, hay que modificar esa aplicación, para que además de borrar ese archivo, actualice la base de datos. Y pregunto. Si no se borra de la base de datos, y si del disco, hay que hacer un rollback, si pasa al reves... ¿Qué hacemos?
A veces esa opción añade más complejidad al sistema.
Totalmente falso.
Bases de datos como mongodb (si quieres con gridfs), ya distribuyen y duplican contenido, quitando la necesidad de hacer backups, por lo que no es que sea más rápido usar una base de datos, es que no hay que hacer nada.
Recuperación. En caso de que algún nodo caiga, el contenido está replicado en otros servidores, por lo que simplemente se replica a otro nodo. Luego no hace falta restaurar. Una vez más, el no hacer nada es más rápido que el hacerlo.
Migraciones. Depende de que a que se quiera migrar, hacer migraciones de ext3 a gfs, implica un tiempo de replicación que puede implicar tener apagado el site completamente.
Depende del sistema de archivos que uses. Te invito a crear con ext3 un directorio con 60000 archivos y hacer un ls, aunque sea con >
Mueve un archivo entre sistema de archivos, o entre nodos. ¿Tal vez tienes que bloquear la aplicación hasta que el archivo aparezca en el otro nodo? Luego tienes que programar lógica adicional en la aplicación para trabajar con ficheres.
Define descomunalmente. Seguro que hay alguna solución.
¿y qué es un fichero?
(Puntos:2)¿QUÉ es un FICHERO?
¿¿¿???
En serio, ¿qué es un fichero?
¿Y de dónde sale toda esta ética SQL? "El deber"...
Wow.......
NoSQL
(Puntos:1)Interfaz e implementación
(Puntos:2)( http://chemaper.blogspot.com/ )
Hay base de datos que manejan muy bien contenidos grandes y la mayoría de implementaciones de SGBD están diseñadas para ser escalables y poder funcionar en arquitecturas distribuidas cambiando tan solo la configuración. Así mismo hay sistemas de ficheros distribuidos que también son muy escalables y tienen todo tipo de opciones para manejar répiclas, que van mucho más allá de lo que permite un NAS.
La ventaja de usar ficheros es que la interfaz es simple y se puede cambiar de sistema de ficheros sin cambiar la interfaz; pero muchas plataformas como Java te ofrecen acceso a SGBD con una interfaz bastante independiente de la implementación. Una desventaja de los sistemas de ficheros, es que si el sistema de ficheros es distribuido, en realidad el flujo de datos es menos directo: en lugar de conectar directamente al servidor, se hace llamada al sistema operativo, que a su vez dirige a sistema de ficheros FUSE, que a su vez contacta con el servidor remoto. Así mismo el kernel hará su política de cacheado, pero puede funcionar mejor una ad-hoc.
Infinitivos y gramática
(Puntos:2)( http://barrapunto.com/ )
Gracias.
NabLa
No te dije que sería fácil. Te dije que sería la verdad.¿De dónde vendrá la rabia?
(Puntos:2)( http://www.gatogordo.es/ | Última bitácora: Sábado, 29 Mayo de 2004, 03:47h )
Este podría ser un tema tanto o más interesante que el original...
El Gato Gordo [gatogordo.es]
Es un criterio que depende de la aplicación.
(Puntos:2)( Última bitácora: Viernes, 17 Junio de 2011, 20:24h )
Dudo mucho que los ficheros los guarden en una base de datos, no existe en el mundo disco duro o array de discos duros lo suficientemente grande para guardar todo eso.
Otra cosa es si estas haciendo una aplicación de gestión de personal y quieres guardar la foto del empleado, aunque sea una empresa de 5000 empleados seguro que hay espacio de sobra con un disco duro de 800 o 900 gigas
--- 404 Firma no encontrada.
En la lógica del programa que accede a la bb
(Puntos:1)Re:Sistema de ficherso vs BDD
(Puntos:2)( http://barrapunto.com/ )