PostgreSQL es uno de los Sistemas de Gestión de Base de Datos Relacionales mas utilizados. Este lleva mas de 30 años en el mercado y continúa siendo Open Source. Es mantenido y actualizado por la comunidad PGDG, quien lanzó su última versión el 11 de Febrero de 2021, a la fecha de este artículo.
Con tantos años de trayectoria es de los SGBD más confiables del mercado, aunque no por eso debemos utilizarlo en todos los casos. Por eso al igual que anteriormente vimos las mejores alternativas a MySQL server, hoy veremos alternativas a PostgreSQL.
Contenido
Sobre PostgreSQL
Esté SGBD tiene una una excelente reputación en cuanto a Robustes, Fiabilidad y Desempeño. Sin duda es de los mas recomendados cuando hablamos de grandes volúmenes de datos . Ademas, gracias a que utiliza su propia version del lenguaje SQL, PSQL nos permite realizar consultas mas complejas y la sintaxis es casi la misma.
Por otra parte, gracias a que es Software Libre podemos utilizarlo sin limitaciones. Incluso podemos realizar ajustes para adaptarlo a nuestro proyecto, ya que su código fuente y toda la documentación esta disponible.
Si bien es cierto que no hay una empresa detrás, la comunidad PGDG es muy activa y la mayoría de desarrolladores son profesionales de la industria en grandes empresas o universidades.
En cuanto a la compatibilidad, podemos decir que es compatible con la mayoría de sistemas operativos, Linux, FreeBSD, Solaris, Mac OSX y Windows. Respecto a los lenguajes, podemos utilizarlo con C, C++, Java, Perl, PHP, Python, Ruby, R y otros. Y tanto su instalación como mantenimiento son sencillas.
Alternativas a PostgreSQL
Si bien PostgreSQL es excelente, este tiene algunas desventajas. Como fue diseñado para manejar un gran volumen de datos, es un poco lento para base de datos pequeñas y medianas en comparación con otra opciones como MySQL. También es sabido que consume una gran cantidad de recursos, incluso mas que otros SGBD, dado sus características extras.
Dicho esto, entendemos que no debemos utilizar PostgreSQL en todos los proyectos, sino sólo en aquellos que cumplen ciertas características. A continuación, veremos Alternativas a PostgreSQL para distintos casos y tipos de Bases de Datos.
Relacionales
Las bases de datos relacionales son aquellas que tienen un diagrama bien definido, donde los datos se almacenan en tablas con filas y columnas. Estas bases de datos son las mas utilizadas en la actualidad, sobretodo cuando se prioriza la persistencia de los datos.
Uno de los principios mas importantes de estas es el principio ACID, de Atomicidad, Consistencia, Aislamiento (Isolation) y Durabilidad.
Atomicidad: Refiere a las transacciones, significa que se deben realizar todos los pasos de la transacción o la misma se revierte.
Consistencia: Refiere a la integridad de los datos. Nos asegura que una transacción no romperá la consistencia de estos y que siempre sean exactos.
Aislamiento: Asegura que una operación no puede afectar a otra. Si hay dos transacciones sobre la misma información, estas son independientes y no generan ningún tipo de conflicto.
Durabilidad: Asegura que los datos sean persistentes una vez realizada la transacción. Incluso si falla el sistema, estos no se podrán deshacer y permanecerán de alguna manera.
Estas son ideales para cuando necesitamos priorizar la consistencia de los datos, en un esquema bien definido y relacionado.
MySQL
Si buscamos una alternativa a PostgreSQL
para bases de datos pequeñas a medianas, MySQL es una buena opción. Es uno de los SGBD más utilizados, esté se enfoca en la estabilidad y robustez. Como comentamos anteriormente, MySQL ofrece una mejor performance en cuando a pequeñas y medianas bases de datos, si lo comparamos con Postgre.
Otra diferencia importante, es que MySQL si pertenece a una empresa ya que en el 2010 fue adquirida por Oracle. De aquí que tienes dos tipos de licencias, GPU (Licencia Pública General) y Licencia comercial. La licencia comercial es para cuando lo queremos incluir a nuestro desarrollo para comercializarlo.
Cuando utilizar MySQL:
- Para datos estructurados (SQL) y garantía de transacciones ACID
- Escalabilidad horizontal, especialmente con un alto volumen de escritura
- Transacciones Multi-master del tipo ACID
- La seguridad de la información es primordial
- Una misma base de datos para OLAP (Procesamiento Analítico en Línea) y OLTP (Procesamiento de Transacciones en Línea)
MariaDB
Es una alternativa excelente a Postgre, incluso la mejor alternativa a MySQL por su compatibilidad. Cuando MySQL fue adquirido por Oracle, uno de los co-fundadores de este realizó su propio fork y lo llamó MariaDB. Por lo que es compatible con el protocolo y clientes de MySQL, pudiendo migrar de uno a otro fácilmente. Incluso cada versión de MySQL tiene su correspondiente en MariaDB.
Esté es mantenido por la organización MariaDB y por la comunidad, manteniendo una licencia GPL para lo que en sus inicios era MySQL. Si bien estos dos son casi iguales, MariaDB tiene algunas mejoras. Con su mecanismo de almacenamiento, ColumnStore, ofrece almacenado de columnas dinámicas virtuales en las tablas. Adicionalmente, ofrece escalamiento horizontal gracias a sus tecnologías MAXScale y Spider.
MariaDB cuenta con un motor gráfico OQGRAPH, que soporta datos gráficos complejos incluyendo el manejo de jerarquías entre estos. Por otra parte, con su mecanismo Xpand permite realizar millones de transacciones por segundo, logrando una mejor performance que MySQL.
Cuando utilizar MariaDB
- Datos estructurados y transacciones ACID
- SQL distribuido, millones de transacciones deben realizarse en una base de datos global
- Multi-master y Multi-nodo
- Manejar distintos tipos de datos, estructurados, semi-estructurados, gráficos y columnas
SQLite
Es una alternativa liviana a Postgre. Podemos decir que es un SGBD particular, ya que está contenido en una considerablemente pequeña librería escrita en C. Además, no es un servicio separado sino que se integra a la aplicación, lo que disminuye la latencia.
A pesar de ser pequeña sigue cumpliendo los principios ACID e incluye todas las características de cualquier Base de Datos SQL. Con la particularidad de que es sumamente ligera, rápida y permite almacenar hasta 2T de información.
Cuando utilizar SQLite
- Datos estructurados (SQL) y transacciones ACID
- Base de datos ligera y rápida, ideal para proyectos pequeños y aplicaciones móviles
- Proyectos que no requieran una gran escalabilidad
Microsoft SQL Server
Es una de las alternativas a Postgre, en este caso se recomienda para entorno empresarial. Esté tiene varias versiones Developer y Express (gratuitas), Standard, y Enterprise (comerciales), por lo no es ideal para quienes tienen un bajo presupuesto. Si bien posee una versión gratuita, esta tiene varias limitantes y no permite el manejo de un gran volumen de datos, además de restricciones en el acceso a herramientas.
Dejando de lado el presupuesto, MSSQL tiene varias ventajas como SGBD. Una de ellas es que es código de propietario, esto es algo muy importante en aspectos de seguridad. Por otra parte, sabemos que un gigante de la industria como Microsoft se encarga de el mantenimiento y actualización desde 1989 cuando fue creada.
Por otra parte, garantiza las transacciones ACID y ofrece una consistencia inmediata como servidor único. Otra ventaja es que soporta scripting del lado del servidor con el lenguaje propio T-SQL, .NET y los lenguajes R, Python, y Java. Este es multiparadigma, ya que es relacional pero también soporta el manejo de datos semi estructurados, JSON.
Cuando utilizar Microsoft SQL Server
- Datos estructurados que requieren de transacciones ACID
- El stack de desarrollo está implementado en su gran mayoría o totalidad con productos Microsoft, como .NET
- Se prefiere Azure para el alojamiento y administración de la Base de Datos
Tabla comparativa
PostgreSQL | MySQL | MariaDB | SQLite | Microsoft SQL Server | |
---|---|---|---|---|---|
Licencia | GPL | GPL/privada | GPL | GPL | GPL |
Replicación | Multi-master | Multi-master | multi-master | master-slave | Transaccional, instantánea, peer to peer, bidireccional, suscripciones |
Lenguaje de consulta | PSQL | SQL | SQL | SQL (omite algunas características y agrega nuevas) | Transact-SQL |
Mantenimiento | Comunidad | Oracle | Comunidad | Consorcio | Microsoft |
Compatibilidad | Linux, FreeBSD, Solaris, Mac OSX y Windows | GNU/Linux, Mac OS X, Solaris, SunOS, Windows y más | Windows, Mac OS X y Linux | Windows, Linux y Mac OS X | Windows y GNU/Linux |
Lenguajes | C. C++ Java Java web Perl PHP Python Ruby sh Tcl Scheme | C C++ C# Pascal Delphi Eiffel Smalltalk Java Lisp Perl PHP Python Ruby Gambas REALbasic | C. C++ C# Java Perl PHP Python Ruby | C C++ C# Perl Python Visual Basic Delphi PHP Java Pascal GO | C++ C# Visual Basic Java Python R PHP Ruby Node Js Spark |
No Relacionales
Las Bases de Datos no relacionales también llamadas NoSQL (Not Only SQL) son aquellas que almacenan la información en documentos, sin necesidad de estructuras rígidas como el modelo de tablas y columnas . Los datos se almacenan en formato Json o similar, lo que permite que los registros tengan estructuras diferentes.
Este tipo de base de datos no sigue los principios ACID, ya que su finalidad no es asegurar la integridad y persistencia de los datos. El fin de las base de datos no relacionales es el manejo de grandes volúmenes de datos y disminuir los tiempos de respuesta. Por consiguiente, ofrecen una performance increíble para la lectura de datos y al ser en documentos el escalado horizontal es super facil.
Son ideales para almacenar datos de una red social, buscadores, etc. Donde la consistencia de la información no es tan importante como sí lo es la velocidad de respuesta. Hay que tener en cuenta que no son bases de datos eficientes en la escritura.
MongoDB
Es el líder indiscutido en bases de datos no relacionales, desde su surgimiento en 2009 sus mejoras lo llevaron a ser el mas utilizado. Este es de código abierto, aunque cuenta con varias licencias Community Server (gratuita), Enterprise Server (comercial), Atlas (administrado en Cloud).
MongoDB permite el escalado horizontal mediante Auto-Sharding, significa que se realiza el escalado horizontal en distintos nodos de forma automática. Por otra parte, aplica los principios ACID para la distribución de múltiples documentos con el uso de snapshots. No son los principios ACID como tal de una base de datos relacional, pero los aplica satisfactoriamente.
Además, cuenta con un poderoso lenguaje de consultas que permite realizar consultas complejas. Entre estas soporta consultas Map-Reduce, busqueda de texto, de gráficas y geográfica.
Cuando utilizar MongoDB
- La información a almacenar son documentos o datos semi-estructurados (JSON, XML), con consultas avanzadas
- El esquema está cambiando continuamente y se requiere un desarrollo ágil
- Alto volumen de datos, los cuales en una base de datos relacional tendrían problema de performance
- Se prefiere la consistencia de los datos antes que la disponibilidad para datos semi-estructurados
Redis
Surgió en la búsqueda de una solución para el análisis de logs en tiempo real, volviéndose un sistema de almacenamiento de datos clave-valor en memoria. Enseguida se volvió popular entre la comunidad y evolucionó a un sistema altamente escalable.
Redis también puede ser utilizado para almacenar caché de forma distribuida o como manejador de mensajes, permitiendo elegir el tiempo que son almacenados. Por otra parte, también puede almacenar la información de forma duradera o persistente, como cualquier base de datos.
Cuando utilizar Redis
- Datos distribuidos en memoria
- Almacenamiento de caché distribuido
- Manejo de sesiones
- Manejo de datos en tiempo real
Elasticsearch
Es uno de los mejores motores de búsqueda, este fue desarrollado en base a Lucene y proporciona de igual manera una búsqueda de texto completo. Otro de sus objetivos, es ser un sistema distribuido desde el primer momento, permitiendo el escalado horizontal de forma automática.
Las comunicación con Elasticsearch se realizan mediante consultas de API REST. Esto hace la comunicación mucho mas fácil desde cualquier lenguaje. Por lo que es ideal para análisis de seguridad, análisis de logins, métricas y monitoreo en general.
Cuando utilizar Elasticsearch
- Búsquedas de texto completo avanzadas o semi-avanzadas
- Búsquedas en tiempo real con características avanzadas de Machine Learning
- Grandes volúmenes de datos
- Uso de datos semi-estructurados
DynamoDB
Es un servicio de Bases de Datos no relacionales ofrecido por Amazon y forma parte de Amazon Web Services. La ventaja de DynamoDB es que es administrada, contando con respaldos, restauración, seguridad integradas y almacenamiento de caché en memoria.
Este servicio es ideal para sitios con millones de visitas, donde la escalabilidad es super importante. Para entrar en contexto, DynamoDB soporta 10 billones de solicitudes por día y puede admitir picos de 20 millones por hora. Al igual que otros servicios de Amazon, los costos depende de los recursos que necesitemos.
Cuando utilizar DynamoDB
- Gran volumen de datos con un elevado número de consultas
- Escala extrema en rendimiento y uso en simultáneo
- Utilizas Amazon Web Services
- Baja latencia y fiabilidad
Tabla comparativa de alternativas a PostgreSQL
MongoDB | Redis | Elasticsearch | DynamoBD | |
---|---|---|---|---|
Licencia | AGP | BSD | Apache | privada |
Replicación | primario-secundario | maestro-esclavo replicación en forma de árbol | sharding | cross-region |
Lenguaje de consulta | JavaScript | LUA Script | JSON | PartiQL |
Mantenimiento | MongoDB Inc | Redis Labs | Elastic | Amazon |
Compatibilidad | Windows GNU/Linux OS X Solaris | Linux OSX OpenBSD NetBSD FreeBSD | Linux Solaris Amazon Linux Windows SLES Oracle | Amazon |
Lenguajes | C C++ C# / .NET Java JavaScript Node.js Perl PHP Python Ruby Scala Delphi | ActionScript C C++ C# Clojure Erlang Go Haskell Java server-side JavaScript (Node.js) Objective-C Perl PHP Python Ruby Scala Smalltalk | Java .NET (C#) PHP Python Apache Groovy Ruby | Java .NET (C#) JavaScript PHP Python Ruby |
Conclusión
En esta ocasión vemos varios tipos de bases de datos, que pueden ser alternativas a PostgreSQL y otras muy diferentes. La idea es mostrar cuándo utilizar ciertos tipos de bases de datos, ya que hay muchas en el mercado, algunas mas nombradas que otras, pero que dada la gran variedad pueden generar confusión a la hora de elegir una de ellas.
Como siempre recalcamos que el elegir una u otra depende de varios factores, no solo de su performance respecto al uso que le vayamos a dar. Tenemos que tener muy en cuenta nuestros conocimiento y nuestro presupuesto. Aprender algo nuevo va a requerir mas tiempo de desarrollo y gastos.
¿Cuál es tu favorito de los que hemos visto? Dejanos tu opinión en los comentarios.