Vous êtes sur la page 1sur 3

PRCTICO MariaDB vs.

MySQL

CARA A CARA
Comparamos MariaDB y MySQL
Maxim Kazmin, 123RF

MariaDB es primo hermano de MySQL pero no un hermano gemelo. POR DANIEL BARTHOLOMEW

ySQL ha sido indiscutiblemente durante aos la base de datos ms popular del mundo. Mucho ha tenido que ver con ello la proliferacin de sistemas LAMP (Linux, Apache, MySQL, PHP/Python/Perl) usados para la implementacin de sitios web de todos los tamaos. Esta posicin dominante probablemente haya sido el motivo de preocupacin para muchos primero, cuando Sun Microsystems adquiri MySQL Ab (la empresa que haba detrs de MySQL), y luego cuando Oracle compr Sun. Un grupo de, en su mayora, empleados originales de MySQL AB, liderado e iniciado por el cofundador de MySQL Michael Monty Widenius, tuvo la determinacin de dejar Sun/Oracle, crear una nueva empresa, Monty Program, y crear una rama de MySQL llamada MariaDB.

nmero de versin. Dado que MariaDB es MySQL ms unas cuantas cosas ms, lo ms lgico es que nos centremos en esas funcionalidades adicionales que tiene MariaDB y de las que carece MySQL.

Diferencias y Funcionalidades
Como hemos dicho, las actuales versiones estables de cada base de datos son MySQL 5.5.8 y MariaDB 5.2.4. Las versiones de MariaDB suelen tardar en salir algo ms que sus equivalentes en MySQL, motivo por el cual an no se ha publicado MariaDB 5.5.8. Este retardo suele ir desde un par de semanas hasta dos o tres meses, lo que le permite a sus desarrolladores integrar adecuadamente el nuevo cdigo de MySQL en el rbol de fuentes de MariaDB y probarlo en busca de regresiones en el rendimiento o de nuevos bugs. En una primera toma de contacto, uno puede pensar que no ha habido muchos cambios. El servidor se sigue llamando mysqld, el cliente de lnea de comandos se llama mysql, el archivo de configuracin principal sigue siendo my.cnf, y todos los conectores, como el de PHP o el de Python, funcionan sin ningn tipo de problema. El cambio ms visible, al menos para los usuarios del cliente mysql, es puramente esttico. El intrprete ha sido modificado para que sea ms informativo, indicando si estamos conectados a una base de datos MariaDB o MySQL. Adems muestra el nombre de la base de datos a la que estamos conectados o (none) si no estamos conectados a ninguna base de datos espec-

MariaDB
El objetivo general de MariaDB es el de ser una alternativa a MySQL eso s, con ms funcionalidades y mejor rendimiento que ste. MariaDB est basado en la versin homloga de MySQL, si sta existe. Por ejemplo, MariaDB 5.1.53 est basada en MySQL 5.1.53, con algunas soluciones a errores, motores de almacenamiento adicionales, nuevas funcionalidades y mejoras en el rendimiento. Las versiones de MariaDB que no tienen una versin equivalente en MySQL (como por ejemplo MariaDB 5.2.4) contienen nuevas funcionalidades lo suficientemente importantes como para que sus desarrolladores decidan incrementar el

fica. Otra nota sobre la aplicacin cliente: debido a la especial atencin que ponen los desarrolladores de MariaDB en mantener la compatibilidad retroactiva con MySQL, ambas aplicaciones cliente funcionan con cualquiera de las dos bases de datos, como se puede ver en las Figuras 1 y 2. El siguiente cambio visible es que MariaDB incluye varios motores de almacenamiento adicionales (cuya lista se puede mostrar con el comando show storage engines;). Entre otros, se incluyen los motores Aria, XtraDB (una versin mejorada y ampliada de InnoDB), PBXT, FederatedX (una alternativa a Federated), OQGRAPH y SphinxSE. Todos ellos estn disponibles para MySQL, pero para usarlos necesitamos compilarlos o instalarlos nosotros mismos. Con MariaDB, estn todos disponibles desde el momento de la instalacin. Naturalmente, todos los motores que se incluyen en MySQL (MyISAM, blackhole, CSV, Memory, etc.) estn incluidos en MariaDB. Tambin se han realizado mejoras en INFORMATION_SCHEMA, que proporciona los datos de la base de datos. MariaDB ha aadido ms datos a varias tablas. Primero, la tabla INFORMATION_ SCHEMA. PLUGINS tiene dos nuevas columnas, PLUGIN_MATURITY y PLUGIN_AUTH_VERSION, en las que se pueden ver los nmeros de versin de los plugins, as como la madurez del plugin instalado, stable, beta u otra calidad. Otra mejora consiste en la adicin de una nueva columna, TIME_MS, a la tabla INFORMATION_SCHEMA.PROCESSLIST.

