He experimentado en diferentes proyectos haciéndolo en ambos sentidos y finalmente hemos decidido que es más fácil usar el sistema de archivos también. Después de todo, el sistema de archivos ya está optimizado para almacenar, recuperar e indexar archivos.
El único consejo que tengo sobre eso es almacenar solo una ruta "raíz relativa" al archivo en la base de datos, luego haga que su programa o sus consultas/procedimientos almacenados/middleware utilicen un parámetro raíz específico de la instalación para recuperar el archivo.
Por ejemplo, si almacena XYZ.Wav en C: \ MiPrograma \ Data \ Sounds \ X \ la ruta completa sería
C:\MyProgram\Data\Sounds\X\XYZ.Wav
pero sería almacenar la ruta y nombre de archivo o en la base de datos como :
X\XYZ.Wav
otra parte, en la base de datos o en los archivos de configuración de sus programas, almacenar una ruta de raíz como SoundFilePath igual a
C: \ MiPrograma \ Data \ Sounds \
Por supuesto, donde usted divide la raíz de la ruta de la base de datos depende de usted. De esta forma, si mueve la instalación de su programa, no tiene que actualizar la base de datos.
Además, si no van a ser un montón de archivos, encontrar alguna forma de hash de los caminos para que no terminará con un directorio que contiene cientos o miles de archivos (en mi ejemplo, hay subdirectorios basado en el primer caracter del nombre de archivo, pero puedes profundizar o usar hashes aleatorios). Esto hace felices a los indexadores de búsqueda también.
¡Buena publicación! No te estaba copiando, estaba escribiendo mi respuesta mientras publicabas :-) – CMPalmer
Esta implementación tiene problemas de escalabilidad, cuando obtienes más de 2 servidores web. – DreamWerx
La solución de escalabilidad en nuestro caso era un servidor dedicado para almacenar los archivos con un servicio web ejecutándose para su archivo y recuperación. Le das un archivo, lo almacena y te dice dónde lo puso. Cualquier número de servidores de aplicaciones front-end puede almacenar y recuperar archivos de él. – CMPalmer