Pregunta

En general, ¿qué tan grave es el impacto en el rendimiento al almacenar un archivo en una base de datos (específicamente mssql) en comparación con el sistema de archivos?No se me ocurre ningún motivo fuera de la portabilidad de la aplicación por el que quisiera almacenar mis archivos como varbinarios en SQL Server.

¿Fue útil?

Solución

Eche un vistazo a esta respuesta:

Almacenamiento de imágenes en DB: ¿sí o no?

Esencialmente, el impacto en el espacio y el rendimiento puede ser bastante grande, dependiendo de la cantidad de usuarios.Además, tenga en cuenta que los servidores web son baratos y puede agregar fácilmente más para equilibrar la carga, mientras que la base de datos suele ser la parte más cara y más difícil de escalar de una arquitectura web.

Hay algunos ejemplos opuestos (por ejemplo, Microsoft Sharepoint), pero normalmente almacenar archivos en la base de datos no es una buena idea.

A menos que escriba aplicaciones de escritorio y/o sepa aproximadamente cuántos usuarios tendrá, pero en algo tan aleatorio e inesperado como un sitio web público, puede pagar un alto precio por almacenar archivos en la base de datos.

Otros consejos

Si puede pasar a SQL Server 2008, puede aprovechar el soporte de FILESTREAM que le brinda lo mejor de ambos: los archivos se almacenan en el sistema de archivos, pero la integración de la base de datos es mucho mejor que simplemente almacenar una ruta de archivo en un campo varchar.Su consulta puede devolver una secuencia de archivos .NET estándar, lo que simplifica mucho la integración.

Introducción al almacenamiento FILESTREAM

Yo diría que depende de tu situación.Por ejemplo, trabajo en el gobierno local y tenemos muchas imágenes, como fotografías policiales, etc.No tenemos una gran cantidad de usuarios, pero necesitamos tener una buena seguridad y auditoría en torno a los datos.La base de datos es una mejor solución para nosotros ya que lo hace más fácil y no vamos a tener problemas de escala.

¿Cuál es la pregunta aquí?

Los DBMS SQL2008 modernos tienen una variedad de formas de tratar con BLOB que no se limitan a colocarlos en una tabla.Por supuesto, existen pros y contras, y es posible que deba pensarlo un poco más a fondo.

Este es un artículo interesante, del difunto (?) Jim Gray.

BLOB o no BLOB:Almacenamiento de objetos grandes en una base de datos o un sistema de archivos

En mi propia experiencia, siempre es mejor almacenar archivos como archivos.La razón es que el sistema de archivos está optimizado para el almacenamiento de archivos, mientras que una base de datos no.Por supuesto, hay algunas excepciones (p. ej.(se supone que el tan anunciado sistema de archivos MS de próxima generación se construye sobre el servidor SQL), pero en general esa es mi regla.

Si bien el rendimiento es un problema, creo que los diseños modernos de bases de datos lo han hecho mucho menos problemático para archivos pequeños.

Dejando a un lado el rendimiento, también depende de qué tan estrechamente acoplados estén los datos.Si el archivo contiene datos que están estrechamente relacionados con los campos de la base de datos, conceptualmente pertenece a ella y puede almacenarse en un blob.Si contiene información que potencialmente podría relacionarse con múltiples registros o puede tener algún uso fuera del contexto de la base de datos, entonces pertenece al exterior.Por ejemplo, una imagen en una página web se recupera mediante una solicitud separada de la página que enlaza con ella, por lo que puede pertenecer al exterior (según el diseño específico y las consideraciones de seguridad).

Nuestro compromiso, y no prometo que sea el mejor, ha sido almacenar archivos XML pequeños en la base de datos, pero imágenes y otros archivos fuera de ella.

Tomamos la decisión de almacenar como varbinary para http://www.freshlogicstudios.com/Products/Folders/ a mitad de camino esperando problemas de rendimiento.Puedo decir que nos ha sorprendido gratamente lo bien que ha funcionado.

Estoy de acuerdo con @ZombieSheep.Solo una cosa más: generalmente no creo que las bases de datos deban ser portátiles porque se pierden todas las funciones que ofrece su proveedor de DBMS.Creo que migrar a otra base de datos sería lo último que uno consideraría.Sólo mis $.02

La sobrecarga de tener que analizar un blob (imagen) en una matriz de bytes y luego escribirlo en el disco con el nombre de archivo adecuado y luego leerlo es suficiente para disuadirlo de hacer esto con demasiada frecuencia, especialmente si los archivos son bastante grande.

No quiero ser vago ni nada por el estilo, pero creo que el tipo de "archivo" que almacenará es uno de los factores determinantes más importantes.Si básicamente te refieres a un campo de texto grande que podría almacenarse como un archivo, mi preferencia sería el almacenamiento en base de datos.

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