44

Nmero 73

WWW.LINUX- MAGAZINE.ES

MariaDB vs. MySQL PRCTICO

Figura 1: Clientes de MariaDB 5.2.4 (arriba) y MySQL 5.5.8 conectando con un sevidor MySQL 5.5.8. Como no se ha seleccionado ninguna base de datos, el cliente mysql de MariaDB muestra (none) en el espacio para el nombre de la base de datos abierta.

Figura 2: Clientes de MariaDB 5.2.4 (arriba) y MySQL 5.5.8 conectando con un sevidor MariaDB 5.2.4. Como no se ha seleccionado ninguna base de datos, el cliente mysql de MariaDB muestra (none) en el espacio para el nombre de la base de datos abierta.

Esta columna proporciona la misma informacin que la columna TIME, pero en unidades de milisegundos y con una precisin de microsegundos; la columna TIME tiene una precisin de 1 segundo, que es tambin la unidad de sta. El registro de consultas lentas tambin ha sido mejorado. En MariaDB podemos establecer la verbosidad, filtrar las consultas que no queremos que se registren o limitar la tasa de registros, por ejemplo, para que slo se registre una cuarta parte de las consultas en vez de todas ellas. Igual que ocurre con el resto de nuevas funcionalidades de MariaDB, no se habilita por defecto en el archivo de configuracin predeterminado, a fin de mantener la mxima compatibilidad con el comportamiento de MySQL [1].

Otros Cambios
Hay otros muchos cambios en MariaDB que no son tan visibles, pero que ayudan ya sea a mejorar el rendimiento de MariaDB, a dotarlo de una mayor flexibilidad, o a ambas cosas. Un ejemplo de mejora en el rendimiento es la nueva funcionalidad de eliminacin de tablas. A menudo, cuando se tienen datos muy normalizados [2] en la base de datos se usan las vistas (view) para hacer las consultas. Una vista es una especie de consulta almacenada. Considermosla como un modo particular de ver los datos contenidos en la base de datos. Las vistas vienen muy bien si se usan correctamente, pero tienen un coste en cuanto a rendimiento. Cada vez que se usa una de ellas, se consultan todas las tablas con las que est

conectada, incluso aunque la consulta no solicite datos de todas ellas. La funcionalidad de eliminacin de tablas de MariaDB ha sido diseada con el objetivo de detectar cundo una consulta no utiliza unas tablas determinadas y eliminarlas as del plan de consulta. La mejora en el rendimiento puede llegar a ser tremenda, dependiendo del uso que se le d a la base de datos. Si se usa el motor de almacenamiento MyISAM para las tablas de la base de datos, la segmentacin de la cach de claves MyISAM nos puede venir bien. La cach de claves MyISAM puede verse afectada por retenciones derivadas de bloqueos cuando hay muchas aplicaciones accediendo a la cach simultneamente. Segmentando la cach de claves se consigue aliviar el problema dividindola en segmentos menores. Se pueden especificar hasta 64 segmentos. No todas las aplicaciones se beneficiarn de esta funcionalidad, pero cuando el bloqueo de la cach de claves se convierte en el cuello de botella, es una genial forma de mejorar el rendimiento sin tener que cambiar nada en la aplicacin. Una vez ms, en pos de la compatibilidad con MySQL, viene desactivada por defecto. En cuanto a mejora en la flexibilidad de MariaDB, una de las nuevas funcionalidades son las columnas virtuales, que son columnas que se calculan y actualizan a tiempo real. Hace tiempo, all en 2008, Andrey Zhakove comparti con MySQL una versin inicial de esta funcionalidad, pero nunca llegaron a distribuirla con la versin estable.

