El dia de hoy me toco hablar un poco con algunas personas sobre el problema de los archivos de aplicaciones si se guardan o no en la base de datos.

Supongo que fue por el archivo de barrapunto de la mañana. En el trabajo tenemos en este momento un servidor con 3 gb de espacio usado en archivos, donde la mayor parte corresponde a pdf generados y xml.

Este problema es mas extraño de lo que parece.

Si consideramos que muchas veces la gente habla de oidas, no se dan cuenta que el problema es otro.

Nuestra prioridad debe ser guardar información de manera segura, y poder revisar a través de bitácoras quien accede a la información. En este caso nos estamos basando en posibles bitacoras de apache mismas que evidentemente no tienen filtro de busqueda ni podemos hacer consultas relacionales sobre lo buscado.

En cambio los archivos que sirvo del sistema de repositorio(desarrollado por mi), puede saberse y filtrarse quien que cuando browser e ip. Esa información de acceso no esta disponible por archivos sueltos.

Por otra parte, si se hace por archivos sueltos incluso con ext4 ya hay baja de rendimiento cuando se manejan mas de 4000 archivos (y podemos darnos un tiro en el pie con inodes).

http://www.google.com/#sclient=psy&hl=es&site=&source=hp&q=inodes&aq=f&aqi=g5&aql=&oq=&pbx=1&bav=on.2,or.r_gc.r_pw.&fp=d2c6e4c2397eeac2

A la larga o a la corta se va a tener que migrar esta información a base de datos, probablemente mi propio repositorio. Nosotros no necesitamos filtrar el archivo, sino encontrarlo rápido y en niveles de archivos grande es mas rapido saber ruta directa por base de datos referencial.

Cosas a favor de base de datos con blobs:

1 ) posibilidad de restringir acceso por paises o usuarios a un registro.
2 ) Forma rapida de encontrar archivos duplicados (lo hice en el repositorio de semarnat con ORACLE guardando ademas del blob el md5_file )
3 ) respaldo en un solo paso. Solo respaldo de datos, porque los archivos de texto o imagenes ya estan en la base. Respaldas base de datos y no directorio.
4 ) Escalabilidad. Si se te llena el directorio en un sistema raid5, como amplias el disco duro si tienes un cluster de reserva ?
5 ) Si usas round robbin es mil veces mas simple sincronizar solo base de datos y ordenes sql que bases de datos y archivos.
6 ) Inodes.

Etc.