2009-04-03 17 views
22

Duplicar posible:
Storing Images in DB - Yea or Nay?¿Debo guardar mis imágenes en la base de datos o en las carpetas?

Hola

En el momento de cada empresa en mi sitio web que tiene 1 imagen que puede añadir a su perfil. Guardo esa imagen en la base de datos ... es el logotipo de su empresa.

Ahora quiero permitirles que agreguen más imágenes. Ahora no sé si debo guardarlo todo en la base de datos o guardarlo en carpetas ???

La razón por la que creo que las carpetas serán mejores es porque hay tantos artículos bonitos con luces plateadas extravagantes que puedo usar, pero todos solo atienden las imágenes guardadas en carpetas.

Y como yo no soy tan bueno, es difícil para mí cambiar el código para mirar la base de datos en lugar de los ejemplos que usan carpetas para la recuperación de imágenes.

Me gustaría agregar algo como esto a mi sitio web (navegar a través de las imágenes). ¿Algún código de ejemplos para mí sobre cómo hacer esto cuando las imágenes se guardan en la base de datos? Estoy usando ASP.NET con VB.net. Click here to view what i am talking about

¿Alguna idea, chicos?

Saludos Etienne

Respuesta

13

Lo he hecho en ambos sentidos recientemente. Prefiero usar el método de directorio para almacenar las imágenes mientras mantengo sus propiedades en un DB.

Motivo principal: tenía un cliente para el que hice un sitio web. Había una sección de galería de fotos que les permitía subir nuevas fotos que podían ser vistas desde el sitio público. Mi cliente no pensó en optimizar sus imágenes antes de subirlas. Así que básicamente cada .jpg tenía más de 1mb. Agregué la capacidad de actualizar una imagen una vez que se guardó en la base de datos pero tenía que hacerse un registro a la vez.

Si sucediera lo mismo al almacenar las imágenes en un directorio, los archivos se podrían guardar localmente, optimizar y volver a colocar en el servidor.

Here is an example

13

me gustaría ir para las carpetas. Más flexibilidad si se queda sin espacio de almacenamiento (simplemente muévalos a otro disco y vuelva a enfocar), más flexibilidad con otras aplicaciones (por ejemplo, Silverlight). Solo usaría DB para archivos que tenían que ser seguros.

+1

¿Qué quiere decir con "seguro" en cuanto a almacenarlos en la base de datos? – IrishChieftain

+2

Suponiendo que su base de datos está asegurada de manera efectiva, proporciona una capa adicional. El atacante necesita identificar las imágenes que se almacenan en SQL, identificar servidor, nombre de usuario/contraseña, tabla. Simplemente escanear un sistema de archivos en una máquina comprometida no arrojará resultados y un sitio web mal escrito no expondrá los archivos a través de técnicas de solicitud HTTP (por ejemplo, dejando archivos descargables). Funciona aún mejor si SQL Server está en una máquina/red separada. –

3

El enfoque que generalmente uso es copiar imágenes en una carpeta y mantener las direcciones URL relativas en la base de datos. La desventaja de este enfoque es que si alguien elimina las imágenes, termina con "imagen no encontrada" en sus páginas web, a menos que lo compruebe cada vez que renderice una página.

2

Tenía la misma pregunta para mi sitio también. Decidí usar la implementación de la carpeta, porque si usas la base de datos, cuando deseas hacer una copia de seguridad de las fotos debes hacer una copia de seguridad de toda la base de datos ... por otro lado puedes mantener la estructura del directorio y hacer una copia de seguridad fácil .

Separar cosas mi amigo, mis mejores deseos!

5

Para cualquier sitio normal, absolutamente desea esto como parte de la aplicación del sitio en sí, no almacenado en una base de datos. Un sitio web debe contenerse tanto como sea posible para mantenerlo portátil, y no agregar viajes redondos al DB (incluso en el almacenamiento en caché) solo puede ser algo bueno. Los servidores web son muy buenos para servir archivos de imagen.

Sin embargo, personalmente estoy trabajando en una aplicación donde las imágenes se crean dinámicamente y se ponen a disposición del sitio a través de una segunda aplicación de administración. Claramente, estos deben estar respaldados por DB de alguna forma para mantener las imágenes mantenibles y seguras.

