2009-02-08 25 views
8

¿Es una buena idea almacenar grandes cantidades de texto (por ejemplo, páginas html) dentro de su base de datos SQL? ¿O es una mejor idea almacenarlo como archivos html en el sistema de archivos?texto grande e imágenes en SQL

Lo mismo ocurre con las imágenes: ¿es una buena idea almacenar datos de imagen en la base de datos o mejor colocarlos en el disco?

¿El almacenamiento de grandes cantidades de datos me puede causar problemas de rendimiento, por ejemplo? ¿Cuáles son los pros y los contras de cada método de almacenamiento?

En cuanto al tamaño de los datos, en este caso estoy buscando en la región de "unas pocas páginas" de HTML y de imágenes de menos de 500 kb de tamaño (aunque probablemente sean mucho más pequeñas). Suficiente para producir su página web de escala promedio de artículo/entrada de blog/etc.

Respuesta

7

Almacenar datos binarios (documentos, imágenes, etc.) en la base de datos tiene algunas ventajas.

  • puede comprometerse la actualización del documento en sí en la misma transacción que la información (nombre, fecha, etc) que desea almacenar sobre el documento. Esto significa que no tiene que preocuparse de escribir su propia confirmación en dos fases (aunque ISTR dice que SQL Server 2008 tiene una solución para esto).

  • Puede copia de seguridad de todo el lote (documentos y metadatos) a la vez, sin preocuparse de tener que sincronizar la base de datos con el sistema de archivos

  • Puede entregar documentos muy simple sobre los servicios web .NET, ya vienen directamente a DataTables, y se serializan sin esfuerzo con solo poner DataTables en un DataSet y pasarlo.

  • Puede aplicar la seguridad de la base de datos a los objetos, como al resto de sus datos, y no tener que preocuparse por los permisos del archivo de red.

tiene algunas desventajas también:

  • copias de seguridad pueden ser muy grandes

  • El tamaño del objeto binario en la base de datos puede ser un poco mayor que el archivo se originalmente, y por lo tanto en un entorno cliente-servidor, puede aumentar el tiempo necesario para abrirlos en la red.

  • Dependiendo de la aplicación, puede que tenga que considerar la carga en el servidor de la base de datos si tiene que entregar una gran cantidad de documentos de gran tamaño.

Dicho todo esto, es una técnica que uso ampliamente, y funciona muy bien.

2

Cuanto más se ponga, más se moverá, por lo que se generará más sobrecarga.

Si tiene un gran servidor web, no tiene sentido agregar todo el estrés adicional a la base de datos sin motivo alguno, cuando puede delegar todo ese estrés en el servidor web.

Incluso desde el punto de vista del mantenimiento, es mucho más fácil moverse y trabajar con los archivos en una buena estructura lógica en lugar de trabajar constantemente con la base de datos.

1

Es una cuestión de tamaño. Depende de qué tan grande sean realmente tus imágenes/texto.

Almacenar estos valores en un DB tiene muchas ventajas sobre un enfoque basado en el sistema de archivos, pero en un cierto punto se vuelve ineficiente. Por ejemplo, no almacenaría imágenes de muy alta resolución en un DB.

Así que es una cuestión de grado, y eso, a su vez, significa que la respuesta depende de los recursos de HW y de la arquitectura de su sistema. Entonces, no creo que haya una respuesta correcta para su pregunta. Tal vez podría decirnos más sobre los detalles de lo que intenta almacenar y cómo son sus servidores.

1

Creo que podría argumentar cualquier lado, pero vengo del lado de que gran cantidad de texto está bien (y así se puede buscar), pero las imágenes deben almacenarse como archivos separados con enlaces en la base de datos. Nunca he encontrado una razón convincente para almacenar imágenes en la base de datos, aunque es posible.

0

Era uno de mis dilemas cuando solía programar PHP. Almacenar imágenes como blobs en la base de datos puede facilitar la administración de la seguridad y los permisos, pero es costoso. Siempre solía almacenar algunos metadatos en la base de datos y los contenidos binarios en el sistema de archivos. El acceso a las imágenes no fue directo (<img src="image/path" />), pero fue proporcionado por scripts PHP que verificaron la autenticación del usuario y las autorizaciones a través de sesiones antes de mostrar la imagen (<img src="showimage.php?id=$id" />). Te sugiero que lo hagas (cualquier tipo de aplicación en la que estés trabajando).

1

Algo más a tener en cuenta es la frecuencia con la que estos grandes pedazos de texto e imágenes van a cambiar. Los cambios en los datos son los que causan la fragmentación. La fragmentación puede ocurrir tanto en sus archivos de datos como en la estructura de su base de datos. Un sistema de archivos es mucho más adecuado para manejar la fragmentación que una base de datos. Cuanto más a menudo cambie un archivo, más rápido se fragmentará el sistema.

1

texto tienda en la base de datos

Sí, se debe almacenar la mayor cantidad de contenido HTML en la base de datos que pueda => simplifica la copia de seguridad. Probablemente deberías usar un sistema de plantillas para que no almacenes toda la estructura de la página web con cada documento, solo almacena el contenido que varía de una página a la siguiente en la base de datos.

En la práctica, la mayoría de los sitios web que hemos implementado no superan los 10 MB de contenido de texto (utilizamos nuestro propio sistema de plantillas personalizadas). 10 MB de texto puro es una gran cantidad de contenido (aunque no lo crean)

almacenar imágenes en el sistema de archivos

En general, es sólo una mala idea para almacenar las imágenes en la base de datos porque se pierde la capacidad de intercambiar fotos rápidamente con FTP.

El mantenimiento será más fácil de esta manera también. Logos, fotos de artículos y gráficos de apoyo cambian mucho durante la vida de un sitio web. A diferencia del texto, no se pueden copiar y pegar exactamente datos binarios de las fotos en un editor de base de datos ....

Además, si su base de datos se corrompe, lo que ocurre más de las veces, entonces tiene problemas si almacenar imágenes en la base de datos. Mientras que la corrupción del sistema de archivos solo afecta a un número limitado de archivos. La corrupción de la base de datos te enviará a buscar una copia de seguridad, y eso es una inyección de tiempo.