Durante las últimas décadas el almacenamiento de datos de todo tipo de desarrollo de software recaía sobre una base de datos relacional. Tablas, campos, filas, índices, consultas, procedimientos almacenados, planes de acceso,… eran los mecanismos en los que se sustentaban los motores de bases de datos. Sería de extrañar que si has trabajado en el mundo del desarrollo del software no hayas trabajado con bases de datos como DB2, Oracle, SQL Server, PostgreSQL o MySQL.
El aumento de los datos a almacenar y de sus tipológicas han conseguido llevar hasta el límite las capacidades de las bases de datos entidad-relación y han abierto la puerta a la proliferación de otro tipos de bases de datos, las bases de datos no estructuradas o bases de datos NoSQL.
Pero, ¿qué son las bases de datos NoSQL?
Las bases de datos NoSQL son aquellas que permite almacenar un contenido sin definir de manera previa la estructura que debe de tener el contenido, es decir, el tener que definir el schema de los datos. Permitiendo una gran flexibilidad a la hora de almacenar contenido, pero sin perder las características que han hecho tan útiles a las bases de datos relacionales como las consultas, capacidad de indexar el contenido para poder acceder de forma ágil al mismo,…
Esta característica de no tener que definir el schema hace que la agilidad a la hora de insertar nuevos contenidos sea el punto más fuerte de las bases de datos NoSQL. Más en un mundo en el cual aparecen cada vez nuevos contenidos, contenidos cambiantes a lo largo del tiempo. Por ejemplo piensa en los datos variables que se generan mediante las redes sociales o en los datos que pueda estar generando cualquier dispositivo IoT.
Lógicamente, al no existir schemas, no podremos utilizar el lenguaje de consulta SQL y es por ello que muchas de las bases de datos NoSQL lo que nos ofrecen es un API para poder acceder al contenido de la base de datos, ya sea para consultarlo, modificarlo o borrarlo.
Tipos de Bases de Datos NoSQL
Dependiendo de la base de datos NoSQL que utilicemos tendremos un sistema de almacenamiento diferente, orientado a un tipo u otro de contenido. De esta manera dentro de las bases de datos NoSQL encontramos los siguientes tipos:
Documento
En este caso el contenido a almacenar es un documento JSON. Los campos y valores van dentro del contenido. La capacidad de variación de la estructura del propio documento JSON es la que proporciona de flexibilidad a la base de datos.
Al basarse en documentos JSON hace que sean muy sencillo trabajar con un conjunto de tecnologías complementarias basadas todas ellas en Javascript.
Además, si estás pensando en microservicios verás que el uso de bases de datos nosql basdas en documentos hace casi que haya una relación 1 a 1 entre el microservicios y el documento.
Clave/Valor
Quizás pudieron ser el primer tipo de bases de datos NoSQL ya que esta implementación se podía llevar a cabo en bases de datos relacionales. La idea es que el contenido se divide en el campo que sería la clave y su contenido que sería el valor. En este caso el contenido del valor puede ser muy variable y en algunos casos puede ser un documento JSON.
Este modelo de división hace que las bases de datos NoSQL de tipo clave/valor tengan mucha escalabilidad horizontal.
Son bases de datos muy útiles con dispositivos IoT ya que el formato que generan los mismos cuadra mucho con la estructura clave/valor.
Grafos
Las bases de datos NoSQL basadas en grafos están enfocadas en guardar las relaciones entre los diferentes elementos mediante el uso de un grafo. Y por ende nos ayudan a entender mejor las relaciones que existen entre los elementos y a descubrir nuevas relaciones entre los mismos.
Este tipo de base de datos está pensada para dar soluciones a modelos de relaciones. Es muy útil si, por ejemplo, están desarrollando una red social, un recomendador de productos o sistemas de detección del fraude.
Columnar
El modelo columnar es el que basa su almacenamiento en columnas en vez de en filas como lo hacen las bases de datos relacionales. La idea es que al contenido se acceda por lo que está almacenado el la columna, en vez de fila a fila.
Esto hace que estas bases de datos NoSQL columnares sean muy óptimas para modelos de consulta de datos, aunque menos eficientes en la inserción.
Características de las bases de datos NoSQL
Flexibilidad
Como ya hemos contado la flexibilidad es su principal virtud. Al disponer de esquemas flexibles podemos almacenar cualquier tipo de contenido, el cual puede ir cambiando con el tiempo, si necesidad de definir de antemano la estructura o schema de lo que vamos a almacenar.
Escalabilidad
Las bases de datos NoSQL suelen estar diseñadas para escalar sobre clusters de manera horizontal. Es por ello que no necesitamos disponer de máquinas potentes para almacenar y servir nuestros datos. Esta capacidad de la escalabilidad horizontal hace que las bases de datos NoSQL sean perfectas para entornos en cloud.
Rendimiento
Aunque pueda parecer que las bases de datos NoSQL no vayan a dar un buen rendimiento la verdad es que presentan optimizaciones en sus modelos que las hacen ser muy competitivas y perfectamente equiparables a las bases de datos relacionales.
Bases de datos NoSQL del mercado
En el mercado encontramos diferentes soluciones de bases de datos NoSL, incluso algunas bases de datos entidad-relación que ofrecen capacidades de NoSQL.
Algunas de las bases de datos NoSQL más relevantes del mercado son:
- Como ejemplo de bases de datos NoSQL del tipo clave/valor tenemos a Memcached o Redis.
- Dentro de las bases de datos NoSQL basadas en documentos encontramos MongoDB y CouchDB
- Para las bases de datos NoSQL basadas en grafos tenemos a Neo4j.
- Si hablamos de bases de datos NoSQL columnares podemos mencionar a Cassandra o HBase.
Seguro que nos dejamos más de una, pero ya las iremos incluyendo. En tu caso, ¿Qué base de datos NoSQL utilizas o cuál recomendarías? Aconséjanos en los comentarios…