Anteriormente les hablamos de MySQL vs MariaDB, un post que generó bastante revuelo y que al día de hoy ofrece una visión sobre alternativas a MySQL que debemos tener en cuenta. En el día de hoy seguiremos con otra comparación, esta vez sobre MySQL vs Percona.
Si bien MySQL y Percona son ambos motores de bases de datos MySQL, los mismos tienen sus diferencias. Cabe destacar que cuando decimos MySQL nos referimos al gestor de base de datos open source y a su versión de pago manejada por Oracle.
Percona comenzó como un fork de MySQL prometiendo desde el principio mejor rendimiento y escalabilidad, asegurando 100 % de compatibilidad con MySQL. Este servidor alternativo a MySQL nos permite realizar migraciones desde MySQL de forma muy sencilla e incluso incremental, asegurando la compatibilidad en todas sus versiones gracias a que por cada versión de MySQL-Oracle hay una versión de MySQL-Percona.
¿Quienes usan MySQL y Percona?
MySQL a generado una gran cantidad de seguidores desde sus comienzos, dentro de su clientes hay grandes empresas como Facebook, Telenor y iStock, puedes ver la lista completa en su sitio.
Por otra parte otros grandes del mercado como IBM, Sony, Vimeo, entre otros han optado por Percona, eliminando las restricciones de la versión gratuita, aumentando la agilidad y sin restricciones de crecimiento.
Contenido
¿Qué diferencias hay entre MySQL vs Percona?
Veamos ahora una a una las diferencias que existen entre MySQL y Percona como motores de bases de datos. Analizaremos muchos aspectos como consultas, clustering, rendimiento, seguridad y otros, para que al final de esta comparación puedas elegir tu nuevo motor de base de datos para el siguiente proyecto.
Estructura de las bases de datos
MySQL es un sistema de gestión de bases de datos relacionales con todo lo que ello implica, esquema rígido, datos almacenados en tablas, transferencias, triggers, índices, seguridad basada en privilegios y todas las características de una base de datos relacional que ya conocemos.
Percona, al ser un fork de MySQL cuenta con las mismas características que MySQL a nivel de estructura, esto es lo que las hace 100% compatibles.
Incluye compatibilidades como:
- Los documentos de datos y tablas.
- Protocolos de clientes y estructura
- Los conectores de MySQL funcionan en Percona
Diferencias entre las consultas SQL
Las consultas de MySQL y MySQL-Percona son exactamente iguales, por lo que en realidad no hay diferencia alguna.
No tendrás que cambiar tu código para nada si eliges Percona sobre el clásico MySQL.
Seleccionar registros de la tabla usuario
MySQL:SELECT * FROM usuario;
Percona:SELECT * FROM usuario;
Insertar registros en la tabla usuario
MySQL:INSERT INTO usuario(id, nombre, estado, pago, fecha_pago ) VALUES ('0', 'José', 'Perez', 'estado', 'pago', 'fecha_pago');
Percona:INSERT INTO usuario(id, nombre, estado, pago, fecha_pago ) VALUES ('0', 'José', 'Perez', 'estado', 'pago', 'fecha_pago');
Modificar registros en la tabla usuario
MySQL:UPDATE usuario SET estado="suspendido" WHERE pago == "pendiente" AND fecha_pago > today;
Percona:UPDATE usuario SET estado="suspendido" WHERE pago == "pendiente" AND fecha_pago > today;
Instalación
MySQL: fue desarrollado en los lenguajes C y C++, el mismo es compatible con Microsoft Windows, OS X, Linux, AIX, BSDi, FreeBSD, HP-UX, NetBDS, Novell Netware y muchos más, esto lo convierte en multiplataforma.
Para instalar MySQL puedes dirigirte a MySQL Downloads , en la web encontrarás los instaladores de las distintas versiones, los comandos para instalarlo en Linux y las instrucciones de instalación.
Percona: Al ser un fork de MySQL fue desarrollado con los mismos lenguajes C y C++ además de Perl y Bash. A diferencia de MySQl, Percona está disponible únicamente para sistemas Linux.
Podemos descargarlo desde Percona Downloads , donde también nos ofrecerá documentación de ayuda para su instalación y configuración.
Tipos de Replicación y Clustering
La replicación nos asegura que la información se mantenga sincronizada en 2 locaciones diferentes, comúnmente 2 servidores distintos.
Las opciones de replicación en MySQl y Percona básicamente son las mismas:
- Estándar Asíncrona, la replicación se realiza desde el maestro al esclavo donde todos los datos del primero son replicado en el segundo y los cambios realizados en el esclavo no son replicados en el master.
- Semi-Sincrónica, el master y el slave se comunican entre ellos aunque la sincronización sigue siendo Maestro – Esclavo donde el maestro envía una transacción y no vuelve a enviar una siguiente hasta que un esclavo confirme que fue recibida correctamente.
Este tipo de replicación impacta negativamente en el rendimiento dado que el Master debe esperar al Slave. - Replicación en Grupo, fue introducido en la versión 5.7 de MySQL y consiste en que cada vez que se ejecute una transacción en un nodo el plugin realiza un consenso con todos los nodos antes de realizar un return completo al cliente. Si te interesa saber más sobre este nuevo tipo de replicación y su performance puedes chequear el análisis de MySQL high Availability
Una opción mas que ofrece Percona en su producto XtraDB Cluster es la sincronización Percona XtraDB Cluster / Galera Cluster, este tipo de sincronización es especialmente para clusters como bien lo indica su nombre. Se centra en la consistencia y utilización de un sistema de certificación para evitar conflictos en las transacciones, cada entorno está sujeto a los mismos datos y los nodos se comunican entre ellos para garantizar la coherencia. Este tipo de sincronización es sincrónica aunque también puede utilizar la replicación multi-maestro.
Soporte Técnico y Documentación
MySQL ofrece soporte de por vida por parte de Oracle, el mismo incluye disponibilidad 24/7, arreglo de bugs, parches y versiones de mantenimiento. Oracle también ofrece soporte premium, extendido y soporte de mantenimiento personalizado.
Percona divide el soporte por planes en Essentials, Advanced y Premium que puede ser contratado en su página oficial. En todas los planes el soporte es 24/7 y las categorías que cubre dependel del plan, donde la más básica cubre soporte para bases de datos open source y tiempos de respuesta promedio.
En ambos casos también tenemos el apoyo de la comunidad en blogs y foros.
En cuanto a la documentación en ambos casos la documentación es realizada y mantenida por las compañías detrás de cada motor dado que son quienes realizan y toman las decisiones de desarrollo.
Comunidad
En ambos hay una comunidad activa, aunque es visiblemente más grande la comunidad de MySQL por su historia.
MySQL tiene su propio foro oficial y también algunas otras webs como Oracle Community , MySQL eventos y conferencias entre otras.
Percona por otro lado desde su sitio oficial ofrece acceso a sus blogs, foros, eventos y Percona live para obtener toda la ayuda que necesites.
Conectores a bases de datos
MySQL ofrece una amplia variedad de conectores incluyendo C, C++, Delphi, Perl, Java, Lua, .NET, Node.js, Python, PHP, Lisp, GO, R, D y Erlang.
Percona por otra parte en su sitio web afirma ser 100% compatible con todas las librerías de clientes y los conectores.
Por lo que en ambos casos la compatibilidad es total para la mayoría de los lenguajes de programación modernos.
Rendimiento
Como ya hemos mencionado anteriormente a nivel de rendimiento Percona ofrece más velocidad aunque la misma empieza a notarse cuando generamos un gran volumen de consultas. Al utilizar mucha memoria RAM Percona tampoco es recomendado para manejar pequeñas cantidades de datos ya que la diferencia de velocidad no se hace tan significante comparado con el uso de recursos.
En la siguiente gráfica vemos los resultados al comparar MySQL 5.5.8 con Percona MySQL 5.5.7 Beta en una carga de trabajo OLTP similar a TPC-C.
Como podemos notar Percona es 40% más rápido que MySQL y se mantiene más estable a lo largo del tiempo mientras que MYSQL sigue teniendo fuertes caídas en el rendimiento debido a los puntos de control.
Postura frente a Índices
En las bases de datos relacionales el uso de índices nos ayuda a mejorar las búsquedas, acelerar las consultas y tener una referencia de la información. Los índices son imprescindibles a la hora de manejar las relaciones donde en las mismas se referencia el índice de la tabla secundaria como clave foránea de la tabla principal.
En otras palabras, son indispensables para tener un buen rendimiento a la hora de realizar nuestras consultas.
Pero como todo no es bueno abusar de los Índices, cada vez que realizamos un insert o update los índices son regenerados y esto enlentece las consultas. Es al realizar búsquedas que nos ayudan a reducir los tiempos de respuesta, siempre y cuando no tengamos índices duplicados o que no se están utilizando eso provocará un enlentecimiento en las consultas.
En la pagina oficial de Percona recomiendan la utilizacion de Indices unicamente en los casos extrictamente necesarios dado que como comentamos anteriormente pueden perjudicar más de lo que ayudan si abusamos de ellos.
Por otra parte en la documentación de MySQL mencionan que los índices son menos importantes en tablas pequeñas o tablas demasiado grandes en las que necesitamos la mayoría de las filas, en este último caso es más rápida la lectura secuencial.
Seguridad
Ambos motores de base de datos utilizan un modelo de seguridad basado en privilegios donde se crean usuarios a los cuales se le brinda determinados permisos. Los permisos van desde CREATE, INSERT, SELECT hasta permisos como DELETE, ALTER o ALL.
A nivel de conexión con la base de datos ambos permiten encriptación SSL desde el cliente.
En la última versión de MySQL 8.0 se realizaron algunas mejoras en la seguridad, en la edición Enterprise se agregó capacidad de enmascaramiento y De-identification, implementado como una librería de plugins conteniendo un plugin y un set de funciones definidas por el usuario. El enmascaramiento oculta la información real reemplazandola por datos sustitutos. Puedes ver más detalles de esta nueva versión en las notas de lanzamiento.
La versión 8.0 de Percona aún no es estable, en cuanto a la seguridad en esta versión se mejoró el cifrado permitiendo la integración con Hashicorp Vault para la administración de llaves de encriptación. También se hicieron algunas mejoras a la hora de aplicar permisos permitiendo crear roles y luego asignar roles a los usuarios de MySQL.
En el release de Percona no hacen referencia al enmascaramiento implementado en MySQL 8.0, puede que aun no este implementado pero de seguro lo harán más adelante teniendo en cuenta que su filosofía es brindar todas las ventajas de la versión enterprise de Oracle de forma gratuita.
Tabla comparativa MySQL vs Percona Server
En esta tabla se reflejan las diferencias entre MySQL y Percona como motores de bases de datos:
MySQL | Percona | |
---|---|---|
Versión inicial | 1995 | 2008 |
Último Lanzamiento | 8.0.12, July 2018 | 5.7.23-23, September 2018 |
Protocolos | MySQL protocol over port 3306, X Protocol over port 33060 | MySQL protocol over port 3306, X Protocol over port 33060 |
Security – Firewall | MySQL Enterprise Firewall | ProxySQL Firewall |
Security – Auditing | MySQL Enterprise Audit Plugin | Percona Audit Plugin (OSS) |
Analítica | No | ClickHouse |
Monitoreo | MySQL Enterprise Monitor | Percona Monitoring & Management (PMM) (100% open source) |
Backup | MySQL Enterprise Backup | Percona XtraBackup |
Equilibrio de carga y Routing | MySQL Router | ProxySQL |
Database Firewall | MySQL Enterprise Firewall | ProxySQL |
Métodos de Replicación | Master-master replication Master-slave replication | Master-master replication Master-slave replication XtraDB Cluster |
MySQL o Percona: ¿Cuál debo elegir para mi proyecto?
La mayor diferencias entre estos manejadores es su estrategia de negocios, Percona ofrece todas las ventajas de la versión enterprise de Oracle de forma gratuita e incluso con algunas mejoras.
Percona esta diseñado para emprendimientos de alto rendimiento especializándose en la rapidez, hay que tener en cuenta que al ser más rápido necesita de más recursos para su funcionamiento principalmente memoria RAM. Otra razón para elegir este manejador sobre MySQL en proyectos grandes es si queremos ahorrar en recursos económicos pero necesitamos un manejador de base de datos potente y sin restricciones.
Si nuestro proyecto es algo chico lo mejor es utilizar MySQL ya que al nivel de cantidad de consultas que va a ejecutar la velocidad no incidirá tanto y nos ahorraremos una buena cantidad de memoria RAM.