Redis, el ferrari de las bases de datos

redisRedis es una base de datos basada en clave/valor al estilo memcached, pero en la que sus datos son también guardados en disco, pudiendo usarla como reemplazo para MySQL y similares.

Está escrita en C y una de sus principales peculiaridades es su increíble velocidad, que en algunas pruebas le han llevado a marcar cifras como 110,000 operaciones SET  y  81,000 GETs por segundo en un ordenador básico con Linux.

Salvatore Sanfilippo, el creador de Redis, ha implementado un clon de Twitter para mostrar cómo se puede usar su base de datos desde PHP como reemplazo de MySQL y otras bases de datos y lo ha llamado Retwis. Según ha comentado, en breve escribirá un artículo para explicar al detalle el desarrollo de esta aplicación.

Redis (REmote DIctionary Server) , aunque aún en un estado muy prematuro de desarrollo, podría llegar a convertirse en alternativa para muchos proyectos que no necesitan de complejas estructuras de datos, pero si de cortos tiempos de respuesta ante elevadas cargas de tráfico.

Sin duda entran ganas de probarla. A mí se me ocurre más de un proyecto al que le vendría de perilla.

Vía Zend and the Art of Programming.

Guardar imagenes en mysql

Me ha vuelto a llegar de nuevo la pregunta de si es más interesante guardar las imágenes dentro de la base de datos o en el sistema de ficheros del Servidor.

Para todos aquellos que tengais dudas de cómo almacenar imagenes en MySQL, hace bastante tiempo escribí un artículo que os puede resultar interesante.

En general, mi experiencia sobre el tema me lleva a recomendar que se use el sistema de ficheros del servidor antes que guardar la imagen directamente dentro de la base de datos.

Algunos de los inconvenientes que me he encontrado:

  • lentitud en las consultas a la tabla que contiene las imágenes.
  • dificultad a la hora de recuperar las imágenes.
  • dificultad a la hora de exportar la información de la base de datos e importarla en otro servidor / base de datos.
  • sobrecarga del servidor (más pasos e instrucciones para conseguir algo que puede ser muy simple).
  • etc.

Además, el tener disponibles las imágenes en carpetas del servidor os permitirá usar de forma sencilla herramientas de redimensionado y retoque como la biblioteca GD o las de imagemagick.

Por lo tanto,  mi recomendación es – siempre que sea posible – evitar guardar las imágenes directamente en la base de datos.

Cinco errores comunes al programar con base de datos en PHP

Para aquellos que esteis comenzando con la programación usando base de datos y para los que llevais un tiempo pero no teneis una base sólida, los chicos de IBM nos traen un excelente artículo: “Five common PHP database problems“.
En el nos detallan cinco casos comunes de programación incorrecta de aplicaciones con base de datos. Sobre todo se centran en la base de datos más usada en la web: MySQL, pero valdría practicamente para cualquier gestor de bases de datos relacional.

Yo añadiría un problema con el que me he encontrado frecuentemente al resolver problemas en aplicaciones creadas por terceros: no definir los datos de conexión como una variable (o constante) global a la aplicación. De esta forma, si la aplicacion es trasladada a otra máquina donde no podemos conseguir el mismo nombre de base de datos y o usuario, nos vemos obligados a hacer el típico “search & replace” (buscar y reemplazar) para modificar todas las apariciones de la cadena de conexión (esto siendo optimistas y pensando que siempre se ha escrito de la misma forma).

En los proyectos más simples, yo suelo crear un archivo “config.php” que todos los demás scripts cargan en su inicio ( include (‘config.php’); ) y que contiene la cadena de conexión a la base de datos. Por ejemplo:

<?php
define ('DB_DSN', 'mysql://usuario:clave@localhost/basedatos');
?>