ICM / conectividad / MySQL y PostgreSQL: los gestores base de datos

MySQL y PostgreSQL: los gestores base de datos

7 septiembre 2021 | Carlos Calvo

Cuando se desarrolla un proyecto, este debe acceder a datos almacenados en un gestor de bases de datos, una pregunta típica que nos hacemos es: ¿qué gestor de base de datos debo o puedo utilizar? ¿PostgreSQL o MySQL?

Si necesitamos una característica concreta de un gestor de base de datos, entonces la elección será fácil: usaremos aquel que nos proporcione la característica específica que necesitamos para nuestro desarrollo. En cambio, en otras ocasiones tenemos la sensación de que todos los gestores de bases de datos nos pueden servir ya que nos ofrecen más o menos las mismas prestaciones. Por ello, no somos capaces de saber cuál rendirá mejor para el uso que le daremos.

Hoy vamos a ver una comparativa de algunas de las características de dos de los gestores gratuitos de base de datos más utilizados en el mundo: MySQL y PostgreSQL.

Realmente, si no contamos con especificaciones lo suficientemente claras a la hora de comenzar un proyecto, podríamos pensar que ambos motores de base de datos nos podrían venir bien. Por ello, vamos a comparar algunos aspectos para intentar ayudarte a decidir por uno u otro, cuando cualquiera de los 2 podría servirnos.

Diferencias entre MySQL y PostgreSQL

Licenciamiento

Podemos consultar el licenciamiento de ambos productos aquí  y aquí. Un punto que tener en consideración es la posibilidad a largo plazo de que Oracle, propietario de MySQL, privatice MySQL al 100%. Por otro lado, el licenciamiento de PostgreSQL parece que permanecerá inmutable durante el resto de su vida. Así, si estás realizando un proyecto cuyo desarrollo o mantenimiento durará años, los posibles futuros cambios en el licenciamiento de nuestro gestor de base de datos es un punto que tener en cuenta.

Uso en el mundo MySQL vs PostgreSQL

Hasta hace algunos años, el uso de MySQL estaba muy extendido, siendo la opción más elegida entre los equipos de desarrollo. Pero esta tendencia está cambiando poco a poco con el paso de los años. En principio, no debería afectarnos que uno u otro gestor de base de datos se usen más o menos. Pero sí es verdad que cuando usamos un producto con licenciamiento “libre” es importante que haya una comunidad numerosa en internet que utilice el servicio en concreto. Así, cuanto mayor sea la comunidad, más fácil nos será encontrar artículos con ejemplos, soporte, recomendaciones, resolución de errores, etc.

Si consultamos en Google Trends cuál es la tendencia de uso de estos dos motores de base de datos, podemos ver como MySQL va cayendo muy poco a poco con el paso de los años a favor de PostgreSQL:

postgrate mysql

RDBMS vs ORDBMS

MySQL es un sistema de administración de bases de datos relacionales y trabaja con un modelo relacional de datos. PostgreSQL trabaja con un modelo ORDBMS, el cual permite guardar los datos como objetos, mientras que los metadatos que envuelven al objeto residen en un sistema de almacenaje tradicional en bases de datos.

Es necesario saber cómo querremos trabajar en nuestro proyecto, porque este factor es clave y podría obligarnos a optar por uno de los dos gestores de base de datos. También este sistema tiene algunas implicaciones en el rendimiento. Los sistemas ORDBMS deben convertir los objetos a formato relacional, por lo que el rendimiento de los accesos de lectura/escritura podría verse ligeramente afectado.

Soporte para JSON y otros formatos de datos

Actualmente, muchas aplicaciones trabajan con conjuntos de datos en formato Json. En general, se está tendiendo a almacenar los datos en objetos con estructura que se serializan desde/hacia la base de datos en formatos concretos, tales como Json, Xml, Yaml, etc.

MySQL dispone de un tipo de dato específico para almacenar datos en formato JSON. Así, el desarrollador no pierde el tiempo en transformaciones de datos para almacenar este tipo de datos. Además, es especialmente útil si la propia aplicación ya trabaja con conjuntos de datos en Json. PostgreSQL convierte también automáticamente los conjuntos de datos a Json de forma nativa.

Desgraciadamente, en este momento MySQL no soporta más que Json como tipo de dato, mientras que PostgreSQL soporta nativamente Json, XML, JsonB y otros formatos que nos pueden ser útiles a la hora de guardar objetos en esos formatos y leerlos posteriormente, dejando de mano de PostgreSQL la conversión entre objeto y el tipo de dato correspondiente a utilizar.

