2010-12-06 30 views
10

Estoy implementando un proyecto que se ocupa de una cantidad significativa de imágenes.¿Almacena datos de imagen en una base de datos MySQL?

En su opinión, ¿cuáles son los pros contras/de los dos métodos siguientes:

  • necesito para almacenar miles de elementos, cada elemento como varias propiedades de cadena y una imagen.
  • Cada elemento como un ID (número entero)
  • tablas MyISAM
  • ¿Cómo le almacenar las imágenes:
    • enfoque 1: almacenar imágenes en un directorio y cada imagen nombrado como ID.jpg
    • enfoque 2: almacenar imágenes en la base de datos como un BLOB binario

Aplicando un enfoque de 1 puedo acceder a la imagen directa y eso es todo

<img src="same_directory/10.jpg" /> 

Aplicando un enfoque de 2, todavía puedo usar el HTML anterior, pero es necesario para redirigir esa jpg acceso a un script PHP que devolverá el verdadero imagen de la base de datos.

En términos de rendimiento, ¿cuál crees que es más rápido?

estoy dispuesto a acercarse a 1.

+2

En general, el almacenamiento de grandes BLOB en la base de datos realmente dificulta el rendimiento. Si todas las imágenes son archivos muy pequeños, no es tan malo. – Orbling

+0

Si todas las imágenes no son jpg comprimir antes de guardar en la base de datos. –

+0

posible duplicado de [¿Almacenar imágenes como archivos o en la base de datos para una aplicación web?] (Http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for- a-web-app) – shamittomar

Respuesta

1

estoy tentado a usar el primer método ya que no hay un valor real en estorbar encima de la base de datos con datos de imagen. (Obtención de los datos de la base de datos también será significativamente más lento que simplemente cargarlo fuera del disco.)

Sin embargo, como una sugerencia que puede ser que no desee almacenar la ruta completa en el disco a la imagen en la tabla de base de datos, para ayudar portabilidad en el futuro (es decir: simplemente almacene la porción de la ruta y el nombre de archivo en una carpeta base 'conocida').

2

El almacenamiento en el sistema de archivos es más rápido.

0

Mantenga los archivos de imagen como archivos de imagen en el servidor para reducir su carga de base de datos y permitir que el servidor maneje el almacenamiento en caché, etc. En general, realmente depende del tipo de imágenes de las que estamos hablando. Las miniaturas pequeñas (por ejemplo, para los iconos de archivo) no serían tan malas, pero no almacenaría imágenes completas en la base de datos. En general, supongo que el enfoque del sistema de archivos sería más rápido.

+0

Approach 1 es el ganador, al menos para mis requisitos ... – cmancre

0

Permite investigar el problema en el navegador web. Cuando carga una página con 10 imágenes guardadas en la base de datos. Tu navegador envía una nueva solicitud HTTP al servidor. Cada solicitud inicia la conexión de DB y el script del lado del servidor. O simplemente lea la imagen estática del sistema de archivos.

¿qué será más rápido?

Otra parte: obtenga datos del sistema de archivos o la base de datos. Si no usamos el caché para la base de datos (pero para 10 GB de imágenes, debe tener 10 GB de RAM para almacenar en caché estos datos). La base de datos y el servidor HTTP leen datos del sistema de archivos en cualquier caso. Pero creo que el navegador HTTP lee los datos más rápido que el servidor de la base de datos.

Solo una cosa es inconveniente para el almacenamiento de la base de datos: muy fácil migrar datos de un servidor a otro. Pero esto no es materia para el rendimiento del sistema.

Y no olvide hacer una ruta para imágenes como /a/b/c/abc.jpg - será más rápido para una gran cantidad de imágenes, luego coloque todas las imágenes en un directorio.

+0

No mencioné la subdivisión del directorio pero ya lo tengo en mente. – cmancre

5

ventajas de enfoque 1:

  • Recuperando la forma plana de archivos del servidor web es más rápido.
  • la mayoría de los servidores web probablemente sigan este enfoque.
  • el sistema de archivos es más rápido para el almacenamiento de archivos planos.

ventajas de enfoque 2:

  • Todos sus datos se mantienen en un solo lugar, si migra su sitio web/base de datos de las imágenes simplemente estarán allí
  • Es más fácil para ordenar/eliminar/etc ...
  • Dado que tiene que servirlo a través de un script PHP, puede realizar cosas adicionales como seguridad si es necesario o procesamiento de imágenes (obviamente puede hacer también está con el archivo sin formato, pero debe asegurarse de que no pueda eludir la seguridad dejando las imágenes en un directorio público ).

teniendo en cuenta el enfoque de rendimiento 1 es mejor proceder.

Cuestiones relacionadas