Académique Documents
Professionnel Documents
Culture Documents
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.
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.
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.