miércoles, 19 de mayo de 2010

NoSql

Las base de datos relacionales han sido populares desde hace decadas, resultaron ser una buena solucion pero la actualidad requiere algo mas eficiente, rapido, que consuma menos espacio y que sea mas facil de escalar.

Una solucion creciente desde los 90s ha empezado a popularizarse, son las base de datos NoSql, basadas en diferentes cosas como puede ser llaves, eventos, memoria o documentos.
Aplicaciones actuales que podemos ver utilizando este tipo de bases de datos son Twitter, Digg, y Facebook, los tres utilizando Cassandra db desarrollado por Facebook.

Cabe mencionar que esta solucion podria ser una de las tantas alternativas a las tradicionales RDBMS, otras alternativas son la administracion de datos con xml y las bases de datos orientadas a objetos.

MongoDB es una base de datos NoSql libre de esquemas, basado en json y orientado a documentos. Dentro de las opiniones de varios que han trabajado con Mongo destacan su mejora en el rendimiento, la reduccion en el espacio de disco duro y su escalabilidad.
El rendimiento al parecer lo obtienen aprovechando la memoria RAM, cargando los datos en ram y accediendolos desde ahi, aunque los datos en disco aparentemente son accesados igualmente rapido.
La reduccion de disco se explica al quitar el esquema, dicho de forma simple: Un metadato ocupa cierto espacio de memoria, al no usar metadatos no tenemos ese espacio desperdiciado, ademas al no estar casados con un esquema no hay valores nulos o espacios vacios que ocupan igualmente memoria.
La escalabilidad la justifican nuevamente con ser libres de esquema, debido a que hay atributos no fijos eston pueden variarse, modificarse y no es necesario migrar los datos para hacer cambios en esquema, simplemente se hacen los cambios.
Como funciona? Basicamente todo dentro de mongo es un documento dentro de una coleccion(una coleccion es lo que tradicionalmente seria una tabla), de esta forma todos los componentes estan separados y por ello ocupan espacios variables.

En mi experiencia personal el mongo es facil de aprender, muy veloz en sus consultas y comodo de usar, esta ligeramente mas enfocado a un programador mas que a un administrador de bases de datos debido a su libertad en esquema. Es facil de instalar y tiene modulos para trabajar con Ruby, php, java, javascript, c, c++, perl y python. Ademas, por ser un proyecto opensource la comunidad ha desarrollado drivers para muchos otros lenguajes entre ellos .net y smalltalk.

Pienso que aunque el uso creciente de bases de datos NoSql muestra muy buenos resultados, aun falta algunos años para que empiecen a ser la norma. Esto debido a que no cumplen con la prueba ACID (atomicidad, consistencia, aislamiento y durabilidad) y en las grandes aplicaciones y empresas la seguridad y disponibilidad son prioridad. Sin embargo precisamente por esa falta de cumplimiento es su mejora...

No hay comentarios: