¿Qué ubicación de almacenamiento, SQL Server o sistema de archivos, daría lugar a un mejor rendimiento al guardar imágenes tiff?

StackOverflow https://stackoverflow.com/questions/1234551

Pregunta

Nuestro sistema necesita almacenar imágenes tiff de ~ 3k de tamaño. Recibimos ~ 300 imágenes en un momento dado y necesitamos procesarlas rápidamente. Una vez que se reciben ~ 100,000 imágenes, las imágenes se transfieren de nuestro sistema a otro sistema de archivo o se purgan.

Estoy buscando el mejor rendimiento con respecto al guardado inicial de los archivos de imagen. La tarea de transferir las imágenes para archivarlas es menos crítica para el rendimiento.

¿Qué ubicación de almacenamiento, SQL Server o sistema de archivos, daría lugar a un mejor rendimiento al guardar imágenes tiff?

¿Hay alguna otra consideración o problema a tener en cuenta?

¿Fue útil?

Solución

Almacenar las imágenes en el sistema de archivos le dará un mejor rendimiento. Solo necesita poner una entrada en una tabla de base de datos relevante para los archivos adjuntos de imagen tiff, y usarla para obtener la ruta de la imagen en el sistema de archivos.

Es posible que desee aumentar aún más el rendimiento al alojar las imágenes en un servidor web: IIS (si es relevante) y hacer que sus aplicaciones cliente (nuevamente si es relevante) las recuperen directamente desde allí.

Otros consejos

En mi experiencia, SQL Server ha sido decente al almacenar blobs en la base de datos. Siempre que siga las mejores prácticas relacionadas con consultas, normalización, etc., he descubierto que funcionan bien.

Por alguna razón, personalmente no quiero almacenar archivos PDF y DOC y JPG enormes en mi base de datos, pero eso es exactamente lo que hace Microsoft SharePoint, y lo hace bien.

Definitivamente consideraría poner blobs en mi base de datos.

La versión de SQL Server 2008 tiene una nueva característica llamada FILESTREAM. Parte de su documentación también tiene una sección sobre mejores prácticas , en el que la gente de MS dice que FILESTREAM debería entrar en juego si los objetos BLOB son generalmente más grandes de 1 MB.

Esa página de MSDN dice:

  

Cuándo usar FILESTREAM si el   las siguientes condiciones son ciertas, usted   debería considerar usar FILESTREAM:    - Los objetos que se almacenan son, en promedio, mayores de 1 MB. por   objetos más pequeños, almacenando   BLOB varbinary (max) en la base de datos   a menudo proporciona una mejor transmisión   rendimiento.

Entonces, supongo que con un TIFF de 3 KB, podría almacenarlo muy bien dentro de un campo VARBINARIO (MAX) en su tabla de SQL Server 2005. Dado que es incluso más pequeño que el tamaño de página de 8k para SQL Server, ¡eso encajará perfectamente!

También puede considerar colocar sus BLOB en su propia tabla y hacer referencia a su " base " fila de datos desde allí. De esa manera, si solo necesita consultar los datos base (sus entradas, varchars, etc.), su consulta no se verá afectada por los BLOB que se almacenan mezclados con otras cosas.

Marc

El sistema de catálogo satelital en INPE / Brasil almacena una referencia de imágenes tiff almacenadas en el sistema de archivos. Pero las imágenes son un poco más grandes: +/- 100 MB. Si el archivo debe mostrarse en el navegador, el código php lee el contenido tiff en el disco y lo dibuja.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top