En pocas palabras, donde las imágenes tienen valor comercial (es decir, son contenido, necesitan seguridad o son dinámicas), tendrá que almacenarlas en una base de datos. Donde son estáticos y triviales, que el sitio web sea un sitio web.

+0

Si se crean dinámicamente, ¿por qué almacenarlos? –

+1

para reutilizar: es mucho más barato usar una imagen existente que crear la misma cada vez – annakata

1

La ventaja de utilizar carpetas es que no necesita tener un controlador personalizado que saque esos BLOB de una base de datos y los convierta en flujos normales. También es más sencillo alojarlos desde diferentes ubicaciones y evitará la carga en el servidor de la base de datos.

Debe tener cuidado con el almacenamiento de las rutas. Las rutas de acceso relativas funcionan mejor como URL y le permitirán cierta flexibilidad y escalado en el lugar donde las almacena, cómo las sirve, etc.

0

Iré por ambos.

Primero, almacene cada imagen como una columna BLOB en la base de datos. Al hacerlo, puede estar seguro de que la imagen siempre se incluye en la copia de seguridad de su base de datos (suponiendo que lo haga).

En segundo lugar, copie el archivo en la carpeta. Al hacerlo, puede evitar realizar consultas en la base de datos (para el archivo de imagen) cada vez. Almacenar en la carpeta solo puede tener consecuencias tales como

  • archivo pierde debido al disco dañado
  • archivo no están incluidos en la operación de copia de seguridad

Hasta ahora todos los proyectos de nuestros clientes están tomando el mismo enfoque y hemos encontrado varios problemas, pero no se han perdido archivos cargados. (Estamos hablando de> 100 GB de documentos cargados).

Nota, es posible que desee ver en la siguiente:

  1. Asegúrese de que cada vez que se actualiza el archivo/reemplazar, hacerlo tanto en la base de datos y la carpeta. De lo contrario, será inconsistente.
  2. Es posible que desee tener una tabla separada para almacenar la información del archivo. Normalmente, es posible que desee almacenar lo siguiente: (1) nombre de archivo (2) tipo de archivo (3) tamaño de archivo/tipo mime
  3. Es posible que desee dividir las tablas que almacenan datos. Nuestra práctica es que una vez que la tabla alcance los 2GB, creamos otra tabla. Diseñado correctamente, no debería haber ningún problema para encontrar la mesa correcta.

Espero que esto ayude.

4

Dos pensamientos sobre esto:

  1. utilizar el sistema de archivos. Pero asegúrese de diseñar su esquema lo suficientemente bien como para que cualquier carpeta no se sobrecargue con imágenes y se convierta en una pesadilla para administrar. Por ejemplo, puede ramificarlo con la primera o la última letra del identificador, o la siguiente notación posicional. Su millaje variará, así que asegúrese de que el esquema se ajuste a su tamaño de conjunto de datos (imágenes). No necesita ir a longitudes detalladas si solo está administrando, digamos, 20 imágenes.

  2. Use SQL Server 2008. Tiene un nuevo tipo de datos llamado filestream, mientras que guardará las imágenes en el sistema de archivos pero le permitirá recuperarlas mediante consultas de bases de datos estándar. Consulte http://msdn.microsoft.com/en-us/library/cc949109.aspx para obtener más información.

Estas no son elecciones exclusivas, pero por lo menos, me gustaría recomendar la opción # 1 por el hecho de pura que obtendrá un mejor rendimiento de la utilización de un sistema de archivos basado en esquema en lugar de almacenar y leyendo blobs de una base de datos.

4

pienso guardar las imágenes en carpetas del sistema es la mejor manera.
trabajando con DB y las consultas que usted sabe causarán algunas sobrecargas y las transiciones de DB generalmente son pesadas y pueden poner más estrés en su servidor.
con la forma de guardar las imágenes en carpetas y simplemente colocar las URL en DB es más adecuado para las cargas de su aplicación.
pero la ventaja de DB es que puede hacer copias de seguridad de sus imágenes.


Mi sugerencia: guardar las imágenes en carpetas. la única necesidad es conocer las operaciones de E/S del sistema.

2

AFAIK, flickr.com va con carpetas/servidor de archivos también con la referencia, metadatos, etc. almacenados en db. Ver flickr architecture

Cuestiones relacionadas