SQL, NoSQL, NewSQL. Qué son, historia y elección

Escrito por Jose Manuel Reche Fernandez en 2016-06-22T07:31:34Z

Topics: Full-Stack Development , Cloud-Native Applications

SQL, NoSQL, NewSQL. Qué son, historia y elección

En los últimos 15 años, ha cambiado de forma drástica el dominio de las bases de datos SQL. Con el auge de Internet y de la IoT (internet of things) se están generando grandes volúmenes de datos estructurados y no estructurados a velocidades exponenciales. En lo que se refiere a la gestión de los datos, los arquitectos y los desarrolladores de software se han visto en la necesidad de buscar soluciones que se adapten a distintos criterios para la consolidación (persistencia), análisis y explotación de los datos. 

En cuanto a los puntos que buscaban mejorar:

  • Escalabilidad: las bases de datos SQL sólo podían escalar verticalmente, mediante mejoras de hardware, incrementando la RAM, el procesador o la capacidad del disco duro. Al disponer de una única instancia, en caso de fallos, no se garantizaba la disponibilidad del servicio.
  • Replicación y partición: las bases de datos SQL no permitían la replicación y la partición de los datos, a fin de garantizar la escalabilidad y mejorar los tiempos de respuesta de las consultas.
  • Libre de esquemas: las bases de datos SQL no permitían definir distintos esquemas (estructura de datos) para cada registro de una misma tabla, los esquemas eran rígidos y cualquier cambio de diseño implicaba un coste elevado, ya que requería refactorizar la base de datos y el código de la aplicación.

Todo esto conllevó la aparición de nuevos sistemas de base de datos, lo cual ha dado como resultado tres grandes grupos de bases de datos:


Bases de datos SQL

Las bases de datos relacionales RDBMS surgieron en los años setenta y fueron concebidas para un dominio muy específico, que era la gestión de los datos tabulares, es decir, datos provenientes de formularios de papel y en los que se pudiesen aplicar operaciones CRUD (create, read, update, delete). Sin embargo, para algunos sectores o productos específicos no se adaptaban correctamente, por no disponer de escalabilidad, capacidad de replicación y partición, etc. En algunos casos, lo solucionaron prescindiendo de algunas características en favor de otras, por ejemplo: eliminando las constraints, desnormalizando los datos, desactivando la transaccionalidad para casos específicos de reporting, etc. Todos estos cambios dieron origen a las bases de datos NoSQL

Por otra parte, se buscaba mejorar algo que curiosamente se les da mal a las RDBMS, que son precisamente las relaciones, principalmente debido a que las consultas en las RDBMS son imperativas, a pesar de que en el modelo se definan las relaciones. Esto es una gran desventaja, ya que en algunos casos induce a que las consultas (query) sean complejas, difíciles de mantener y lentas.

 

Bases de datos NoSQL

El acrónimo NoSQL corresponde a la frase "Not only SQL", aunque originalmente era "No SQL". Este término hace referencia a cualquier sistema de gestión de datos que no sigue el modelo de las RDBMS y que no aplica el lenguaje SQL para realizar las consultas. 

Este tipo de bases de datos comenzaron a originarse en el año 1998 y no fueron creadas por una empresa específica, sino que fueron concebidas por distintas empresas y grupos independientes que buscaban soluciones específicas a sus problemas. El auge de este tipo de base de datos se produjo por la necesidad de cubrir las carencias de las RDBMS:

  • Escalabilidad: a fin de cubrir los requisitos de demanda de la aplicación, en las bases de datos NoSQL no resulta una tarea complicada agregar más nodos o instancias. Esto es posible debido a que las bases de datos NoSQL están diseñadas desde un principio para funcionar en entornos distribuidos.
  • Flexibilidad: está relacionada con el hecho de que las bases de datos NoSQL no están atadas a un esquema predefinido, con lo cual ofrecen mucha flexibilidad, ya que facilitan la persistencia de datos no estructurados o semiestructurados.
  • Alta disponibilidad: gracias a la escalabilidad, se garantiza la continuidad del servicio en caso de que se origine un error de software o hardware.
  • Rendimiento: por su naturaleza distribuida, hacen que el tiempo de respuesta de las consultas sea muy superior con respecto a las RBDMS tradicionales y que se cumplan los requisitos de latencia y rendimiento requeridos por la aplicación.

Tipos de bases de datos NoSQL

Las bases de datos NoSQL se clasifican en los siguientes tipos:

  • Key-value (Redis, Aerospike, Riak, etc.): almacenan los datos en una estructura “clave-valor”, conocida como “diccionario” y cuyos valores no requieren un esquema fijo. En este tipo de base de datos no existe el concepto de relaciones, están pensadas para almacenar información básica y que pueda ser consultada de forma muy rápida.
  • Document oriented (MongoDB, eXist, CouchDB, etc.): almacenan datos de tipo documento. Cabe destacar que no debe confundirse el término documento con ficheros Excel, Word, etc. El término documento se refiere a una estructura de datos (clave, valor) representada en formato XML, JSON o BSON, que puede llegar a tener una estructura de datos anidados.
  • Graphs (Neo4j, OrientDB, GraphDB): almacenan los datos en formato de grafos, son excelentes para la gestión de datos interconectados y superan el concepto de “relación” de las RDMBS. Su principal ventaja es que, a diferencia de las RDBMS, los grafos persisten tal cual (en modo binario) en la base de datos, con sus propiedades y relaciones, con lo cual las consultas son mucho más rápidas comparadas con una RDBMS.
  • Column based (Cassandra, ScyllaDB, etc.): almacenan los datos en forma de columnas (familias), a diferencia de las RDBMS, que almacenan los datos en forma de fila. Es decir, cada registro (fila) puede contener una o más columnas y cada columna puede contener distintas estructuras de datos y además de forma versionada. Este tipo de bases de datos están pensadas para la consulta de datos de tipo histórico (logs, eventos, etc.), con el objetivo de obtener información agregada.
NoSQL = Not Only SQL


Bases de datos NewSQL

Corresponde a un nuevo (relativamente) tipo de base de datos que se considera un nuevo paradigma de base de datos RDBMS, en el que se aplican las lecciones aprendidas de las bases de datos NoSQL en el mundo SQL. Están pensadas principalmente para aplicaciones que requieren gestionar gran cantidad de registros, pero con la consistencia que ofrecen las RDBMS y mediante lenguaje SQL. Con respecto a este tipo de bases de datos, hay dos variantes: las que se han creado desde el principio con este concepto (VoltDB, MemSQL, etc.) y las que se han adaptado a este requisito, como es el caso de MySQL Cluster.

 

SQL, NoSQL, NewSQL, ¿Qué base de datos elegir?

Es importante destacar que la aparición de las bases de datos NoSQL y NewSQL no determina el fin de las RDBMS. De hecho, el modelo de datos tabular aún es adecuado para muchas aplicaciones. Actualmente, las RDBMS siguen siendo las bases de datos más utilizadas

DB Engines ranking

 Fuente: db-engines.com 

Por otra parte cabe destacar que no existe la base de datos perfecta para todas las aplicaciones. Lo que se debe tener en cuenta es que hay que saber elegir la base de datos a implementar en función de los requisitos de cada aplicación.

En algunos casos se opta por una solución de persistencia políglota, es decir, en la que se pueda aplicar más de un tipo de base de datos, para la misma aplicación, en función de lo mejor que aporte cada una.

¿SQL, NoSQL, NewSQL? No existe la base de datos perfecta para todas las aplicaciones. Hay que saber elegir cuál implementar en función de los requisitos de cada aplicación.