No inherentemente, pero si tiene grandes BLOB obstruyendo sus tablas y caché de memoria, eso sin duda resultará en un impacto en el rendimiento.
Sí, este es un enfoque común. Por lo general, haría algo como tener carpetas con el nombre de cada tabla con la que están asociadas, que contengan nombres de archivos basados solo en la clave principal (idealmente, un número entero; ciertamente nunca nada enviado por el usuario).
¿Es esta una mejor idea? Depende. Hay ventajas de simplicidad de implementación al tener solo un único almacén de datos y no tener que preocuparse por darle al usuario web acceso de escritura a nada. Además, si hay varias copias de la aplicación ejecutándose (por ejemplo, equilibrio de carga activo-activo), entonces debe sincronizar el almacenamiento, que es mucho más fácil con una base de datos que con un sistema de archivos.
Si usa el sistema de archivos en lugar de un blob, la pregunta es, ¿obtiene el servidor web para servirlo señalando un alias en la carpeta?
- + es súper rápido
- + cachés bien
- - configuración adicional del servidor:directorio virtual; necesita la extensión de archivo adecuada para devolver el
Content-Type
deseado - - configuración adicional del servidor:es necesario agregar
Content-Disposition: attachment
/X-Content-Type-Options
encabezados para evitar que IE busque HTML como parte de las medidas anti-XSS
¿O sirve el archivo manualmente haciendo que un script del lado del servidor lo escupa, como tendría que servirlo desde un blob de MySQL?
- - es potencialmente lento
- - necesita un poco de manejo manual If-Modified-Since y ETag para almacenar en caché correctamente
- + puede usar los propios métodos de control de acceso de la aplicación
- + fácil de agregar encabezados correctos de tipo de contenido y disposición de contenido desde el script de publicación
Esta es una compensación para la que no hay una respuesta aceptada globalmente.