Bases de datos NoSQL
Las bases de datos NoSQL (Not only SQL) son sistemas de gestión de datos que no siguen el modelo relacional clásico y su rasgo distintivo es que no requieren estructuras de datos fijas como tablas con un esquema rígido. Se emplean habitualmente para almacenar grandes cantidades de datos no estructurados o semi-estructurados y ofrecen mayor flexibilidad en la estructura de los datos, lo que las hace la razón principal para elegirlas frente a un SGBD relacional cuando el esquema es cambiante o desconocido de antemano.
Características frente al modelo relacional
-
Escalabilidad horizontal: distribuyen la carga añadiendo nodos (scale-out), en lugar de crecer verticalmente en una sola máquina. Es su principal beneficio frente a las relacionales.
-
Esquema flexible: no imponen tablas ni columnas fijas; cada registro puede tener una estructura distinta.
-
No garantizan completamente ACID: a diferencia de las relacionales, típicamente no garantizan por completo las propiedades ACID (Atomicidad, Consistencia/Coherencia, Aislamiento y Durabilidad). Suelen relajar la consistencia a cambio de disponibilidad y escalado.
-
Desafío común: presentan soporte limitado para consultas y análisis complejos (no hay un lenguaje universal como SQL con joins y agregaciones estándar).
Obsérvese que las bases de datos relacionales NO son un tipo de NoSQL. Productos como MariaDB, Amazon Aurora, HeidiSQL (en realidad un cliente/gestor de MySQL, MariaDB y PostgreSQL) u Oracle son relacionales y no entran en la categoría NoSQL.
Tipos de bases de datos NoSQL
Las cuatro categorías principales son clave-valor, documentales, orientadas a columnas y orientadas a grafos.
| Tipo | Modelo de almacenamiento | Ejemplos |
|---|---|---|
| Clave-valor | Pares clave-valor | Redis, Project Voldemort, Riak, Amazon Dynamo |
| Documental | Documentos (JSON/BSON/XML) | MongoDB, CouchDB, RavenDB, Terrastore |
| Columnas anchas | Columnas y supercolumnas | Cassandra, HBase |
| Grafos | Nodos y relaciones | Neo4j |
Bases de datos clave-valor
Almacenan la información como pares clave-valor. Ejemplos que emplean esta técnica son Project Voldemort, Redis, Riak y Dynamo. Una afirmación incorrecta sobre ellas sería decir que su estructura permite el lanzamiento de queries para la consulta de información: su modelo simple de acceso por clave no está pensado para consultas complejas.
Redis (Remote Dictionary Server) es una base de datos NoSQL distribuida, basada en el modelo de almacenamiento clave-valor y desarrollada en ANSI C. Es un almacén en memoria que soporta estructuras de datos ricas (cadenas, listas, conjuntos, hashes) y funciona en sistemas POSIX sin dependencias externas.
Bases de datos documentales
Guardan la información en documentos y son particularmente adecuadas para almacenar y procesar datos semi-estructurados y no estructurados. Ejemplos de tipo documental son CouchDB, MongoDB, RavenDB, Terrastore y BaseX (nativa XML). HeidiSQL NO es documental (es un cliente de SGBD relacionales).
MongoDB es un ejemplo típico de base de datos de documentos, no basada en el modelo relacional. Utiliza un formato de documento propio denominado BSON (Binary JSON), una evolución de JSON con la peculiaridad de que puede almacenar datos binarios.
Bases de datos orientadas a columnas
Organizan el almacenamiento de datos por columnas en lugar de por filas, lo que proporciona un rendimiento de lectura y escritura muy eficiente en operaciones sobre columnas concretas. En las bases de datos de columnas anchas (wide-column) los datos se organizan en columnas y supercolumnas. Apache Cassandra es un ejemplo representativo: a diferencia de HBase (que se apoya en HDFS), Cassandra tiene arquitectura propia inspirada en Dynamo, por lo que la afirmación de que "se puede ejecutar sobre Hadoop" es FALSA respecto a Cassandra.
Bases de datos orientadas a grafos
Son las más adecuadas para manejar relaciones complejas entre entidades, ya que representan los datos como nodos y relaciones; su ventaja clave es la consulta rápida de relaciones complejas. Neo4j es el gestor de grafos de referencia y utiliza Cypher como lenguaje de consulta sobre bases de datos Neo4j. Ejemplos de sintaxis Cypher:
-
Crear un nodo:
CREATE (n:PRODUCT) -
Crear un nodo producto con propiedades:
CREATE (p:Product {name:'Leche TAI',price:0.34}) RETURN p
Neo4j representa datos mediante grafos (dirigidos, con propiedades, etc.); un "grafo trivial" NO es un tipo de grafo empleado por Neo4j.
Consistencia: teoremas CAP y BASE
El teorema CAP establece que un sistema distribuido solo puede garantizar simultáneamente dos de tres propiedades: Consistencia (C), Disponibilidad (A) y Tolerancia a la partición (P). Muchas bases de datos NoSQL operan en modalidad AP, priorizando Disponibilidad y Tolerancia a la partición a costa de la consistencia inmediata.
En coherencia con lo anterior, aplican a menudo el principio BASE (Basically Available, Soft state, Eventual consistency) para garantizar escalabilidad y rendimiento a expensas de la consistencia inmediata, frente al ACID relacional. Esto se materializa en la consistencia eventual: los datos pueden no ser consistentes en todos los nodos en un momento dado, pero se vuelven consistentes eventualmente.
Ecosistema Big Data asociado
Apache Hadoop es un framework de software que soporta aplicaciones distribuidas bajo licencia libre, base del ecosistema Big Data. Dentro de él, el modelo MapReduce procesa datos de entrada que proceden de un gran fichero de datos y a continuación se dividen en un conjunto de particiones (fase map), que luego se combinan (fase reduce). Entre los proyectos Apache relacionados con Hadoop, Apache Avro es el que provee servicios de serialización de datos (formato binario compacto con esquema en JSON).
Entre los SGBD NoSQL de grandes proveedores, Azure Cosmos DB es una base de datos NoSQL desarrollada por Microsoft.
Fuentes
-
Redis — Documentación oficial ("About Redis", FAQ): https://redis.io/about/ y https://redis.io/docs/latest/develop/get-started/faq/
-
Apache Avro — Documentación oficial del proyecto: https://avro.apache.org/docs/
-
Apache Hadoop — Documentación oficial (serialización Avro): https://hadoop.apache.org/docs/stable/api/org/apache/hadoop/io/serializer/avro/package-summary.html
-
Neo4j — Cypher Manual (oficial): https://neo4j.com/docs/cypher-manual/current/
-
MongoDB — BSON specification (oficial): https://bsonspec.org/ y https://www.mongodb.com/docs/manual/reference/bson-types/
-
Apache Cassandra — Documentación oficial: https://cassandra.apache.org/doc/latest/
-
Amazon Aurora — Documentación oficial (SGBD relacional): https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/
-
Azure Cosmos DB — Microsoft Learn: https://learn.microsoft.com/azure/cosmos-db/introduction