Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

¿Guardo archivos en base de datos o en servidor?

Estas en el tema de ¿Guardo archivos en base de datos o en servidor? en el foro de Bases de Datos General en Foros del Web. Re-posteo este tema por aca, porque en el foro gral casi no obtuve respuestas, espero que puedan ayudarme: Bueno, la pregunta es simple. Estoy desarrollando ...
  #1 (permalink)  
Antiguo 10/11/2008, 15:03
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
¿Guardo archivos en base de datos o en servidor?

Re-posteo este tema por aca, porque en el foro gral casi no obtuve respuestas, espero que puedan ayudarme:

Bueno, la pregunta es simple. Estoy desarrollando parte de un sistema donde los usuarios pueden subir uno o mas archivos. No es parte del núcleo del sistema. Es algo complementario, es decir, no se va a ser una funcionalidad tan usada.

Guardo los datos en BD o los dejo en el servidor y guardo el path en un campo de la base?

Creo saber cuales son los pro y contra más evidentes. Pero quizá hay cosas mas sutiles que no tengo en cuenta.

En principio me inclino por guardarlos en la base, porque:

-no son muchos archivos (aunque con el tiempo seran cada vez mas. Igual los archivos los guardo en una tabla exclusiva. No me afecta la performance gral, o si?)

-Es facil hacer un backup de TODO el sistema. Sin tener que bajar los archivos por separado. Es facil también excluír esa tabla y hacer un backup sin los archivos.

-Puedo modificar la estructura de archivos, mover el sistema o mudar de servidor sin problemas.

La estructura de tablas sería

tabla_Servicio (_id_, nro de orden, descripcion, ...)
tabla_vinculo_archivos (_id_servicio, _id_archivo) -->vinculo entre servicios y archivos.
tabla_archivos (_id_, nombre, tipo, data, tamaño)

Bueno, si alguien sabe apuntarme en la dirección correcta, se lo agradezco.

Saludos
__________________
Pasión por la Música
  #2 (permalink)  
Antiguo 11/11/2008, 11:37
Avatar de Lord Kazuky  
Fecha de Ingreso: junio-2006
Ubicación: 7F.00.00.01
Mensajes: 123
Antigüedad: 17 años, 10 meses
Puntos: 5
Respuesta: ¿Guardo archivos en base de datos o en servidor?

Ese es un eterno dilema. A veces es cuestión de gustos, pero hay que examinar las razones.

