Las bases de datos NoSQL son sistemas de almacenamiento de información que no cumplen con el
esquema Entidad-Relación. Tampoco utilizan una estructura de datos en forma de tabla donde
se van almacenando los datos sino que para el almacenamiento hacen uso de otros formatos
como clave-valor, mapeo de columnas o grafos, etc.
Esta forma de almacenar la información ofrece ciertas ventajas sobre los modelos relaciones.
Entre las ventajas más significativas podemos destacar:
- Se pueden ejecutar en máquinas con pocos recursos: No requieren de apenas computación.
- Escalabilidad horizontal. Para mejorar el rendimiento de estos sistemas simplemente se
consigue añadiendo más nodos, con la única operación de indicar al sistema cuáles son
los nodos que están disponibles.
- Pueden manejar gran cantidad de datos: Esto es debido a que utilizan una estructura
distribuida, en muchos casos mediante tablas Hash.
- No genera cuellos de botella: El principal problema de los sistemas SQL es que necesitan
transcribir cada sentencia para poder ser ejecutada, lo que constituye un punto de
entrada común, que ante muchas peticiones puede ralentizar el sistema.
Las principales diferencias que nos podemos encontrar entre los
sistemas NoSQL y los sistemas SQL son:
- No utilizan SQL como lenguaje de consultas. La mayoría de las bases de datos NoSQL
evitan utilizar este tipo de lenguaje o lo utilizan como lenguaje de apoyo.
- No utilizan estructuras fijas como tablas para el almacenamiento de datos. Permiten
hacer uso de otros tipos de modelos de almacenamiento de información como sistemas de
clave-valor, objetos o grafos.
- No suelen permitir operaciones JOIN. Al disponer de un volumen de datos tan
extremadamente grande cuando la operación no es la búsqueda de una clave, la sobrecarga
puede llegar a ser muy costosa. La solución en este caso sería desnormalizar los datos,
o bien realizar el JOIN mediante Software en la capa de aplicación.
- Arquitectura distribuida. Las bases de datos relacionales suelen estar centralizadas en
una única máquina o bien en una estructura máster-esclavo, sin embargo en los casos
NoSQL la información puede estar compartida en varias máquinas mediante mecanismos de
tablas Hash distribuidas.
Dependiendo de la forma en la que se almacena la información, nos podemos encontrar varios
tipos distintos de bases de datos NoSQL. Los tipos más utilizados son:
a. Bases de datos clave-valor. Son el modelo de bases de datos NoSQL más
popular, además de ser la más sencilla en cuanto a funcionalidad. En este tipo de sistema,
cada elemento está identificado por una llave única, lo que permite la recuperación de la
información de forma muy rápida, información que habitualmente está almacenada como un
objeto binario (BLOB). Se caracteriza por ser muy eficientes tanto para las lecturas como
para las escrituras. Algunos ejemplos de este tipo son Cassandra, BigTable o HBase.
b. Bases de datos documentales. Este tipo almacena la información como un
documento, generalmente utilizando para ello una estructura simple como JSON o XML y donde
se utiliza una clave única para cada registro. Este tipo de implementación permite, además
de realizar búsquedas por clave-valor, realizar consultas más avanzadas sobre el contenido
del documento. Son las bases de datos NoSQL más versátiles. Se pueden utilizar en gran
cantidad de proyectos, incluyendo muchos que tradicionalmente funcionarían sobre bases de
datos relacionales. Algunos ejemplos de este tipo son MongoBD o CouchDB.
c. Bases de datos en grafo. En este tipo de bases de datos, la información
se representa como nodos de un grafo y sus relaciones con las aristas del mismo, de manera
que se puede hacer uso de la teoría de grafos para recorrerla. Este tipo de bases de datos
ofrece una navegación más eficiente entre relaciones que en un modelo relacional. Algunos
ejemplos de este tipo son Neo4j, InfoGrid o Virtuoso.
Las bases de datos NoSQL más utilizadas actualmente serían:
1. Cassandra. Se trata de una base de datos creada por Apache de tipo
clave-valor. Dispone de un lenguaje propio para realizar consultas CQL (Cassandra Query
Language). Cassandra es una aplicación Java por lo que puede correr en cualquier plataforma
que cuente con la JM.
2. Redis. Se trata de una base de datos del tipo clave-valor. Se puede
imaginar como un array gigante en memoria para almacenar datos, datos que pueden ser
cadenas, hashes, cojuntos de datos o listas.
3. Mongo DB. Se trata de una base de datos orientada a documentos, de
esquema libre, es decir, que cada entrada puede tener un esquema de datos diferente que nada
tenga que vercon el resto de registros almacenados. Es bastante rápido a la hora de ejecutar
sus operaciones ya que está escrito en lenguaje C++. Es una de las bases de datos NoSQL
favoritas por los desarrolladores.
4. CouchDB. Se trata de un sistema creado por Apache y funciona en sistemas
GNU/LINUX y OSX pero no así en Windows.Utiliza JavaScript como principal lenguaje de
interacción. Permite la creación de vistas, que son el mecanismo que permite la combinación
para retornar valores de varios documentos, es decir, CouchDB permite la realización de las
operaciones JOIN típicas de SQL.