Lo ms frecuente es dejar toda la lgica en las aplicaciones y que las bases de datos slo hagan eso, alojar datos. Sin embargo, otras veces puede resultar beneficioso delegar en la base de datos algunos clculos. Por ejemplo, si tenemos varias aplicaciones interactuando con la base de datos, dejar que sta lleve a cabo algunos clculos puede redundar en una mayor simplificacin del esfuerzo de desarrollo y en una mejor integridad de los datos. Otra nueva funcionalidad de MariaDB tiene como objetivo hacer que el cdigo sea ms modular y prepararlo para desarrollos futuros. Un ejemplo de ello puede ser la nueva funcionalidad CREATE Table especfica de cada motor de almacenamiento. Anteriormente, si un motor de almacenamiento quera implementar una funcionalidad que requiriese de nuevas opciones para el comando CREATE table, haba que aplicar un parche a esa seccin del cdigo del servidor. Idealmente, el cdigo del motor de almacenamiento debera estar lo suficientemente aislado como para que se pueda aadir sin afectar al resto del servidor en caso de que no se use. Si un motor de almacenamiento parchea alguna parte del cdigo del servidor, ya no se podrn incluir con seguridad motores de almacenamiento en estado beta o alpha en una versin estable. En MariaDB existe actualmente un modo estndar a travs del cual los motores de almacenamiento pueden ampliar la directiva CREATE table, manteniendo aislado e independiente el cdigo del motor de almacenamiento. A partir de ahora es posible incluir nuevos motores de almace-

WWW.LINUX- MAGAZINE.ES

Nmero 73

45

PRCTICO MariaDB vs. MySQL

namiento en una fase ms temprana de su desarrollo, ya que en caso de no usarse no tendrn efecto alguno sobre el resto del servidor. Todas las funcionalidades mostradas aqu, as como otras que no hemos visto, se pueden consultar con mayor detalle en la base de conocimiendo de MariaDB [3].

Compatibilidad
Con MariaDB, cada esfuerzo se ha hecho teniendo en cuenta la compatibilidad y haciendo que las nuevas funcionalidades sean lo ms transparentes posible para el usuario para que cualquier desarrollo previo sea completamente vlido. A este efecto: Los datos y archivos de definicin de tablas (.frm) son binariamente compatibles. Todas las APIs de clientes, protocolos y structs son idnticas. Todos los nombres de archivo, rutas, puertos, sockets, etc., son exactamente iguales. Todos los conectores de MySQL (PHP, Perl, Python, Java, MyODBC, Ruby, C, etc.) funcionan sin problemas con MariaDB. Los paquetes mysql-client funcionan con MariaDB y viceversa. Por tanto, en la mayora de los casos se puede desinstalar MySQL e instalar MariaDB, y todo seguir funcionando como si nada. Si se usa la misma versin, no hay que convertir los archivos de datos, igual que si se estuviese actualizando desde una versin 5.1.x de MySQL a otra. Adems, gran parte del esfuerzo hecho en el desarrollo de los scripts de actualiza-

cin, encargados de actualizar los datos cuando es necesario, ha hecho que sea ms fcil actualizar de MySQL 5.0 a MariaDB 5.1, que de MySQL 5.0 a MySQL 5.1. La poltica estndar para cualquier nueva funcionalidad es la siguiente: si la nueva funcionalidad introduce algn problema de compatibilidad, la configuracin predeterminada de MariaDB, o bien la deshabilita completamente, como en el caso de la segmentacin de la cach de claves, o la configura para que acte como la versin equivalente de MySQL. Dado que no siempre es posible el cumplimiento de esta poltica estndar, existen algunas incompatibilidades inevitables entre MariaDB y MySQL. Por ejemplo, en caso de que estemos usando una librera para un motor de almacenamiento de slo binarios, debe recompilarse especficamente para la versin de MariaDB que estemos utilizando, debido a ciertos cambios internos en la API del motor de almacenamiento. Adems, la salida producida por algunos componentes, como la del registro de consultas lentas o los resultados del comando CHECKSUM TABLE, varan. Por tanto, si nuestros scripts parsean estas salidas, no hay ms remedio que adaptarlos. Una ltima nota acerca de la compatibilidad: si empezamos a usar cualquiera de las nuevas funcionalidades u opciones de configuracin de MariaDB, no es fcil volver siquiera a una versin equivalente de MySQL.

