La respuesta a la necesidad de gestionar volúmenes masivos de información surge de la base de datos NoSQL, término acuñado a finales de los 90 y que engloba todas las tecnologías de almacenamiento estructurado que no cumplen el esquema relacional. La cantidad de información manejada por comunidades, redes sociales, buscadores, y muchos otros proyectos en el ámbito de la Web 2.0 es abrumadora, lo que ha hecho que surjan nuevas arquitecturas de almacenamiento de información, que deben ser de alto rendimiento, escalables y distribuidas. Aunque esta tecnología surgió de unas necesidades muy concretas, su difusión y algunos proyectos para encapsular sus funcionalidades y hacerlas más amigables a desarrolladores acostumbrados a SQL está provocando que también se usen en proyectos de pequeño tamaño, con lo que todo indica que a medio plazo convivirán con las bases de datos tradicionales independientemente del volumen de datos a gestionar. [1]
Dentro de las plataformas NoSQL encontramos varios grupos:
• Basadas en clave/valor: Se almacenan valores asociados a una clave. Son sencillas y las de mayor rendimiento.
• Basadas en documento: Son una particularización de las clave/valor, en las que el valor puedeser un documento. Permiten consultas complejas.
• Basadas en columna: Los valores se almacenan en columnas en lugar de filas. Son útiles cuando se gestionan datos agregados.
• Basadas en grafo: Las relaciones se tratan como un dato más.
• Basadas en objetos: Los datos son objetos y las relaciones punteros entre ellos. Permiten operaciones muy complejas pero suelen tener bajo rendimiento.
• Otras: Cubren necesidades muy específicas y tienen escasa implantación: basadas en tupla, multivaluadas, jerárquicas, etc. [2]
Desventajas y ventajas de las bases de datos NoSQL
Desde la visión de los adeptos a los RDBMS (Relational Data Base Management System) podemos mencionar las siguientes críticas a las bases de datos NoSQL: [3]
- No hay un claro líder: El mercado de NoSQL está muy fragmentado, lo cual es un problema para el open-source porque se requiere una gran cantidad de desarrolladores para tener éxito .
- Cada una de las bases de datos NoSQL posee su propia interfaz no estándar: La adaptación a una base de datos NoSQL requiere una inversión significativa para poder ser utilizada. Debido a la especialización, una compañía podría tener que instalar más de una de estas bases de datos. Por ello, algunos describen el mercado NoSQL como monopolísticamente competitivo (bajas barreras para entrar y salir, muchos pequeños proveedores con productos técnicamente heterogéneos y diferenciados, y un mercado inconsistente con las condiciones para la perfecta competencia), donde las empresas NoSQL están condenadas a obtener cero ganancias económicas a largo plazo.
- Escalabilidad no tan simple: Una de las características más difundida de las bases de datos NoSQL es su capacidad de escalar horizontalmente. Esta es promovida como una manera de manejar el crecimientoimpredecible oexponencial delas necesidades de negocio, pero con frecuencia es más fácil decirlo que hacerlo, tal como lo demostraron los problemas de sharding que generaron el apagado en el Foursquare.
- Se requiere una reestructuración de los modelos de desarrollo de aplicaciones: Utilizar una base datos NoSQL típicamente implica usar un modelo de desarrollo de aplicaciones diferente a la tradicional arquitectura de 3 capas. Por lo tanto, una aplicación existente de 3 capas no puede ser simplemente convertida para bases de datos NoSQL, debe ser reescrita, sin mencionar que no es fácil reestructurar los sistemas para que no ejecuten consultas con join o no poder confiar en el modelo de consistencia read-after-write.
- Modelos de datos sin esquema podría ser una mala decisión de diseño: Si bien los modelos de datos sin esquema son flexibles desde el punto de vista del diseñador, son difíciles para consultar sus datos. El modelo Entidad-Atributo-Valor (EAV) funciona bien para consultas clave-valor, pero para consultas de rango o más complejas (por ejemplo para reportes), éste esquema es complicado y lento. EAV solo tiene sentido para esquemas que cambian frecuentemente. En los modelos de datos sin esquema, el manejo de los datos es delegado a la capa de aplicación. Dado que la aplicación necesita conocer que información almacena y como, a medida que evolucionan los datos la aplicación debe ser capaz de manejar todos los diferentes formatos.
Por otro lado, desde la visión de los adeptos a las bases de datos NoSQL podemos mencionar las siguientes razones para desarrollar y utilizar éstos almacenamientos: [3]
- Evitar la complejidad innecesaria: Los RDBMS proveen un conjunto amplio de características y obligan el cumplimiento de las propiedades ACID, sin embargo, para algunas aplicaciones éste set podría ser excesivo y el cumplimiento estricto de las propiedades ACID innecesario.
- Alto rendimiento: En la década de los 80 las consultas a las bases de datos podían correr de noche como procesos batch, hoy día esto no es aceptable. Si bien algunas funciones analíticas pueden ejecutarse de noche, la evolución de la web requiere respuestas inmediatas a las consultas. Las bases de datos NoSQL proveen un rendimiento mayor a las relacionales, incluso de hasta varios órdenes de magnitud: De acuerdo a una presentación realizada por los ingenieros Avinash Lakshman y Prashant Malik de Facebook, Cassandra puede escribir en un almacenamiento de datos más de 50 GB en solo 0.12 milisegundos, mientras que MySQL tardaría 300 milisegundos para la mismatarea [4].
- Incremento del volumen de información no estructurada y empleo de hardware más económico: En contraste con los RDBMS, la mayoría de las bases de datos NoSQL son diseñadas para poder escalar horizontalmente y no tener que confiar en hardware altamente disponible. Las máquinas pueden ser agregadas o quitadas sin el esfuerzo operacional que implica realizar sharding en soluciones de cluster de RDBMS.
- Evitar el costoso mapeo objeto-relacional: La mayoría de las bases de datos NoSQL son diseñadas para almacenar estructuras de datos más simples o más similares a las utilizadas en los lenguajes de programación orientados a objetos. De esta forma, se evita costosos mapeos objeto-relacional, beneficiando principalmente a aplicaciones de baja complejidad que difícilmente se benefician de un RDBMS.
Referencias consultadas:
- Gracia del Busto. H.; Yanes Enríquez, O.: «Bases de Datos NoSQL«, Revista Telem@tica. Vol. 11. No. 3, septiembre-diciembre, 2012. Disponible en http://revistatelematica.cujae.edu.cu/index.php/tele/article/view/74
- Strauch, C: “NoSQL Databases”. Disponible en http://www.christof-strauch.de/nosqldbs.pdf
- Antiñanco, M.: «Bases de Datos NoSQL: escalabilidad y alta disponibilidad a través de patrones de diseño» Universidad Nacional de La Plata, 2014. Disponible en http://hdl.handle.net/10915/36338
- Avinash, L.; Prashant, M.: «Cassandra-Structured Storage System over a P2P Network» 2009. Disponible en http://static.last.fm/johan/nosql-20090611/cassandra_nosql.pdf