¿Almacenar imágenes en SQL Server?

He creado un pequeño sitio de demostración y en él estoy almacenando imágenes dentro de una columna de imagen 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. Este debe ser un dilema común que muchas personas han tenido. Me gustaría recibir algunos consejos y estaría feliz de cometer menos errores si pudiera.

Hay un documento realmente bueno 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 son típicamente inferiores a 256K de tamaño, almacenarlos en una columna VARBINARIA de base de datos es más eficiente

  • si sus imágenes o documentos son típicamente de más de 1 MB de tamaño, 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 complicado dependiendo de tu uso

Si decide colocar sus imágenes en una tabla de SQL Server, le recomiendo encarecidamente que utilice una tabla separada para almacenar esas imágenes; no almacene la foto de empleado en la tabla de empleados, consérvelas en una tabla separada. De esta forma, la tabla de Empleados puede mantenerse ligera, eficiente y muy eficiente, asumiendo que no siempre es necesario seleccionar la foto del empleado, como parte de sus consultas.

Para los grupos de archivos, consulte Archivos y Arquitectura de grupos de archivos para obtener una introducción. Básicamente, crearía su base de datos con un grupo de archivos separado para estructuras de datos grandes desde el principio, o agregaría un grupo de archivos adicional más adelante. Llamémoslo “LARGE_DATA”.

Ahora, cada vez 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:

CREATE TABLE dbo.YourTable (....... define the fields here ......) ON Data -- the basic "Data" filegroup for the regular data TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data 

¡Mire la introducción de MSDN en grupos de archivos y juegue con ella!

Caí en este dilema una vez e investigué un poco sobre las opiniones en google. Lo que encontré fue que, de hecho, muchos ven guardar imágenes en el disco mejor 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 archivo para almacenar pequeñas imágenes PNG?

Mi veredicto final fue que para cosas como una imagen de perfil, solo una pequeña imagen cuadrada que debe estar allí por usuario, mySQL sería mejor que guardar un montón de pulgares en el disco duro, mientras que para álbumes de fotos y cosas por el estilo, carpetas / archivos de imagen son mejores.

Espero eso ayude

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 .

Por qué puede ser bueno almacenar imágenes en la base de datos y no en un catálogo en el servidor web.

Ha creado 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. Han destruido el servidor y necesitan restaurarlo en un nuevo servidor. Ya no tienen acceso al servidor anterior. La única copia de seguridad que tienen es la copia de seguridad de la base de datos.

Por supuesto, tiene el origen y puede implementarlo en el nuevo servidor, instalar SqlServer y restaurar la base de datos. Pero ahora todas las imágenes se han ido.

Si ha guardado las imágenes en SqlServer todo funcionará como antes.

Solo mis 2 centavos.

Al almacenar 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. Use varbinary (max) en su lugar

https://msdn.microsoft.com/en-us/library/ms187993.aspx

Otra opción fue lanzada en 2012 llamada Tablas de archivos: https://msdn.microsoft.com/en-us/library/ff929144.aspx

    Intereting Posts