Almacenamiento de archivos en SQL Server

Es una vieja pregunta que sé, pero con SQL Server 2012 finalmente está bien almacenar archivos en la base de datos, ¿o deberían guardarse realmente en el sistema de archivos con solo referencias a ellos en la base de datos?

Si almacenarlos en la base de datos se considera aceptable en estos días, ¿cuál es la forma más efectiva de hacerlo? Estoy planeando aplicar el cifrado, así que agradezco que el proceso no sea muy rápido.

Gracias

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!

Todavía no hay una respuesta simple. Depende de tu escenario MSDN tiene documentación para ayudarlo a decidir.

Hay otras opciones cubiertas aquí. En lugar de almacenar en el sistema de archivos directamente o en un BLOB, puede utilizar FileStream o File Table en SQL Server 2012. Las ventajas de File Table parecen ser una tarea sin cerebro (aunque no tengo experiencia personal de primera mano con ellos .)

El artículo definitivamente vale la pena leerlo.

Puede leer en FILESTREAM . Aquí hay información de los documentos que lo ayudará a decidir:

Si las siguientes condiciones son verdaderas, debería considerar usar FILESTREAM:

  • Los objetos que se almacenan tienen, en promedio, más de 1 MB.
  • El acceso rápido a la lectura es importante.
  • Está desarrollando aplicaciones que usan un nivel medio para la lógica de la aplicación.

Para objetos más pequeños, el almacenamiento de BLOB varbinary (max) en la base de datos a menudo proporciona un mejor rendimiento de transmisión.