NoSQL vs SQL: Qué es NoSQL y cuándo utilizarlo

Si eres desarrollador de software, analista de sistemas o entusiasta del mundo del software, las palabras “ base de datos NoSQL ” seguro han aparecido en tu pantalla.

Personalmente, el término me generó mucha curiosidad. Principalmente, ya que a través de mis estudios universitarios y en los diferentes proyectos en los que había trabajado, solamente había utilizado bases de datos SQL.

¿Qué es NoSQL?

Por el nombre que tiene, se podría inferir que es algo totalmente opuesto a los sistemas SQL con los que nos topamos más frecuentemente.

Además, al término también se le conoce como Not only SQL (No sólo SQL).

No se quien tuvo la idea de dar ese nombre alternativo, pero el hecho de asociar NoSQL con Not only SQL puede generar contradicciones en muchas personas. Aunque ciertamente es pegajoso.

Y como una de sus principales características es el hecho de que no usa SQL como lenguaje de consultas, me quedo con NoSQL.

Es importante mencionar que cuando se habla de NoSQL, se habla de todos los sistemas de bases de datos que no siguen el modelo tradicional de las bases de datos relacionales. Por lo que NoRDB quizás quedaría mas apropiado, pero no es tan pegajoso.

 

Tipos de bases de datos NoSQL

No existe un solo tipo de bases de datos NoSQL. De hecho son bastantes.

Los 3  más comunes son:

  • Base de datos orientadas a documentos: en las cuales los datos se almacenan en forma de “documentos” los cuales están estructurados bajo una misma sintaxis (YAML, JSON, XML, entre otros).
  • Orientadas a grafos: en los cuales se representa la información como nodos de un grafo y las relaciones como aristas.
  • Pares Key-Value (Llave-Valor): en los cuales la información se almacena como un mapeo básico en el que una clave apunta a un valor específico.

Además de estos 3 tipos existen otros no tan populares pero igual de interesantes como las bases de datos multivalor, orientadas a objetos, entre otras.  

 

¿Cuándo debo usar una base de datos NoSQL?

Para responder esta pregunta, tomemos en cuenta los siguientes aspectos:

1. Estructura de los datos:

A pesar de las diferencias entre estos sistemas NoSQL, todos poseen una característica similar: los datos no tienen un esquema definido.

Ya sea los datos que se almacenan en los documentos, o los atributos del nodo, o lo que tenga la columna “valor”, la información que se almacena puede variar dentro de estructuras de datos del mismo tipo.

En las bases de datos NoSQL no existe una definición estricta de cómo debe estar estructurada la data.

Esto puede ser muy ventajoso en algunas ocasiones, y en otras desesperante.

Por lo que definir la estructura de la data (o la ausencia de la misma) es algo que se debe hacer antes de decidir utilizar un sistema de bases de datos.

Existirán casos en las que la consistencia de la información será 100% necesaria. En la que no se debería permitir que los tipos de datos de una misma colección difieran entre sí.

En ese caso, una base de datos SQL sería la mejor opción.

Asimismo, habrá casos en los que no se tenga de mucho tiempo para poder implementar las validaciones a nivel de aplicación necesarias para brindar cierto nivel de consistencia a la aplicación. Ya que en base de datos SQL, gran parte de este trabajo lo realiza el manejador de base de datos, mientras que en las NoSQL está a total responsabilidad del equipo de desarrollo.

Por otra parte, en ambientes donde la estructura de los datos cambie constantemente y sea muy variable, la mejor opción es un sistema NoSQL.

Tales casos son cada día más comunes, en especial con el alza del Big Data e Internet of Things, en las cuales el gran volumen de datos y la gran variedad de dispositivos hace que la data que manejemos sea muy variable y casi imposible que sea uniforme.

 

2. Escalabilidad:

Otro aspecto a tomar en cuenta es la escalabilidad.

En sistemas SQL, la escalabilidad horizontal (el aumentar la capacidad de servicio de una aplicación añadiendo diferentes nodos físicos) se hace difícil de poder implementar. Esto debido a la misma seguridad en la consistencia de datos que ofrecen. Es de alto costo el poder dividir datos que se encuentran relacionados con otras tablas entre diferentes nodos físicos.

Por otra parte en los sistemas NoSQL esto no conlleva dificultad alguna. Cada registro tiene dentro de sus atributos objetos completos. No está ligada a otra estructura de datos mediante una relación definida en un esquema.  

 

3. Rendimiento y Confiabilidad:

