Vous êtes sur la page 1sur 3

El concepto NoSQL, o cmo almacenar tus datos en una base de datos no relacional

A estas alturas es extrao toparse con alguien que no haya odo hablar de NoSQL, ni que sea de pasada. No obstante, no todos los desarrolladores con los que trato habitualmente tienen claro el por qu de su popularidad, posiblemente debido a que no han tenido an la oportunidad de trabajar con alguno de los sistemas que se basan en este concepto. En la carrera de informtica, muchos hemos aprendido que los sistemas de bases de datos se clasifican mayormente en tres tipos: Las bases de datos relacionales, las orientadas a objetos, y las relacionales orientadas a objetos. Sin embargo, pronto nos dimos cuenta que, en la prctica, la mayora de los motores de bases de datos ms populares se basan en la arquitectura relacional, y todos ellos utilizan el lenguaje de consultas SQL (con variaciones) para operar con los datos. Tanto es as, que SQL se convirti con el paso de los aos en un estndar de facto, debido a su uso.

Por qu aparecen los sistemas NoSQL?


Las bases de datos relacionales no tienen nada de malo: Precisamente gracias al transcurso de los aos, hemos logrado aprender tcnicas bastante comunes para normalizarlas en la medida de lo posible, escalarlas segn crece la demanda, y utilizarlas como sistema de persistencia para almacenar informacin desde nuestro lenguaje procedural u orientado a objetos favorito (entre otros). La cuota de uso de software como SQLite, MySQL, PostgreSQL u Oracle, por poner cuatro ejemplos conocidos, es muy alta, encontrndose en la mayor parte de los desarrollos modernos. Pero lleg la web, el software como servicio, los servicios en la nube y las startups de xito con millones de usuarios. Y con todo ello llegaron los problemas de alta escalabilidad. Si bien los modelos relacionales se pueden adaptar para hacerlos escalar incluso en los entornos ms difciles, s que es cierto que, a menudo, se hacen cada vez menos intuitivos

a medida que aumenta la complejidad. Triples y cudruples JOINs en consultas SQL que asustan al ms pintado nada ms verlas, a veces poco eficientes, y sistemas de almacenamiento de resultados en cachs para acelerar la resolucin de las peticiones y evitar ejecutar cada vez estas pesadas operaciones, son el pan de cada da en muchos de estos proyectos de software. Los sistemas NoSQL intentan atacar este problema proponiendo una estructura de almacenamiento ms verstil, aunque sea a costa de perder ciertas funcionalidades como las transacciones que engloban operaciones en ms de una coleccin de datos, o la incapacidad de ejecutar el producto cartesiano de dos tablas (tambin llamado JOIN) teniendo que recurrir a la desnormalizacin de datos. Algunas implementaciones bien conocidas que podramos como NoSQL son: CouchDB, MongoDB, RavenDB, Neo4j, Cassandra, BigTable, Dynamo, Riak, Hadoop, y otras muchas.

Pero, en qu se diferencian exactamente?


Si tuvieramos que resumir las caractersticas comunes en estos sistemas, yo dira que son principalmente tres: Ausencia de esquema en los registros de datos, escalabilidad horizontal sencilla, y velocidad endiablada (aunque esto ltimo no siempre es cierto, pues muchos de estos sistemas an no estn suficientemente maduros). La primera caracterstica significa que los datos no tienen una definicin de atributos fija, es decir: Cada registro (o documento, como se les suele llamar en estos casos) puede contener una informacin con diferente forma cada vez, pudiendo as almacenar slo los atributos que interesen en cada uno de ellos, facilitando el polimorfismo de datos bajo una misma coleccin de informacin. Tambin se pueden almacenar estructuras de datos complejas en un slo documento, como por ejemplo almacenar la informacin sobre una publicacin de un blog (ttulo, cuerpo de texto, autor, etc) junto a los comentarios y etiquetas vertidos sobre el mismo, todo en un nico registro. Hacerlo as aumenta la claridad (al tener todos los datos relacionados en un mismo bloque de informacin) y el rendimiento (no hay que hacer un JOIN para obtener los datos relacionados, pues stos se encuentran directamente en el mismo documento). Con escalabilidad horizontal me refiero a la posibilidad de aumentar el rendimiento del sistema simplemente aadiendo ms nodos, sin necesidad en muchos casos de realizar ninguna otra operacin ms que indicar al sistema cules son los nodos disponibles. Muchos sistemas NoSQL permiten utilizar consultas del tipo Map-Reduce, las cuales pueden ejecutarse en todos los nodos a la vez (cada uno operando sobre una porcin de los datos) y reunir luego los resultados antes de devolverlos al cliente. La gran mayora permiten tambin indicar otras cosas como el nmero de rplicas en que se har una operacin de escritura, para garantizar la disponibilidad. Y gracias al sharding y a no tener que replicar todos los datos en cada uno de los nodos, la informacin que se mueve entre las distintas instancias del motor de base de datos no tiene por qu ser demasiado

intensiva. Por supuesto, seguiremos encontrndonos con problemas de escalabilidad inherentes al tipo de software que estemos construyendo, pero seguramente podamos resolverlos ms fcilmente con la ayuda de estas caractersticas. Por ltimo, muchos de estos sistemas realizan operaciones directamente en memoria, y slo vuelcan los datos a disco cada cierto tiempo. Esto permite que las operaciones de escritura sean realmente rpidas. Por supuesto, trabajar de este modo puede sacrificar fcilmente la durabilidad de los datos, y en caso de cuelgue o apagn se podran perder operaciones de escritura o perder la consistencia. Normalmente, esto lo resuelven permitiendo que una operacin de escritura haya de realizarse en ms de un nodo antes de darla por vlida, o disminuyendo el tiempo entre volcado y volcado de datos a disco. Pero claro, an as, existe ese riesgo.

Entonces, no es la panacea
Desde luego que no. Ninguna herramienta de software lo es. Pero s es cierto que en determinados entornos donde hemos de escalar rpidamente, es una solucin muy buena, en especial por el altsimo rendimiento que ofrecen. No en vano, hoy en da se utilizan ya muchsimo no slo como almacenamiento primario, sino tambin como sistema de persistencia para guardar cachs, analticas de uso, y otros datos para los que lo primordial es la velocidad. En un prximo artculo os hablar de una implementacin de un sistema NoSQL que cada vez es ms conocido, y poco a poco se est convirtiendo en uno de mis favoritos: MongoDB.

Vous aimerez peut-être aussi