SQL vs NoSQL

Históricamente, las bases de datos se han venido representando como una agrupación de tablas y relaciones entre éstas. Para hacer consultas a estas bases de datos se emplea el lenguaje SQL. De ahí que a este tipo de bases de datos (relacionales) se las denomine informalmente “bases de datos SQL”. Sin embargo, existe otro tipo de bases de datos en las que los datos que se almacenan no tienen por qué guardar relaciones entre sí. A este tipo de bases de datos se las denominó NoSQL, en oposición honor a las populares bases de datos SQL.

Centro de datos
Centro de datos. Fuente: pixabay.

Si bien las bases de datos SQL y NoSQL han coexistido desde los comienzos de la informática, estas últimas no han sido foco de particular interés hasta principios del siglo XXI. A continuación se enumeran las principales ventajas e inconvenientes de cada una.

Ventajas de NoSQL frente a SQL

Las bases de datos NoSQL tienen dos fortalezas principales:

  1. Flexibilidad. El modelo de almacenamiento en NoSQL está basado en “documentos” (p.ej. pares clave-valor), mientras que en SQL está basado en filas (p.ej. tuplas de valores). Así, en NoSQL podemos almacenar cualquier tipo de datos sin tener que definirlos previamente.Por ejemplo, para guardar un ID y nombre de usuario en una base de datos SQL debemos especificar que la tabla Usuarios ptiene un campo id de tipo numérico y un campo nombre de tipo texto, mientras que en una base de datos NoSQL almacenamos directamente el siguiente par clave-valor: { id: 1, nombre: "John Doe" }. Si luego queremos añadir un tercer campo, p.ej. edad, simplemente guardaremos { id: 1, nombre: "John Doe", edad: 22 }. Para conseguir esto en una base de datos SQL debemos “alterar” previamente el esquema de la tabla; esto es, cambiar la definición de la tabla para añadir el tercer campo edad (que por cierto debemos especificar si es de tipo numérico u otra cosa).
  2. Escalabilidad. Para aumentar el rendimiento, las bases de datos NoSQL se pueden distribuir fácilmente entre múltiples servidores, ya que cada “documento” es una unidad de información aislada del resto. Por ello, en NoSQL basta indicar qué servidores formarán parte de la base de datos.Por el contrario, las bases de datos SQL fueron diseñadas para funcionar en una sola máquina, con lo que la única forma “nativa” de escalar es añadiendo más hardware (más memoria, más procesador y más disco duro).

Ventajas de SQL frente a NoSQL

Sin embargo, las bases de datos SQL siguen siendo imbatibles en otros dos frentes:

  1. Normalización. En SQL se elimina la redundancia en los datos mediante la normalización, que no es más que la forma de estructurar las tablas y sus relaciones. Esto permite un almacenamiento mucho más óptimo que en bases de datos NoSQL.Además, la normalización asegura las dependencias y restricciones entre los datos, por lo que las bases de datos SQL son, por así decirlo, más estrictas que las bases de datos NoSQL.
  2. Fiabilidad. La mayoría de bases de datos SQL utilizan el modelo de consistencia ACID:
  • Atomicity: Cuando una operación consiste en una serie de pasos, o se ejecutan todos o se vuelve al estado en el que estaban los datos antes de la operación.
  • Consistency: Se asegura que los datos sean siempre los esperados y que no cambien su tipo.
  • Isolation: Diferentes operaciones sobre la misma información son siempre independientes y no generan ningún tipo de error.
  • Durability Una vez realizada la operación, ésta persistirá y no se podrá deshacer aunque falle el sistema (p.ej. un corte eléctrico).

Por el contrario, las bases de datos NoSQL suelen responder a necesidades cubiertas por el modelo BASE:

  • Basic Availability: La disponibilidad de los datos se asegura replicando la base de datos en varios servidores.
  • Soft-state: Se asume que la consistencia de los datos la proporciona el desarrollador, no la base de datos. Por ello, el tipo de datos puede ir cambiando con el tiempo e incluso entre diferentes réplicas de la misma base de datos.
  • Eventual consistency: Se asegura que los datos serán consistentes en un futuro, aunque no se garantiza cuándo ocurrirá exactamente.
Biblioteca
Biblioteca. Fuente: pixabay.

Conclusión

En resumen, ¿qué base de datos es mejor? ¿cuál de las dos debo utilizar en mi empresa? Pues la respuesta es: depende. En proyectos de big data probablemente una base de datos NoSQL sea la más idónea, dado que los datos que se suelen analizar son poco estructurados. Por ejemplo: logs de servidor, analíticas de interacción, corpus lingüísticos, etc. Sin embargo, SQL será idóneo en proyectos en los que tengamos que analizar relaciones entre nuestros datos. Por ejemplo: compras que han realizado nuestros usuarios, mensajes en foros de discusión, facturas emitidas, etc.

Espero que este post haya servido para aclarar los conceptos básicos en lo que a bases de datos se refiere, desde un punto de vista general.