AOWS

Just another adrian’s weblog

Guardando ficheros en la base de datos

with one comment

Uno de los problemas que surge en muchos desarrollos web es la gestión de ficheros que los propios usuarios suben al servidor. La forma tradicional y también la más común es guardarlos físicamente en una subcarpeta de la aplicación y almacenar la ruta en la base de datos.

Sin embargo, existe un método alternativo que nos proporciona algunas ventajas para casos concretos. Las bases de datos relacionales (al menos las más recientes) incluyen entre los tipos soportados BLOB (Binary Large Objects), lo que nos permitirá almacenar los ficheros directamente en un campo de una tabla.

Ventajas de este último método:

  • Es una solución mucho más portable, simplemente hemos de hacer un backup de la base de datos y trasladarla al nuevo servidor sin preocuparnos de los archivos.
  • Integridad referencial: una posibilidad muy apetitosa, pues podemos sacar provecho entre otras cosas del borrado en cascada sin temor a que nos queden archivos “colgando”.
  • La gestión de los archivos en términos de programación resulta más sencilla.
  • Seguridad: el acceso al archivo requiere obligatoriamente de una conexión y de una consulta a través de un script que podemos modificar o impedir para evitar que un usuario consiga un fichero confidencial.

Desventajas:

  • Peor rendimiento: siempre será más rápido y eficiente leer el archivo directamente del sistema de ficheros. Utilizar base de datos no es una solución si se producen muchas lecturas.
  • El tamaño de la base de datos crece exponencialmente, lo cual en muchas ocasiones es inasumible (es el caso de hostings compartidos con espacio limitado).
  • Los navegadores no hacen uso de su caché (en el caso de las imágenes), aumentando también el tiempo de carga del sitio y el consumo de CPU.

También podemos optar por soluciones que aúnen ventajas de ambos métodos, por ejemplo almacenar los archivos en la base de datos y utilizar caché para el acceso a los mismos, actuando prácticamente como ficheros normales manteniendo las ventajas de almacenarlos en la BD (útil para imágenes).

Otra cuestión a tener en cuenta es el motor de tablas a usar si trabajamos con MySQL: ¿MyISAM o InnoDB? Como siempre no hay una respuesta acertada y única: mayor velocidad MyISAM, mejor rendimiento a la hora de modificar los datos InnoDB.

En fin, éste no pretende ser un artículo demasiado técnico ni explorar todas las posibles soluciones, sino que sirva simplemente de orientación en caso de estar dudando entre utilizar un método u otro. Por supuesto me puedo haber saltado alguna ventaja o desventaja, soy todo orejas🙂

Esta semana espero poder explicar brevemente en una entrada cómo utilizar esta solución con PHP y MySQL.

Written by adrian

24 septiembre, 2007 a 23:46

Publicado en Posts

Una respuesta

Subscribe to comments with RSS.

  1. […] Poco a poco y según el tiempo me lo permita intentaré ir vaciando la larga lista de borradores que tengo pendiente. Para empezar veremos cómo almacenar imágenes directamente en MySQL, un método que como habíamos visto tenía sus ventajas e inconvenientes. […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: