He creado un pequeño sitio de demostración y en él estoy almacenando imágenes dentro de una columna de imágenes en el servidor SQL. Algunas preguntas que tengo son ...
¿Es una mala idea?
¿Afectará el rendimiento en mi sitio cuando crezca?
La alternativa sería almacenar la imagen en el disco y solo almacenar la referencia a la imagen en la base de datos. Esto debe ser un dilema común que muchas personas han tenido. Agradecería algunos consejos y estaría encantado de cometer un error menor si pudiera.
sql-server
image
marko
fuente
fuente
Respuestas:
Hay un muy buen artículo de Microsoft Research llamado To Blob o Not To Blob .
Su conclusión después de una gran cantidad de pruebas de rendimiento y análisis es la siguiente:
Si sus imágenes o documentos suelen tener un tamaño inferior a 256 KB, es más eficiente almacenarlos en una columna VARBINARIA de la base de datos
Si sus imágenes o documentos suelen tener un tamaño superior a 1 MB, almacenarlos en el sistema de archivos es más eficiente (y con el atributo FILESTREAM de SQL Server 2008, todavía están bajo control transaccional y son parte de la base de datos)
entre esos dos, es un poco difícil dependiendo de su uso
Si decide colocar sus imágenes en una tabla de SQL Server, le recomiendo encarecidamente que use una tabla separada para almacenar esas imágenes, no almacene la foto del empleado en la tabla del empleado, guárdelas en una tabla separada. De esa manera, la tabla de empleados puede mantenerse delgada, mala y muy eficiente, suponiendo que no siempre tenga que seleccionar la foto del empleado, como parte de sus consultas.
Para grupos de archivos, consulte Archivos y arquitectura de grupos de archivos para una introducción. Básicamente, crearía su base de datos con un grupo de archivos separado para grandes estructuras de datos desde el principio, o agregaría un grupo de archivos adicional más adelante. Llamémosle "LARGE_DATA".
Ahora, siempre que tenga una nueva tabla para crear que necesite almacenar columnas VARCHAR (MAX) o VARBINARY (MAX), puede especificar este grupo de archivos para los datos grandes:
¡Mira la introducción de MSDN en los grupos de archivos y juega con ella!
fuente
Caí en este dilema una vez, e investigué bastante en Google para obtener opiniones. Lo que encontré fue que, de hecho, muchos ven que es mejor guardar imágenes en el disco para imágenes más grandes, mientras que mySQL permite un acceso más fácil, especialmente desde lenguajes como PHP.
Encontré una pregunta similar
MySQL BLOB vs File para almacenar pequeñas imágenes PNG?
Mi veredicto final fue que para cosas como una foto de perfil, solo una pequeña imagen cuadrada que debe estar allí por usuario, mySQL sería mejor que almacenar un montón de pulgares en el disco duro, mientras que para álbumes de fotos y cosas así, carpetas / Los archivos de imagen son mejores.
Espero eso ayude
fuente
Preferiría almacenar la imagen en un directorio, luego almacenar una referencia al archivo de imagen en la base de datos.
Sin embargo, si almacena la imagen en la base de datos, debe particionar su base de datos para que la columna de la imagen resida en un archivo separado.
Puede leer más sobre el uso de grupos de archivos aquí http://msdn.microsoft.com/en-us/library/ms179316.aspx .
fuente
Por qué puede ser bueno almacenar imágenes en la base de datos y no en un catálogo en el servidor web.
Ha realizado una aplicación con muchas imágenes almacenadas en una carpeta en el servidor, que el cliente ha utilizado durante años.
Ahora vienen a ti. El servidor ha sido destruido y necesitan restaurarlo en un nuevo servidor. Ya no tienen acceso al antiguo servidor. La única copia de seguridad que tienen es la copia de seguridad de la base de datos.
Por supuesto, tiene la fuente y puede simplemente implementarla en el nuevo servidor, instalar SqlServer y restaurar la base de datos. Pero ahora todas las fotos se han ido.
Si ha guardado las imágenes en SqlServer, todo funcionará como antes.
Solo mis 2 centavos.
fuente
Cuando almacene imágenes en SQL Server , no use el tipo de datos 'imagen' , según MS se está eliminando gradualmente en las nuevas versiones de SQL Server. Utilice varbinary (max) en su lugar
https://msdn.microsoft.com/en-us/library/ms187993.aspx
fuente
En 2012 se lanzó otra opción llamada Tablas de archivos: https://msdn.microsoft.com/en-us/library/ff929144.aspx
fuente
Si bien los problemas de rendimiento son válidos, las razones reales en la práctica por las que debe evitar almacenar imágenes en una base de datos son por razones de administración de la base de datos. Su base de datos crecerá muy rápidamente y las bases de datos cuestan mucho más que el simple almacenamiento de archivos. Las copias de seguridad y restauraciones de bases de datos son mucho más costosas y requieren más tiempo que las restauraciones de copias de seguridad de archivos. En caso de necesidad, puede restaurar una base de datos más pequeña mucho más rápido que una llena de imágenes. Compare 1 TB de almacenamiento de archivos en Azure con una base de datos de 1 TB y verá la gran diferencia en el costo.
fuente
En mi experiencia, almacenar en la url las imágenes almacenadas en otra ubicación es la mejor manera para un proyecto simple.
fuente