PostgreSQL vs MySQL

Al considerar qué base de datos usar para su negocio, ¡no cometa el error de pensar que todos los gestores de bases de datos de código abierto son lo mismo!

Hay diferencias radicales entre PostgreSQL y MySQL. Se debe tomar una decisión informada después de evaluar las diferencias y compensaciones entre los dos sistemas.

Hemos hecho un resumen de las similitudes y diferencias de las capacidades y características más comúnmente evaluadas entre PostgreSQL y MySQL:

 

 

Aunque hay muchas similitudes y coincidencias entre las dos bases de datos, también hay diferencias bien marcadas. Hemos tratado de proporcionarle un comparación justa y precisa entre las dos, pero al final es necesario evaluar su escenario particular y determinar qué base de datos es la más adecuada para su caso de uso específico.

Obviamente apoyamos PostgreSQL, pero es posible que haya algunos escenarios en los que MySQL beneficie más al usuario final.

Código abierto

El software de código abierto tiene beneficios únicos —costo, flexibilidad, seguridad y responsabilidad— que no pueden ser superadas por las soluciones de software privativo. El software de código abierto está disponible gratuitamente y puede ser redistribuido y modificado por cualquiera. El software de código abierto tiene viabilidad a largo plazo y siempre está a la vanguardia de la tecnología. Es creado y soportado por una comunidad mundial de organizaciones y desarrolladores individuales, muchos de los cuales también se rigen por los valores del código abierto, como la colaboración y el voluntariado.

PostgreSQL

MySQL

PostgreSQL es desarrollado por el Grupo Global de Desarrollo de PostgreSQL, un grupo diverso de múltiples compañías y contribuyentes individuales. 

 

Es software libre y de código abierto. PostgreSQL se lanza bajo la licencia PostgreSQL, una licencia de código abierto liberal, similar a las licencias BSD o MIT.

El proyecto de desarrollo de MySQL ha hecho disponible su código fuente bajo los términos de la Licencia Pública General de GNU, así como una variedad de acuerdos privativos.

 

Ahora es propiedad de Oracle Corporation y ofrece varias ediciones pagadas para uso privativo.


Cumplimiento de ACID 

ACID (atomicidad, consistencia, aislamiento, durabilidad) es un conjunto de propiedades de las transacciones de bases de datos. El cumplimiento de ACID asegura que ningún dato se pierda o transmita a otro lugar en el sistema en caso de una falla, incluso cuando se hacen varios cambios durante una sola transacción.

PostgreSQL

MySQL

PostgreSQL cumple con ACID por completo y se asegura de que se cumplan todos los requerimientos.

MySQL solo cumple con ACID cuando usa los mecanismos de almacenamiento InnoDB y NDB Cluster.


Cumplimiento de SQL

El cumplimiento de SQL es un estándar que una base de datos debe cumplir e implementa todos los estándares y pautas para el lenguaje de consulta estructurada. Esto es muy importante cuando las compañías quieren trabajar con bases de datos heterogéneas para una aplicación. 

Cumplir con el estándar SQL hace que sea muy fácil trasladar datos de una base de datos que cumpla con SQL hacia otra (por ejemplo, desde Oracle hacia PostgreSQL o SQL Server).

PostgreSQL

MySQL

PostgreSQL cumple con SQL en gran medida. El nivel de cumplimiento para cada característica se establece de forma clara en el Apéndice D del manual, y cualquier cambio se documenta de forma clara en la sección "Referencia" del manual de PostgreSQL.

 


Extracto de la documentación:

PostgreSQL soporta la mayoría de las principales características de SQL:2011. De las 179 funcionalidades requeridas para un cumplimiento completo de Core, PostgreSQL cumple al menos 160. Adicionalmente, hay una larga lista de características opcionales soportadas. Vale la pena mencionar que, al momento de escribir esto, no hay una versión actual de ningún sistema de gestión de bases de datos que afirme cumplir en su totalidad con Core SQL:2011.