Conclusin
Slo la situacin de cada cual puede determinar si se ha de optar por MariaDB en

lugar de MySQL. Si tenemos un contrato de soporte con Oracle, entonces la eleccin ya est hecha; no soportan MariaDB. Sin embargo, hay varias empresas, como SkySQL, que ofrecen soporte completo 24/ 7 tanto para MariaDB como para MySQL. MariaDB sigue la pista a las ltimas versiones oficiales de MySQL, publicando desde dos semanas despus hasta dos o tres meses, dependiendo de cmo de grandes hayan sido los cambios producidos entre las versiones. Por otro lado, MariaDB incluye muchas funcionalidades que no se encuentran en MySQL, e ir incluyendo otras nuevas a medida que vayan siendo probadas y aprobadas. Una razn para elegir MySQL sobre MariaDB es la omnipresencia de MySQL en los repositorios oficiales de todas las distribuciones de Linux. Instalar MySQL es tan sencillo como hacer apt-get o yum. MariaDB est trabajando por su inclusin en los repositorios oficiales, pero por ahora, slo se encuentra en unas pocas [6]. Otra razn para continuar usando MySQL puede ser que ya dispongamos de una licencia comercial de Oracle que nos permita incluir MySQL en una aplicacin privativa. Los desarrolladores de MariaDB estn sujetos a los trminos de la licencia GPL y no pueden publicar MariaDB con doble licencia. Finalmente, sea cual sea la eleccin ltima, la competencia entre MariaDB y MySQL siempre es buena. Despus de todo, nadie puede decir que Internet Exporer no saliera beneficiado de su rivalidad con Firefox. I

RECURSOS
[1] Manual de referencia para MySQL: http://dev.mysql.com/doc/refman/5. 5/en/ [2] Artculo en Wikipedia sobre normalizacin de bases de datos: http://en. wikipedia.org/wiki/ Database_normalization [3] Base de conocimiento de MariaDB: http://kb.askmonty.org/v/mariadb [4] Contribuciones externas para MySQL 5.5: http://www.lenzg.net/ archives/ 325-A-quick-summary-of-patch-cont ributions-included-in-MySQL-5.5. html [5] Contribuciones externas para MariaDB 5.2: http://askmonty.org/ blog/ mariadb-5-2-is-released-as-stable [6] Distros con MariaDB: http://kb. askmonty.org/v/ where-can-i-download-mariadb

Contribuciones Externas
Una de las razones por las que MariaDB cuenta con funcionalidades que MySQL no tiene es porque el proyecto MySQL adopta muy lentamente el cdigo proveniente de las contribuciones externas. Por ejemplo, en la publicacin de la versin 5.5.8 GA de MySQL, las contribuciones externas eran, en su mayora, menores (ms que nada unos cuantos arreglos de fallos [4]), mientras que en MariaDB 5.2 se introdujeron varias nuevas funcionalidades con cdigo proveniente de contribuciones ajenas a Monty Program [5]. Entre estas nuevas funcionalidades se cuentan las estadsticas de usuario, la segmentacin de la cach de claves, autenticacin modular (Pluggable Authentication), el motor de almacenamiento OQGraph y el cliente de SphinxSE. Los motivos que los desarrolladores de MariaDB aducen para incluir tal cantidad de cdigo externo son de naturaleza pragmtica: si el cdigo es lo suficientemente bueno como para ejecutarse en productivo en empresas como Google, Facebook u otras, entonces es lo suficientemente bueno para ser incluido en MariaDB. Aunque dicha aseveracin no siempre sea cierta, en las contribuciones se llevan a cabo una serie de rigurosas pruebas y de revisin del cdigo. Incluso cuando una contribucin no alcanza el nivel de calidad ptimo, se puede modificar hasta que alcance dicho nivel de calidad para su inclusin. Un ejemplo de ello es la funcionalidad que aportan las columnas virtuales, que fue reescrita sobremanera para mejorar su rendimiento, funcionalidad, fiabilidad e integracin con MariaDB.

46

Nmero 73

WWW.LINUX- MAGAZINE.ES