SQL y NoSQL: lo mejor de cada mundo

Tuka Manel
The Cocktail Engineering
4 min readSep 19, 2018

--

Photo by Mike Goehler

Introducción

Recientemente he iniciado las prácticas en The Cocktail y al comenzar el set up del proyecto surgió un debate entre los componentes del equipo que me resultó curioso, trataba sobre qué DB (Database) utilizaríamos, la verdad es que la lluvia de argumentos y la disparidad de opiniones inclinándose hacia una u otra fue bastante notoria.

En el mundo de la tecnología hay muchos tipos de DB(relacionales, grafos, documentos…) pero las más utilizadas son:

  • Las bases de datos SQL (Structured Query Language)
  • Las bases de datos NoSQL (Not Only SQL) puesto que busca mejorar rendimiento respecto a las citadas anteriormente, aunque como todo, también tiene algunas desventajas, que veremos más adelante.

De forma más explicativa, las relacionales y las no relacionales.

Y sí, digo explicativa porque a cualquiera (o al menos cualquiera que tenga una pequeña noción de lo que es una relación…) le quedaría claro solamente con el nombre de qué trata cada una de ellas, en las primeras mencionadas se establecen relaciones y en las otras… Pues no, ¿verdad?

A continuación se genera nuestra principal duda, ¿cuándo debemos utilizar una base de datos SQL? y por contra, ¿cuándo debemos utilizar una base de datos NoSQL? Si de verdad quieres saberlo sigue leyendo y la respuesta te la daré justo al final de este post 😉

Enfoque SQL

Seguramente ya conozcas MySQL, PostgreSQL u Oracle, como bien sabrás son bases de datos relacionales con tablas en las cuales guardamos un conjunto de datos e información de manera separada, la cual se relaciona mediante índices y que más tarde podremos consultar.

Una entidad representa un concepto(el cual solemos representar mediante tablas) con existencia independiente, se diferencia de otra entidad, incluso aunque sean ambas del mismo tipo.

Entre distintas tablas se establecen relaciones, teniendo en cuenta la información que ofrece cada una de ellas. Esto es lo que se conoce como modelo entidad-relación.

Una tabla “profesor” se asocia con las otras dos tablas “curso” y “departamento” mediante relaciones one to many y many to one. Un profesor puede pertenecer a varios cursos, mientras que en un mismo departamento, por lo general, habrá diversos profesores. Aquí vemos este sencillo esquema:

Estructura simple de una base de datos relacional

Para que una DB relacional sea efectiva, los datos deben estructurarse de manera clara y organizada, puesto que un esquema bien diseñado minimiza la redundancia de datos, por lo que se evita la reducción de la capacidad de almacenamiento, aunque en ocasiones es necesaria para modelar las relacione entre los datos, o bien para mejorar las prestaciones. Además, facilita (en la medida de lo posible) la comprensión de nuestro diseño.

Una ventaja particular de SQL es su cláusula JOIN, que permite a los developers combinar registros de varias tablas con un solo comando.

Enfoque NoSQL

Por otro lado, las bases de datos NoSQL son reconocidas por sus esquemas flexibles de cara a aplicaciones modernas y por utilizar una gran variedad de modelos de datos para acceder y administrar los mismos, como documentos, gráficos, clave-valor y búsqueda.

Estos tipos de bases de datos están optimizadas para aplicaciones en las cuales se manejan grandes volúmenes de datos, baja latencia y modelos de datos flexibles.

Las NoSQL por tanto, nos permiten obtener un desarrollo iterativo y dinámico.

Aunque conocer el tipo de modelo de datos es importante, también hay que tener en cuenta otros factores. Las bases de datos NoSQL están pensadas para ser escalables y distribuidas. Precisamente por ser distribuidas tendremos en cuenta el famoso Teorema Cap, que básicamente dice que en sistemas distribuidos es imposible garantizar a la vez: consistencia, disponibilidad y tolerancia a particiones (Consistency-Availability-Partition Tolerance).

Además, NoSQL cuenta con diferentes DBs para distintos tipos de proyectos, en función de nuestras necesidades.

Caben resaltar varios tipos de DB NoSQL, los cuales son:

  • Clave-valor: que permiten un escalado horizontal que muchos otros motores de bases de datos no soportan. Aunque su estructura es muy simple, permite velocidades de consulta mayores que las bases de datos relacionales, lo que lo hace muy útil para ser utilizados en bases de datos masivas. Este modelo soporta bien las operaciones de consulta basados en clave primaria.
  • Documentos: el tipo de dato que se utiliza por defecto está expresado en formato JSON o XML, donde se utiliza una clave única para cada registro. Este tipo de implementación permite, además de realizar búsquedas por clave–valor, realizar consultas más avanzadas sobre el contenido del documento.

Junto a estas dos encontramos la siguiente variedad, que apoya el argumento del gran abanico de posibilidades que nos ofrecen las no relacionales.

Conclusión

Una de las cosas más importantes en el mundo de la tecnología es tener bien claro cuál es el problema al que nos enfrentamos, saber acotarlo, intentar reducirlo a su máxima sencillez y evaluar las diferentes alternativas que tengamos a mano para resolver el conflicto en cuestión.

Como he recalcado antes, considero que la open mind es una gran virtud del ser humano, muy útil en el mundo del desarrollo, por tanto, habiendo hecho un pequeño recorrido sobre los dos tipos de DBs resumamos las dos preguntas que os he planteado al principio de este post en una sola…

¿Os veis capaces de evaluar, acotar y enfrentarte a un problema en el mundo de la tecnología?

Enlaces de interés

Aquí adjunto dos vídeos bastante explicativos donde se da un enfoque más profundo sobre el tema tratado:

Referencias bibliográficas

--

--