¿Almacenar imágenes en la base de datos o en archivos con un enlace de base de datos?


22

¿Es apropiado almacenar los archivos de imagen en la base de datos? ¿O sería mejor almacenar solo la ruta del archivo en la base de datos, mientras se mantiene el archivo en el servidor?

¿Hay otros métodos para hacer esto bien?

Respuestas:


22

Le recomiendo que almacene las imágenes en el sistema de archivos y no en la base de datos.

Almacenar imágenes en la base de datos tiene varias desventajas:

  • La base de datos puede crecer inesperadamente grande. A veces el espacio es un problema. Por ejemplo, con SQLServer express tiene un límite de 4 GB.

  • Las migraciones de datos pueden convertirse en un problema, por ejemplo, si cambia de SQLServer a Oracle

  • Las consultas pueden ser muy lentas y tendrá una alta carga de base de datos

  • La interoperabilidad con otras aplicaciones es mejor si las imágenes están en el sistema de archivos y otras aplicaciones usan una base de datos diferente. También puede acceder a ellos directamente y no necesita herramientas de base de datos.

  • Peor desempeño en general

  • Probablemente tendrá que crear archivos temporales cuando recupere las imágenes de la base de datos de todos modos. Eso es innecesario

Estas desventajas superan con creces el costo de mantener las rutas a las imágenes almacenadas en la base de datos sincronizadas con el sistema de archivos. Solo hay unos pocos casos especiales en los que es mejor almacenar las imágenes en la base de datos.


11

Investigue sobre SQL Server 2005 y el sistema de archivos NTFS (Microsoft) para comparar el rendimiento de CRUD: A BLOB o no a BLOB . Este estudio también se realizó en una aplicación web. Usted enumeró otra base de datos (MySQL) y supongo que no está utilizando Windows Server para su sitio PHP, por lo que sería interesante si alguien ha realizado un estudio similar sobre diferentes tecnologías.

Resulta que depende del tamaño de los archivos. SQL Server favorece (2 veces mejor) blobs de 256K o menos y el sistema de archivos favorece archivos de 1 MB +. Los sistemas de archivos en este estudio manejan la fragmentación mejor que la base de datos, por lo que si actualiza constantemente estos archivos o este sistema crece con el tiempo, la fragmentación será un factor más importante para que el sistema de archivos haga un mejor trabajo.

Debe determinar qué tan responsable es su sitio para mantener estos archivos. Si está construyendo un sitio para que los agentes de reclamos de seguros carguen fotos de un accidente, es mejor que tenga control de las transacciones y asegúrese de que esos archivos estén en el servidor. Las buenas bases de datos hacen esto por usted, por lo que como desarrollador, ha agregado presión.

La replicación, la copia de seguridad, la recuperación ante desastres, la fragmentación, la capacidad restante del disco y el rendimiento a lo largo del tiempo deben considerarse durante el diseño. Este es solo un estudio sobre la versión anterior de SQL Server y, al igual que otros fabricantes de bases de datos, supongo que manejar archivos grandes y archivos binarios es una arena competitiva importante.


También es posible que desee considerar soluciones integradas. Por ejemplo, en SQL Server hay FILESTREAM y Remote Blob Store .
Fernando Correia

4

Si va a tener una cantidad masiva de imágenes, almacenarlas en una base de datos podría eliminar los problemas de quedarse sin inodos en el nivel del sistema de archivos.

Sin embargo, este problema se resolvería mejor mediante el uso de un sistema de archivos más apropiado y las medidas recomendadas con ese sistema de archivos en la organización.

De lo contrario, almacenar imágenes en una base de datos es una pérdida total de recursos. Almacena el camino como dijiste.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.