MySQL cumple parcialmente en algunas versiones (por ejemplo, no soporta restricciones CHECK). 

 


Extracto de la documentación:

Uno de nuestros principales objetivos con el producto es continuar trabajando hacia el cumplimiento del estándar SQL, pero sin sacrificar velocidad o confiabilidad. No tememos agregar extensiones a SQL o soportar características no SQL si esto incrementa en gran medida la usabilidad de MySQL Server para un gran porcentaje de nuestra base de usuarios.


Replicación

La replicación de bases de datos es la copia electrónica regular de datos desde una base de datos en un computador o servidor hacia una base de datos en otro, de modo que todos los usuarios compartan el mismo nivel de información. El resultado es una base de datos distribuida en la cual los usuarios pueden acceder a datos relevantes para sus tareas sin interferir con el trabajo de otros.

PostgreSQL

MySQL

PostgreSQL soporta replicación maestro-standby e introdujo mejoras significativas que produjeron procesamiento de WAL extremadamente rápido, lo que resulta en replicación casi en tiempo real y capacidad de espera activa (hot standby) para servidores standby.

 

Tipos de replicación ofrecidos por PostgreSQL:

  • Un solo maestro a un standby

  • Un solo maestro a varios standbys

  • Replicación de flujo/hot standby

  • Replicación bidireccional

  • Replicación lógica por flujo de logs

  • Replicación en cascada

MySQL soporta replicación maestro-standby.

 

Tipos de replicación ofrecidos por MySQL:

  • Un solo maestro a un standby

  • Un solo maestro a varios standbys

  • Un solo maestro a un standby a uno o más standbys

  • Replicación circular (A hacia B hacia C y de vuelta hacia A)

  • Maestro a maestro


Rendimiento

El rendimiento es un área que solo se puede medir evaluando las métricas de escenarios potenciales, pues depende netamente de los requerimientos del usuario en específico y en la naturaleza de la aplicación.

PostgreSQL

MySQL

PostgreSQL se usa ampliamente en sistemas grandes donde la velocidades de lectura y escritura son cruciales y los datos necesitan ser validados. Además, soporte una variedad de optimizaciones de rendimiento que solo están disponibles en soluciones comerciales, como soporte para datos geoespaciales, concurrencia sin bloquedo de lecturas, etc (por ejemplo, Oracle, SQL Server).


En general, el rendimiento de PostgreSQL se aprovecha mejor en sistemas que requieran ejecución de consultas complejas.


PostgreSQL rinde bien en sistemas OLTP/OLAP cuando se requiere velocidad en lectura/escritura y se necesita análisis extenso de datos.


PostgreSQL también funciona bien con aplicaciones de Inteligencia Empresarial pero se ajusta mejor a aplicaciones para Almacén de Datos y análisis de datos que requieren altas velocidades de lectura/escritura.

MySQL es una opción muy popular para proyectos basados en web que necesitan una base de datos simplemente para transacciones de datos directas y sencillas. Sin embargo, es habitual que MySQL no rinda bien cuando se somete a cargas pesadas o al intentar completar consultas complejas.

 

MySQL funciona bien en sistemas OLAP/OLTP cuando solo se requiere velocidad en lectura.

 

MySQL + InnoDB proporcionan muy buenas velocidades de lectura/escritura para escenarios OLTP. En general, MySQL funciona bien con escenarios de alta concurrencia.

 

MySQL es confiable y funciona bien con aplicaciones de Inteligencia Empresarial, pues las aplicaciones de inteligencia empresarial normalmente tienen alta actividad de lectura.


Seguridad

La seguridad de la base de datos se refiere al conjunto de medidas usadas para proteger y asegurar una base de datos o gestor de base de datos contra el uso ilegítimo, amenazas maliciosas y ataques. Es un término amplio que incluye una variedad de procesos, herramientas y metodologías que garantizan la seguridad dentro de un ambiente de base de datos.

PostgreSQL

MySQL

