Es una vieja pregunta que sé, pero con SQL Server 2012, ¿finalmente está bien almacenar archivos en la base de datos, o realmente deberían mantenerse 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 procesamiento no sea tan rápido como un rayo.
sql-server
EmpresaDroneFromSector7G
fuente
fuente
Respuestas:
Hay un artículo 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 suelen tener un tamaño inferior a 256 K, almacenarlos en una columna VARBINARY de la base de datos es más eficiente
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 forman parte de la base de datos)
entre esos dos, es un poco complicado dependiendo de su uso
Si decide poner sus imágenes en una tabla de SQL Server, le recomiendo encarecidamente utilizar una tabla separada para almacenar esas imágenes; no almacene la foto del empleado en la tabla de empleados; manténgalas en una tabla separada. De esa manera, la tabla de Empleados puede ser sencilla, mezquina y muy eficiente, asumiendo que no siempre es necesario seleccionar la foto del empleado también como parte de sus consultas.
Para 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, 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:
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
¡Consulte la introducción de MSDN sobre grupos de archivos y juegue con ella!
fuente
VARBINARY(MAX)
en un grupo de archivos separado, si tiene una tabla de "archivos" separada, ¿simplemente almacena esa tabla completa en el grupo de archivos separado o almacena los datos "meta" del archivo en los grupos de archivos estándar y simplemente almacena los datosVARBINARY(MAX)
en el nuevo grupo de archivos?FILETABLE
función en SQL Server 2012? Allí, solo los metadatos sobre el archivo se almacenan dentro de SQL Server (como conFILESTREAM
) - el archivo real (los bytes que lo componen) se almacenan fuera de la base de datos, en una unidad de discoHay todavía hay una respuesta sencilla. 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 usar FileStream o File Table en SQL Server 2012. Las ventajas de File Table parecen ser algo obvio (pero es cierto que no tengo experiencia personal de primera mano con ellos .)
Definitivamente vale la pena leer el artículo.
fuente
Puede leer sobre FILESTREAM . Aquí hay información de los documentos que debería ayudarlo a decidir:
fuente