21/09/2013

¿Porque usar MariaDB en lugar de MySQL?

MySQL, MariaDB

Josep Sanz

Tras varias transacciones comerciales/empresariales que han llevado a MySQL de un lado a otro, finalmente ahora es propiedad de Oracle (empresa que se dedica a comercializar otros SGBD privativos). Bajo mi punto de vista, estos hechos han llevado al proyecto de software libre MySQL a vivir un deterioro global puesto que este sistema gestor de base de datos (SGBD) actualmente ofrece un rendimiento excesivamente bajo, cosa que se hace latente en SaltOS cuando el sistema tiene un elevado número de datos.

Los tests que empleo para optimizar las consultas de SaltOS usan un paquete de datos predefinido y se ejecutan sobre SQLite y MySQL (los dos SGBD soportados actualmente). Para medir los tiempos de respuesta empleo simplemente los comandos time y wget desde la línea de comandos, de forma que puedo hacerme una idea rápida de la eficiencia de las consultas mientras desarrollo. Lás diferencias entre estos dós sistemas para consultas relacionadas con la aplicación de correo electrónico y dado un mismo juego de datos es de:

  • page=correo&action=list: 289ms (SQLite) vs 1548ms (MySQL)
  • page=correo&action=quickform: 286ms (SQLite) vs 1380ms (MySQL)
Como se puede ver, la diferencia es sustancial: SQLite sólo requiere un 20% aprox. del tiempo que necesita MySQL. Tras revisar y intentar hacer optimizaciones, todas inútiles por cierto, descubrí a MariaDB, un fork del proyecto MySQL, hecho por uno de los autores de MySQL que dejo su trabajo tras entender, sin que nadie le explicara nada, las intenciones que tenia la nueva compañia con MySQL. Instalé rápidamente este reemplazo de MySQL en mi portatil, desde los repositorios del propio proyecto para Fedora 17 y voila, ya tenia a MariaDB corriendo en lugar de MySQL. Mi sorpresa fue sustancial cuando ejecute los tests para la misma aplicación y pude observar que las consultas de MariaDB se ejecutaban con velocidades muy similares a las de SQLite:
  • page=correo&action=list: 288ms (SQLite) vs 413ms (MariaDB)
  • page=correo&action=quickform: 285ms (SQLite) vs 335ms (MariaDB)
Increiblemente, se habian reducido los tiempos de ejecución de MariaDB y sin tocar nada de código. Todo sigue funcionando ok, phpMyAdmin funciona ok, SaltOS funciona ok y RhinOS, también funciona ok sobre MariaDB, el reemplazo realmente libre de MySQL. Para más info del proyecto MariaDB: ¿Como instalar MariaDB en Fedora 17?

El proceso de instalación de MariaDB en fedora 17 es sumamente sencillo, basta seguir estos pasos y voila:

1) Añadir el repositorio de MariaDB

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/fedora17-amd64
gpgcheck = 1
enabled = 1

2) Ejecutar la siguiente secuencia de comandos:

service mysqld stop
rpm -e --nodeps mysql-libs mysql-client mysql-server
rpm --import http://yum.mariadb.org/RPM-GPG-KEY-MariaDB
yum install MariaDB-server MariaDB-client MariaDB-common MariaDB-compat MariaDB-shared
service mysql start
service httpd restart

3) Si al acceder al phpMyAdmin, sale el error de que no encuentra la extensión mysqli, es porque se esta usando el paquete php-mysql en lugar del php-mysqlnd, y se puede solucionar formalmente haciendo:

rpm -e --nodeps php-mysql
yum install php-mysqlnd
service httpd restart

Notas:
  • No hay que hacer caso de los mensajes de error que aparecen diciendo que no se encuentran algunos ficheros del mysql, pues al instalar MariaDB, se comprueban dependencias y se detectan que hay paquetes que dependian de los paquetes desinstalados a mano.
  • Respecto a los repositorios: existen todos estos repos (en el ejemplo hace referencia a fedora 17 para 64 bits):
    • centos5-amd64
    • centos5-x86
    • centos6-amd64
    • centos6-x86
    • fedora16-amd64
    • fedora16-x86
    • fedora17-amd64
    • fedora17-x86
    • rhel5-amd64
    • rhel5-x86
    • rhel6-amd64
    • rhel6-x86
Actualización (2013-09-07):

Buenas noticias: Fedora 19 ya ha reemplazado MySQL por MariaDB. Como otras muchas distribuciones, al instalar Fedora 19, ya se instala por defecto MariaDB en lugar de MySQL.


Línies de XML
63,511
Línies de PHP
15,001
Línies de JS
14,448
Línies de T2T
3,499
Línies de XSLT
2,640
Línies de SQL
1,681