PostgreSQL tiene ROLES y roles heredados para establecer y mantener los permisos. PostgreSQL tiene soporte nativo para SSL en conexiones para cifrar la comunicación cliente/servidor. También tiene seguridad a nivel de registros.

 

Además de esto, PostgreSQL viene con una mejora integrada llamada SE-PostgreSQL, la cual provee controles de acceso adicionales basados en las políticas de seguridad de SELinux. Más detalles (en inglés) aquí.

MySQL implementa seguridad basada en Listas de Control de Acceso (ACLs) para todas las conexiones, consultas y otras operaciones que un usuario pudiera intentar realizar. También hay algo de soporte para conexiones cifradas con SSL entre clientes y servidores MySQL.


Hosting en la nube

A medida que más empresas optan por mover sus datos hacia la nube, la capacidad de encontrar proveedores en la nube que soporten su base de datos se vuelve cada vez más importante. El hosting en la nube permite flexibilidad en los servidores, permitiéndole expandir o contraer rápidamente su capacidad. También le permite reducir el potencial tiempo fuera de línea mientras gestiona fácilmente picos de carga de trabajo.

PostgreSQL

MySQL

Soportado por todos los proveedores más importantes de servicios en la nube, incluyendo Amazon, Google y Microsoft.

Soportado por todos los proveedores más importantes de servicios en la nube, incluyendo Amazon, Google y Microsoft.


Soporte comunitario

PostgreSQL

MySQL

PostgreSQL tiene una comunidad muy fuerte y activa que constantemente mejora características existentes, mientras sus innovadores committers se esfuerzan para asegurar que siga siendo la base de datos más avanzada con nuevas e innovadoras características y seguridad.

MySQL tiene una gran comunidad de contribuyentes que, particularmente desde la adquisición por parte de Oracle, se centra principalmente en mantener características existentes con algunas características nuevas surgiendo ocasionalmente.


Soporte para concurrencia

La concurrencia significa que varios usuarios pueden tener acceso a los datos al mismo tiempo. Es una de las principales funcionalidades consideradas al desarrollar un sistema que requiera que varios suscriptores accedan a los datos al mismo tiempo pues mejora la capacidad de que muchas personas accedan y utilicen la base de datos en varias ubicaciones simultáneamente.

PostgreSQL

MySQL

PostgreSQL hace frente a la concurrencia de forma eficiente con su implementación MVCC (control de concurrencia multiversión), la cual logra niveles muy altos de concurrencia.

MySQL solo tiene soporte MVCC en InnoDB.


Funcionalidad NoSQL/Soporte para JSON

Tanto NoSQL como JSON son muy populares, y las bases de datos NoSQL son cada vez más comunes. JSON es un formato simple de datos que permite a los programadores almacenar y comunicar conjunto de valores, listas y correlaciones clave-valor entre sistemas.

PostgreSQL

MySQL

PostgreSQL soporta JSON y otras características NoSQL como soporte nativo para XML y pares clave-valor con HSTORE. También soporta indexación de datos JSON para un acceso más rápido.

MySQL tiene soporte para tipo de datos JSON, pero no para ninguna otra característica NoSQL. No soporta indexación para JSON.


Vistas materializadas/Tablas temporales

Una vista materializada es un objeto de base de datos que contiene los resultados de una consulta que puede ser actualizada según sea necesario desde la tabla base original. Se la puede ver como un "caché" para bases de datos. 

Una tabla temporal almacena datos que no se necesite que persistan más allá de lo que dure la sesión que la cree. La principal forma en que difiera de las Vistas Materializadas es que estas últimas ofrecen la capacidad de actualizar periódicamente los datos, resultando en mejor eficiencia para ese caso de uso.

PostgreSQL

MySQL

Soporta vistas materializadas y tablas temporales.

Soporta tablas temporales pero no soporta vistas materializadas.


Soporte para datos geoespaciales