En la Web, alguna vez encontré un documento PDF en ingles que trataba eso mismo. Se mostraban pruebas hechas contra servidores MS SQL 2005 con archivos de distinto tamaño. (http://research.microsoft.com/resear...MSR-TR-2006-45)

En el documento se analizan como distintos aspectos como: el tamaño de los archivos, las operaciones de escritura, modificación, eliminación, el tiempo en el que los datos permanecen en el servidor.

Generalmente esos son los factores que vemos a simple vista. Hay otro que es consecuencia de todos estos y es la fragmentación de los datos. Explicaba el documento que tanto los sistemas de archivos como las bases de datos con el tiempo y con el uso intensivo siempre presentan fragmentación.

Creo y segun lo que entendi (Ojala alguien más experimentado me ayude con más argumentos a favor o en contra en estos puntos): Las bases de datos se fragmentan mucho más rápidamente con grandes cantidades de información que los sistemas de archivos. Posiblemente porque estos últimos están diseñados y optimizados para manejar y prevenir este problema. Pero como ventaja, las bases de datos, gracias a la indexación pueden encontrar la información mucho más rápido. Pero por culpa de esta misma los procesos de escritura o modificación podrían verse más lentos.

Al final de muchas pruebas la conclusión a la que llega es que es más eficiente utilizar bases de datos en vez de sistemas de archivos si el tamaño de los archivos es pequeño (menor a 256KB). Pero que si el tamaño es mayor a 1MB, es más eficiente el sistema de archivos (NTFS por lo menos). El rango entre 256KB y 1MB depende de que tan intensivo sea el trabajo sobre los archivos, entre más intensivo se supone que generará más fragmentación y la balanza se ira a favor del sistema de archivos.

Es un buen documento que hay que analizarlo y detallarlo más a fondo, lo puse por si a alguien le interesa.

Ahora en cuanto a mi experiencia, he trabajado con ambos tipos de implementaciones, es decir, guardando los archivos en el servidor y en la Base de Datos. Algunos aspectos que considero puedan llevarte a optar por una solución u otra:

Sistema de Archivos:
  • Es un esquema sencillo, fácil y rápido de implementar.
  • Cuando sean archivos muy muy grandes.
  • El motor de base de datos no tiene que trabajar tanto para devolver un archivo.
  • Los archivos se pueden acceder desde fuera del programa. Esto puede ser ventaja si digamos esos archivos se usan en otros programas; o desventaja si por ejemplo un virus infecta o daña los archivos.
  • Puede presentar problemas de integridad de la información si por ejemplo alguien cambia el nombre del archivo en el sistema de archivos pero en la base de datos se sigue manteniendo el anterior.
  • No se degrada con el tiempo. El desempeño del sistema se mantiene con el tiempo (según lo del documento).

Base de Datos:
  • Es un esquema donde la seguridad se puede implementar de forma más rápido. Porque para encontrar un archivo se necesita acceso a la base de datos y una consulta especifica.
  • Se reducen los problemas de integridad ya que toda la información sobre el archivo esta controlada por la tabla.
  • Hay que considerar todo lo que se necesita para obtener un archivo: obtener una conexión con el servidor de BD, efectuar una consulta, el servidor busca la información en sus tablas (en esta parte pasa de todas formas por el sistema de archivos, porque finalmente las tablas y bases de datos están físicamente en un archivo), devuelve la información encontrada al cliente. Y hay que tomar el tiempo de transferencia entre el cliente de la base de datos y el servidor de base de datos si no están en el mismo equipo.
  • Se degrada con el tiempo. El desempeño del sistema se puede degradar con el tiempo (según lo del documento).
Aspectos como la seguridad y el respaldo de datos, son independientes creo. Porque hay muchas alternativas de tener seguridad o inseguridad con ambas implementaciones al igual como muchas herramientas para hacer cómodamente el respaldo de la información.

Espero todo esto te sirva de algo ;)
__________________
Saludos.
"Cualquier tonto puede escribir código que un computador entiende. Los buenos programadores escriben código que los humanos pueden entender. ;)"
  #3 (permalink)  
Antiguo 11/11/2008, 12:10
Avatar de erlingfiallos  
Fecha de Ingreso: febrero-2005
Ubicación: Mexico ahora
Mensajes: 499
Antigüedad: 19 años, 3 meses
Puntos: 9
Respuesta: ¿Guardo archivos en base de datos o en servidor?

Dices que conoces los pros y los contras.. entonces creo que mientras tu BD no sea un gestor realmente potente y tu tengas el control de ese servidor.. es siempre mejor que guardar los archivos en carpetas..

El tema es complejo y polémico, pero me inclinaria por guardar los archivos fuera de la BD.
  #4 (permalink)  
Antiguo 11/11/2008, 12:39
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 16 años
Puntos: 5
Respuesta: ¿Guardo archivos en base de datos o en servidor?

Bueno, muchas gracias Kazuky por la respuesta tan detallada. Muy interesante el documento.

La verdad me ayudó mucho, porque la mayoría de los factores si bien los sospechaba, no lo tenía tan claro en mi mente.

Sinceramente, nunca trabajé con los archivos en la base, por eso también tenia ganas de experimentar en este pequeño proyecto. Además, van a ser archivos pequeños, que no tienen sentido fuera del proyecto.

Creo que para mi caso en particular, funcionaría bien la base de datos. De todas maneras, lo voy a seguir considerando.

Saludos
__________________
Pasión por la Música
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:16.