7 SQL vs NoSQL: PostgreSQL y MongoDB
Elegir una modelo de base de datos no es algo trivial. Cada base de datos está diseñada para dar respuesta a unos requisitos de diseño en concreto, la elección debería hacerse en función de qué requisitos son más importantes en el diseño del modelo.
SQL nació de mano de IBM en la década de los 70 debido a la necesidad de almacenar grandes conjuntos de datos.
[11]
Utilizan una estructura de datos rígida que requiere de datos estructurados y bien organizados. Los datos en SQL están organizados en tablas que se relacionan entre sí.
La potencia de SQL reside en una buena estructura de datos que minimiza la redundancia y maximiza la sincronización.
NoSQL es una tecnología reciente que surge para responder a la necesidad de trabajar y almacenar grandes cantidades de datos que no tienen porque estar estructurados. En general proporciona mucha más flexibilidad que SQL en la forma de organizar y estructurar los datos. En lugar de organizar los datos en tablas, NoSQL utiliza documentos que pueden contener cualquier dato y cada documento puede tener su propia estructura, lo que permite una forma de búsqueda más sencilla.
La potencia de NoSQL reside en la capacidad de trabajar con grandes volúmenes de datos semi-estructurados.
7.1 SQL vs NoSQL
Las principales características de los sistemas gestores de bases de datos relacionales frente a los no relacionales son los las siguientes:
Relacionales | No relacionales |
---|---|
Datos estructurados en forma de tabla | Datos estructurados en forma de clave-valor |
ACID | CAP |
3 aspectos principales: Estructuración, Integridad y Manipulación | 3 aspectos principales: Básicamente disponible, Estado suave y Eventualmente consistente |
Operaciones: Insert, Update, Delete y Select | Operaciones: Get, Put, Delete y Execute |
Lenguaje SQL | Consultas de estilo Mapreduce y soporte para SQL |
SQL vs NoSQL
7.2 PostgreSQL vs MongoDB
Para concretar un poco más la comparativa, se va a comparar las principales características de PostgreSQL con las de MongoDB.
Característica | MongoDB | PostgreSQL |
---|---|---|
Inicio del desarrollo | 2009 | 1995 |
Esquema | Dinámico | Estático y dinámico |
Soporte para datos jerárquicos de documentos | Si | Si, desde 2012 |
Soporte para datos clave-valor | Si | Si, desde 2006 |
Soporte para datos normalizados | No | Si |
Restricción en los datos | No | Si |
Claves foráneas y joins | No | Si |
Lenguaje de consulta | No | Si |
Soporte para MVCC | No | Si |
Transacciones atómicas | En un documento | A lo largo de la base de datos |
Soporte para lenguajes Web | JS, Python, ruby... | JS, Python, ruby... |
Soporte para datos de formato Web | JSON, XML, clave-valor | JSON, XML, clave-valor |
Soporte geo-espacial | Si | Si |
Escalado fácil | Horizontal | Vertical |
Sharding | Sencillo | Complejo |
Programación en el lado servidor | No | Python, JS, C, C++... |
Integración con otras bases de datos | No | Oracle, MySQL, MongoDB... |
Lógica de negocio | Distribuida a través de aplicaciones de cliente | Distribuida a través de aplicaciones de cliente o centralizada con triggers y procedures |
Recursos especializados | Difícil de encontrar | Fácil de encontrar |
Usos principales | Big data con alta concurrencia de actualizaciones donde la integridad y consistencia de los datos no es un requisito | Aplicaciones transaccionales y operacionales que mejoran frente a la forma normalizada |
PostgreSQL vs MongoDB -[12]
7.3 Conclusión
A pesar de las ventajas que ofrecen las bases de datos de tipo NoSQL frente a las SQL, centrando la comparación entre MongoDB y PostgreSQL se puede ver que en PostgreSQL ya se han incorporado algunas de las principales ventajas que ofrecen las bases de datos NoSQL.
PostgreSQL tiene soporte para formato de datos en clave-valor y JSON al igual que MongoDB.
PostgreSQL Permite MVCC al contrario que MongoDB cuyo uso principal no es el de mantener la integridad y consistencia de los datos a lo largo de los diferentes nodos.
PostgreSQL ofrece esquemas estáticos y dinámicos, datos normalizados, claves foráneas y joins, al contrario que MongoDB cuya aplicación es únicamente la orientada a NoSQL.
Por otro lado MongoDB sigue teniendo algunas ventajas de las que carece PostgreSQL:
MongoDB proporciona BSON, que es un formato muy eficiente de JSON, al contrario que PostgreSQL que solo soporta JSON.
MongoDB posee un sistema de sharding muy sencillo de gestionar, al contrario de PostgreSQL que necesita de herramientas externas como citus.
El escalado horizontal de MongoDB permite un gran número de usuarios accediendo, al contrario que PostgreSQL donde el escalado es vertical y el rendimiento en la concurrencia puede verse afectado.
La conclusión de esta comparativa no es la de elegir qué tecnología es la mejor y por ende deba utilizarse incondicionalmente. Ambas tecnologías tienen sus ventajas y su ámbito de aplicación y es basándonos en esto que se debería hacer la elección correspondiente.
Se puede ver que SQL con décadas de uso y desarrollo es una tecnología estable y funcional que puede funcionar en casi cualquier entorno. Sin embargo, NoSQL nació para hacer frente a una de las carencias de SQL: la ingente cantidad de datos se estaba volviendo muy complicada de manejar y mantener.
De forma que, a la hora de escoger una de las dos, hay que estudiar con precaución qué pesa más: ¿Estructuración de los datos o flexibilidad en el esquema? ¿Gran cantidad de datos sin importar la redundancia o menor cantidad de datos normalizados? ¿Escalabilidad vertical u horizontal?. La respuesta a estas preguntas depende del ámbito de aplicación.