Los datos geoespaciales son todos los puntos de datos geográficos que una base de datos mantiene y puede proveer para análisis. Es la información sobre un objeto físico que puede ser representada por valores numéricos en un sistema de coordenadas geográfico.

PostgreSQL

MySQL

PostgreSQL soporta datos geoespaciales mediante la extensión PostGIS. Hay funciones y tipos dedicados para datos geoespaciales, disponibles directamente a nivel de base de datos, haciendo que el análisis y la codificación sea más fácil para los desarrolladores.

El soporte para datos geoespaciales está integrado.


Soporte para lenguajes de programación

El soporte para lenguajes de programación ayuda a una gran variedad de desarrolladores a realizar muchas tareas en el lenguaje en el que tengan más experiencia. Los desarrolladores pueden decidir con libertad, a nivel de casos individuales, si van a realizar cierto procedimiento en el servidor o en el cliente, pues el servidor soporta una gran variedad de diferentes lenguajes de programación para funciones de base de datos. Los lenguajes de programación tienden a dar más poder a los desarrolladores.

PostgreSQL

MySQL

PostgreSQL soporta una gran variedad de lenguajes de programación incluyendo: C/C++, Java, JavaScript, .Net, R, Perl, Python, Ruby, Tcl y otros; incluso es posible ejecutar código proporcionado por el usuario en un proceso separado (esto es, ejecutándose como trabajadores en segundo plano).

Algo de soporte para programación del lado del servidor, en un solo lenguaje no extensible.


Sistema de tipos extensible

Una base de datos que soporta un sistema de tipos extensible puede ser extendido por el usuario de varias formas, lo que incluye agregar nuevos tipos de datos, funciones, operadores, funciones de agregado, métodos de indexación y lenguajes de procedimientos.

PostgreSQL

MySQL

PostgreSQL tiene varias características dedicadas a la extensibilidad. Es posible agregar nuevos tipos, nuevas funciones, nuevos tipos de índice, etc.

No tiene soporte para extensibilidad.


Resumen de la comparación

A continuación se muestra un cuadro de comparación resumido sobre PostgreSQL vs MySQL:

Característica

PostgreSQL

MySQL

Código abierto

Completamente de código abierto

De código abierto, pero propiedad de Oracle y ofrece versiones comerciales

Cumplimiento de ACID

Cumple completamente con ACID

Algunas versiones cumplen

Cumplimiento de SQL

Cumple casi completamente

Algunas versiones cumplen

Soporte para concurrencia

Implementación de MVCC soporta múltiples peticiones sin bloquear lecturas

Soporte en algunas versiones

Seguridad

Seguro desde las bases con soporte SSL

Soporte SSL en algunas versiones

Soporte para NoSQL/JSON

Varias funcionalidades soportadas

Solo soporte para datos JSON

Métodos de acceso

Soporta todos los estándares

Soporta todos los estándares

Replicación

Múltiples tecnologías de replicación disponibles:

 
  • Un solo maestro a un standby

  • Un solo maestro a varios standbys

  • Replicación de flujo/hot standby

  • Replicación bidireccional

  • Replicación lógica por flujo de logs

Replicación estándar maestro-standby:

 
  • Un solo maestro a un standby

  • Un solo maestro a varios standbys

  • Un solo maestro a un standby a uno o más standbys

  • Replicación circular (A hacia B hacia C y de vuelta hacia A)

  • Maestro a maestro

Vistas materializadas

Soportado

No soportado

Tablas temporales

Soportado

Soportado

Datos geoespaciales

Soportado

Soportado

Lenguajes de programación

Soportado

No soportado

Sistema de tipos extensible

Soportado

No soportado

 

2ndQuadrant Updates


Manténgase en contacto con nosotros

Suscríbase a nuestro boletín trimestral (en inglés) para enterarse sobre los últimos avances de 2ndQuadrant y tecnologías relacionadas.

También le enviaremos cualquier actualización o noticia importante que consideremos útil para usted.

Valoramos su privacidad y no compartiremos sus datos con nadie más.

2ndQuadrant Updates