2011-04-10 20 views
131

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 ...¿Está almacenando imágenes en SQL Server?

  • ¿Es esta una mala idea?

  • ¿Afectará el rendimiento de 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.

+2

¿Hay alguna nueva incorporación para este problema en 2017? ¿Esto sigue siendo válido a partir de hoy? –

Respuesta

195

Hay un documento muy bueno de Microsoft Research llamado To Blob or Not To Blob.

Su conclusión después de un gran número de pruebas y análisis de rendimiento es la siguiente:

  • si sus imágenes o documentos están típicamente por debajo de 256 K en tamaño, almacenándolos en una base de datos de la columna VARBINARY es más eficiente

  • si sus imágenes o documentos tienen 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 parte de la base de datos)

  • entre los dos, es un poco de una cara o cruz en función de su uso

Si usted decide poner sus imágenes en una tabla de SQL Server, recomendaría encarecidamente el uso de una tabla separada para el almacenamiento de los imágenes - no almacene la foto del empleado en la tabla de empleados - guárdelas 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, echa un vistazo a Files and Filegroup Architecture para 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 lo que necesita almacenar VARCHAR (MAX) o columnas 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 

Mira la Introducción de MSDN en grupos de archivos, ¡y juega con eso!

+0

¿Es esto algo bueno o malo ...? • si sus imágenes o documentos tienen generalmente 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 en proceso transaccional control y parte de la base de datos) – htm11h

+0

Gran respuesta. Si tiene ganas de explicar en detalle * por qué * recomienda utilizar una tabla dedicada para datos de imágenes, he [he creado una pregunta por separado en dba.SE] (https://dba.stackexchange.com/q/174678/ 5273). – Heinzi

10

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.

11

Caí en este dilema una vez, e investigué un poco en Google en busca de opiniones.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.

me encontré con una pregunta similar

MySQL BLOB vs File for Storing Small PNG Images?

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

creo que sirve

5

por lo que puede ser bueno para guardar las imágenes en la base de datos de un 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 usted. 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.

Tiene, por supuesto, 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.

Sólo mis 2 centavos.

+0

Buen punto. Las copias de seguridad de las imágenes son tan importantes como la copia de seguridad de la base de datos ... algunas veces incluso más. –

+0

También las imágenes en el sistema de archivos también necesitan permisos de red. –

Cuestiones relacionadas