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 ;)