Además, PostgreSQL permite la indexación de datos en Json, por lo que podemos mejorar el rendimiento de las búsquedas dentro de este tipo de datos considerablemente. Nuevamente, muy útil para manejar los tipos de datos más utilizados en el desarrollo de aplicaciones modernas.

Otra característica de PostgreSQL es la posibilidad de realizar consultas mediante JsonPath, un excelente motor de búsqueda dentro de objetos Json.

Storage Engines MySQL vs PostgreSQL

PostgreSQL tiene un único motor de almacenamiento de datos mientras que MySQL tiene 10. En sus inicios, trabajó únicamente con el motor MyISAM, que fue concebido para conseguir tasas de acceso a datos muy rápidas a costa de no poder contar con transacciones, ni bloqueo de registros, ni integridad referencial ni otras características que hacen que el motor tenga un rendimiento muy bueno a costa de descartar funcionalidades.

Con MySQL podremos utilizar cualquiera de los 10 motores de almacenamiento, incluyendo el almacenamiento en RAM, por lo que aparentemente nos será más versátil, ya que cada componente de nuestra aplicación podría utilizar un motor de almacenamiento diferente en función de las necesidades de acceso a datos que tenga.

Facilidad de uso

Desde el punto de vista del usuario, son dos gestores de bases de datos casi idénticos. Ambos disponen de herramientas de consola para el acceso a los datos y también de gestores con interfaz Web para el usuario. Así, MySQL cuenta con phpMyAdmin mientras que PostgreSQL dispone de phpPgAdmin. En este punto, la interfaz Web de MySQL es más sencilla y ofrece un número menor de opciones avanzadas, haciendo que la opción de MySQL tenga una curva de aprendizaje más ligera.

Integridad de los datos y fiabilidad

Para comentar este punto primero debemos explicar qué es ACID. ACID son una serie de características que cualquier gestor de bases de datos debe cumplir:

  • Atomicidad: Es la capacidad de realizar una operación consistente en múltiples pasos, de forma que todo se ejecute correctamente o que no se ejecute. Este punto nos resulta más familiar si hablamos del término transacción.
  • Consistencia: Es el mecanismo por el cual el gestor de bases de datos se asegura que sólo ejecutará aquellas operaciones que no incumplan reglas de integridad de base de datos.
  • Aislamiento: Es el mecanismo que asegura que una operación no puede afectar a otra, aunque se esté realizando sobre el mismo conjunto de datos. Por ejemplo, en la ejecución de dos transacciones sobre el mismo conjunto de datos.
  • Durabilidad: Es el mecanismo que asegura que, una vez realizada una operación, esta persistirá en el tiempo y no se verá alterada o revertida si falla el sistema.

Ahora que hemos realizado una resumida introducción de qué es ACID, simplemente comentar que PostgreSQL es 100% ACID Compliant, lo que significa que cumple el estándar ACID en todo su conjunto. Mientras que MySQL depende del motor de almacenamiento que seleccionemos para guardar los datos; sólo InnoDB y NDB soportan el estándar ACID. Así que este es un punto decisivo porque,  ¿guardaríamos datos de carácter crítico en un gestor de base de datos que no ofrezca ACID al 100%? Bueno, realmente es un punto para considerar y a tener en cuenta.

Replicación MySQL vs PostgreSQL

Ambos entornos permiten replicación de datos, aunque en mi opinión, algunas técnicas para la replicación de MySQL son algo antiguas. Por lo general, ambos gestores acceden replicación entre un master y N nodos en Standby. Además, MySQL permite la replicación master-master, a costa de una pérdida de rendimiento que, dependiendo del volumen de datos que se inserten/actualicen, puede ser grande.

PostgreSQL tiene algunos mecanismos de replicación algo más avanzados y que quizás nos den más posibilidades a la hora de “jugar” con montajes complejos.

A continuación, describimos algunos de los sistemas de replicación del que hace uso cada gestor de base de datos:

SQL

No es fácil saber qué gestor de bases de datos nos ofrecerá más características acordes a nuestras necesidades. Por eso, es importante tener el máximo de información posible de ambos productos para poder decidir conscientemente. No podemos confirmar que uno sea mejor que el otro porque estaríamos mintiendo: lo que hará bueno o malo un producto son nuestras propias necesidades y es por eso por lo que debemos conocerlos antes de decidirnos por uno u otro.