Delirium Coder
Por que nunca antes fue ahora y otras obviedades…¿Que es NoSQL?
Últimamente está muy de moda el uso de bases de datos NoSQL o lo que es lo mismo, bases de datos no relacionales y distribuidas que no proporcionan garantías ACID, es decir, que no proporcionan garantías de que una serie de instrucciones puedan ser consideradas como una transacción.
Pero, ¿si no proporcionan garantías ACID por que están tan de moda?. Esta pregunta puede ser respondida desde frentes muy diferentes dependiendo en gran medida del fanboyismo del interlocutor:
- Por que Ruby on Rails es el lenguaje de moda para construir sitios y aplicaciones web, y Ruby on Rails promueve el uso de este tipo de bases de datos, sobre todo de MongoDB
- Por que solo los dinosaurios siguen usando modelos relacionales estrictos y eso es parte del pasado, el presente y el futuro esta en los datos orientados a documentos
- Por que el modelo relacional está muerto
- Por que estas bases de datos ofrecen ciertas ventajas claras con respecto a las bases de datos relacionales tradicionales en según que contextos
Como podéis ver, dependiendo del grado de objetividad cierto tipo de personas darán por válida una, varias, todas o ninguna de las razones expuestas y nombradas de la a a la d. El caso es que los sistemas de bases de datos orientados a documentos o NoSQL difieren en bastantes aspectos de sus hermanos los sistemas relacionales de toda la vida, las bases de datos NoSQL no requieren de tablas fijas para los esquemas, por regla general evitan el uso de operaciones tipo join y además, suelen escalar de forma horizontal que es un puntazo enorme a su favor sin duda. Por ejemplo, en las bases de datos NoSQL no existen restricciones de número de campos que puede tener un registro como si ocurre con el modelo relacional donde todos los registros deben tener el mismo número de campos aunque estén vacíos. Algunas otras cosas interesantes son las interfaces RESTfull que proveen y su capacidad de replicación.
Pero, ¿por qué se hace necesario un sistema de base de datos no relacional?
Los sistemas relacionales modernos se han visto afectados por problemas de rendimiento en cierto tipo de aplicaciones que hacen un uso intensivo o extremo de los datos, como por ejemplo; indexar un número ingente de documentos, servir páginas en servidores con un tráfico elevado, servir contenido multimedia en streaming.
Las implementaciones de sistemas relacionales, por lo general, están diseñados para soportar pequeñas pero frecuentes transacciones de lectura/escritura o grandes baterías de transacciones donde el acceso de escritura no es común. Por otro lado, los servicios diseñados con NoSQL soportan un intenso volumen de operaciones de lectura/escritura.
NoSQL ofrece garantías de consistencia muy débiles como la consistencia eventual o transacciones limitadas a elementos de datos individuales. Algunos sistemas, ofrecen plenas garantías ACID en algunos casos mediante la adición de capas medias de integración adicionales, ese es el caso de CloudTPS. Obviamente, no han faltado instituciones que ofrezcan soluciones para proporcionar aislamiento a las snapshots de los registros almacenados, por ejemplo el Google Percolator que está basado en BigTable y un sistema transaccional para HBase desarrollado en la Universidad de Waterloo. Ambos sistemas, aunque han sido desarrollados de forma independiente, comparten conceptos similares para lograr la distribución de transacciones de múltiples registros con garantías ACID de aislamiento de snapshots para los registros adyacentes, evitando la carga extra de gestión de datos introducida por una capa media de integración adicional.
Lo cierto es que la ploriferación de aplicaciones (sobre todo aplicaciones web) que utilizan estos sistemas de bases de datos no relacionales ha sido expectacular en los últimos tiempos, y por si alguien duda de la puesta en producción de sistemas bajo estas tecnologías de almacenamiento de datos tan solo comentaré que Digg, Facebook y eBay han desplegado infraestructuras NoSQL de forma completamente satisfactoria.
Y no penséis de forma errónea que esto es una tecnología super moderna pseudo-experimental del copón, no, IBM ofrece desde 1989 su Lotus Notes que es del tipo NoSQL MultiValue, no vayamos a pensar que hemos descubierto ahora américa con esto del NoSQL como algunos “gurús” afirman en blogs de diversa índole por que esto no es nada nuevo.
Hay disponibles infinidad de sistemas de NoSQL, algunos son de tipo Graph Database otros son de tipo XML Database o Document Oriented Database entre los más famosos con licencias libres se encuentran:
- Cassandra de la Apache Software Foundation, desarrollada en Java y del tipo orientado a columnas
- MongoDB de 10gen, desarrollada en C++ y del tipo orientado a documentos
- CouchDB de la Apache Software Foundation, desarrollada en Erlang y del tipo orientado a documentos
- HBase de la Apache Software Foundation, desarrollada en Java y del tipo orientado a columnas
Está claro que a la Apache Software Foundation le tira Java lo suyo y que está comprometida con el software libre creando alternativas abiertas a por ejemplo Google BigTable, lo cual siempre es una buena noticia y algo que acojo con gusto y alegría.
Si eres un defensor de las bases de datos relacionales, no te cierres, investiga sobre el NoSQL, ofrece puntos de vista y soluciones alternativas, yo estoy investigando actualmente sobre la integración de MongoDB y CouchDB en Django por ejemplo y es un tema que me parece absolutamente fascinante, en breve escribiré más sobre estas bases de datos y su integración con Python y Django, y ¿quien sabe?, quizá la versión 0.2 de Goliat integre el uso de estas bases de datos en el uso de Stores.


Yo conocía CouchDB y la verdad es que me pareció muy curioso y totalmente rompedor respecto a la rigidez del modelo relacional. Es un tema muy interesante, aunque yo diría que la mayor parte de las bases de datos no pueden prescindir a la ligera de su capacidad transaccional.
Hay toda una rama de la computación que juega a ser “funambulista” y que tiene muchas aplicaciones, como la lógica difusa o la memoria trascendente.
Interesante, un saludo!