Es importante mencionar que al elegir entre un sistema u otro, deberemos hacer el tradicional trade-off entre rendimiento y confiabilidad.

Los sistemas NoSQL si bien son conocidos por su alto rendimiento en comparación con sus contrarios SQL, también están muy por debajo en lo que se refiere a  confiabilidad.

Por ejemplo, el hecho de no poder manejar transacciones entre varias entidades (Mongo DB) genera dudas con la confiabilidad de este sistema.

Sin embargo, existen formas de poder obtener la atomicidad en la gran mayoría de operaciones, pero conlleva más esfuerzo implementarlas.

 

4. Comunidades:

Como último punto entre las diferencias entre los sistemas, hoy en día el papel que juegan las comunidades de desarrolladores alrededor de una herramienta es vital para el crecimiento de la misma.

En este sentido, dado los muchos años que han estado las bases de dato SQL como herramienta de facto, están muy por encima de las NoSQL en este aspecto.

Sin embargo, hay un crecimiento exponencial en las comunidades NoSQL (en especial MongoDB). Por lo que a pesar de no contar con el soporte casi universal de las SQL, es muy probable que en el futuro próximo y con las tendencias actuales, desaparezca esta brecha existente.

In five short years, the MongoDB community has transformed the data management landscape, creating the first compelling alternative to 40 years of relational databases,” said Max Schireson, CEO of MongoDB

Traducción:

En solo cinco años, la comunidad de MongoDB ha transformado el panorama del manejo de la data, creando la primera alternativa llamativa a 40 años de bases de datos relacionales”. Dijo Max Schireson, CEO de MongoDB.

 

¿SQL y NoSQL son excluyentes?

En absoluto. Es más, si se usan bien pueden ser bastante complementarios.

Esto debido  a que cada aplicación tiene características y requerimientos de información diferentes.

En algunos casos será mejor usar NoSQL, en otros será mejor SQL, pero ambos casos pueden estar en diferentes secciones de una aplicación o proyecto. Dependerá del diseño de la aplicación el cómo y dónde debería usarse cada uno de los sistemas.

Hasta que exista una herramienta que aporte las ventajas de ambos; deberemos utilizar cada una en el contexto que sea necesario. Claro está, aportando los recursos que esto requiere.

“Different databases are designed to solve different problems. Using a single database engine for all of the requirements usually leads to non- performant solutions; storing transactional data, caching session information, traversing graph of customers and the products their friends bought are essentially different problems.”

 
Pramod J. SadalageNoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence

Traducción:

“Base de datos diferentes son diseñadas para resolver problemas diferentes. Usar un mismo motor de base de datos para todos los requerimientos usualmente lleva a soluciones de bajo rendimiento; almacenar data de transacciones, cacheo de información de sesiones, grafos transversales de clientes y productos que sus amigos compraron son esencialmente problemas diferentes.”

Pramod J. SadalageNoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence

 

Conclusión:

Los sistemas de base de datos NoSQL han experimentado un alza en su popularidad en los últimos años, esto viene influenciado por las tendencias tecnológicas actuales. Debido a la estructura poliforme de los datos, se requiere de un sistema que permita un almacenamiento de datos no tan estricto.

Además, con el alza de servicios para desarrollo en la nube. La escalabilidad horizontal y el almacenaje de datos en diferentes nodos físicos les da otro punto a favor.

Sin embargo, existen casos en los que se necesite de alta confiabilidad en los datos. Similarmente, los casos en los que no se tengan los recursos para implementar correctamente una capa de validaciones. En estos casos, una base de datos tradicional es la mejor opción. 

Además, actualmente el soporte para las bases de datos SQL es mucho mayor. Así como la actividad de las comunidades de las mismas. Por lo que existe más documentación y bibliografía para las estas.

Es por esto, que dado las tendencias actuales, es importante tener un conocimiento básico de las bases de datos NoSQL. Especialmente el cómo poder aplicar sus beneficios en nuestros proyectos.

En el siguiente post, trabajaremos con uno de los sistemas de bases de datos NoSQL más populares actualmente: MongoDB. ¿Qué es MongoDB?, ¿Cómo instalar MongoDB?, y todo lo básico que debes saber para poder sacarle provecho a esta tecnología creciente.

Si has trabajado con ambos sistemas, comenta los casos de uso con éxito que has tenido. ¿Cómo ayudó una base de datos NoSQL a solucionar un problema difícil de solucionar con SQL?

 

Publicado el 9 de diciembre de 2017