Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MariaDb VS MySql

2,244 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

MariaDb VS MySql

  1. 1. MySQL ha sido indiscutiblementedurante años la base de datosmás popular del mundo. Muchoha tenido que ver con ello la proliferaciónde sistemas LAMP (Linux, Apache,MySQL, PHP/Python/Perl) usados para laimplementación de sitios web de todos lostamaños. Esta posición dominante proba-blemente haya sido el motivo de preocupa-ción para muchos – primero, cuando SunMicrosystems adquirió MySQL Ab (laempresa que había detrás de MySQL), yluego cuando Oracle compró Sun. Ungrupo de, en su mayoría, empleados origi-nales de MySQL AB, liderado e iniciado porel cofundador de MySQL Michael “Monty”Widenius, tuvo la determinación de dejarSun/Oracle, crear una nueva empresa,Monty Program, y crear una rama deMySQL llamada MariaDB.MariaDBEl objetivo general de MariaDB es el de seruna alternativa a MySQL – eso sí, con másfuncionalidades y mejor rendimiento queéste.MariaDB está basado en la versiónhomóloga de MySQL, si ésta existe. Porejemplo, MariaDB 5.1.53 está basada enMySQL 5.1.53, con algunas soluciones aerrores, motores de almacenamiento adicio-nales, nuevas funcionalidades y mejoras enel rendimiento. Las versiones de MariaDBque no tienen una versión equivalente enMySQL (como por ejemplo MariaDB 5.2.4)contienen nuevas funcionalidades lo sufi-cientemente importantes como para quesus desarrolladores decidan incrementar elPRÁCTICO • MariaDB vs. MySQL44 Número 73 W W W. L I N U X - M A G A Z I N E . E Snúmero de versión. Dado que MariaDB es“MySQL más unas cuantas cosas más”, lomás lógico es que nos centremos en esasfuncionalidades adicionales que tieneMariaDB y de las que carece MySQL.Diferencias yFuncionalidadesComo hemos dicho, las actuales versionesestables de cada base de datos son MySQL5.5.8 y MariaDB 5.2.4. Las versiones deMariaDB suelen tardar en salir algo másque sus equivalentes en MySQL, motivopor el cual aún no se ha publicadoMariaDB 5.5.8. Este retardo suele ir desdeun par de semanas hasta dos o tres meses,lo que le permite a sus desarrolladores inte-grar adecuadamente el nuevo código deMySQL en el árbol de fuentes de MariaDBy probarlo en busca de regresiones en elrendimiento o de nuevos bugs.En una primera toma de contacto, unopuede pensar que no ha habido muchoscambios. El servidor se sigue llamandomysqld, el cliente de línea de comandos sellama mysql, el archivo de configuraciónprincipal sigue siendo my.cnf, y todos losconectores, como el de PHP o el de Python,funcionan sin ningún tipo de problema.El cambio más visible, al menos para losusuarios del cliente mysql, es puramenteestético. El intérprete ha sido modificadopara que sea más informativo, indicando siestamos conectados a una base de datosMariaDB o MySQL. Además muestra elnombre de la base de datos a la que esta-mos conectados – o (none) si no estamosconectados a ninguna base de datos especí-fica. Otra nota sobre la aplicación cliente:debido a la especial atención que ponen losdesarrolladores de MariaDB en mantener lacompatibilidad retroactiva con MySQL,ambas aplicaciones cliente funcionan concualquiera de las dos bases de datos, comose puede ver en las Figuras 1 y 2.El siguiente cambio visible es queMariaDB incluye varios motores de alma-cenamiento adicionales (cuya lista sepuede mostrar con el comando show sto-rage engines;). Entre otros, se incluyen losmotores Aria, XtraDB (una versión mejo-rada y ampliada de InnoDB), PBXT, Fede-ratedX (una alternativa a Federated),OQGRAPH y SphinxSE. Todos ellos estándisponibles para MySQL, pero para usarlosnecesitamos compilarlos o instalarlosnosotros mismos. Con MariaDB, estántodos disponibles desde el momento de lainstalación. Naturalmente, todos los moto-res que se incluyen en MySQL (MyISAM,blackhole, CSV, Memory, etc.) están inclui-dos en MariaDB.También se han realizado mejoras enINFORMATION_SCHEMA, que proporcionalos datos de la base de datos. MariaDB haañadido más datos a varias tablas. Pri-mero, la tabla INFORMATION_ SCHEMA.PLUGINS tiene dos nuevas columnas, PLU-GIN_MATURITY y PLUGIN_AUTH_VER-SION, en las que se pueden ver los núme-ros de versión de los plugins, así como lamadurez del plugin instalado, stable, betau otra calidad.Otra mejora consiste en la adición deuna nueva columna, TIME_MS, a la tablaINFORMATION_SCHEMA.PROCESSLIST.MaximKazmin,123RFComparamos MariaDB y MySQLCARA A CARAMariaDB es primo hermano de MySQL – pero no un hermano gemelo.POR DANIEL BARTHOLOMEW
  2. 2. 45Número 73W W W. L I N U X - M A G A Z I N E . E SEsta columna proporciona la misma infor-mación que la columna TIME, pero en uni-dades de milisegundos y con una precisiónde microsegundos; la columna TIME tieneuna precisión de 1 segundo, que es tam-bién la unidad de ésta.El registro de consultas lentas tambiénha sido mejorado. En MariaDB podemosestablecer la verbosidad, filtrar las consul-tas que no queremos que se registren olimitar la tasa de registros, por ejemplo,para que sólo se registre una cuarta partede las consultas en vez de todas ellas. Igualque ocurre con el resto de nuevas funcio-nalidades de MariaDB, no se habilita pordefecto en el archivo de configuración pre-determinado, a fin de mantener la máximacompatibilidad con el comportamiento deMySQL [1].Otros CambiosHay otros muchos cambios en MariaDBque no son tan visibles, pero que ayudanya sea a mejorar el rendimiento deMariaDB, a dotarlo de una mayor flexibili-dad, o a ambas cosas. Un ejemplo demejora en el rendimiento es la nueva fun-cionalidad de “eliminación de tablas”. Amenudo, cuando se tienen datos muy nor-malizados [2] en la base de datos se usanlas “vistas” (view) para hacer las consultas.Una vista es una especie de consultaalmacenada. Considerémosla como unmodo particular de ver los datos conteni-dos en la base de datos. Las vistas vienenmuy bien si se usan correctamente, perotienen un coste en cuanto a rendimiento.Cada vez que se usa una de ellas, se con-sultan todas las tablas con las que estáconectada, incluso aunque la consulta nosolicite datos de todas ellas. La funcionali-dad de “eliminación de tablas” de MariaDBha sido diseñada con el objetivo de detec-tar cuándo una consulta no utiliza unastablas determinadas y eliminarlas así delplan de consulta. La mejora en el rendi-miento puede llegar a ser tremenda, depen-diendo del uso que se le dé a la base dedatos.Si se usa el motor de almacenamientoMyISAM para las tablas de la base dedatos, la segmentación de la caché de cla-ves MyISAM nos puede venir bien. Lacaché de claves MyISAM puede verse afec-tada por retenciones derivadas de bloqueoscuando hay muchas aplicaciones acce-diendo a la caché simultáneamente. Seg-mentando la caché de claves se consiguealiviar el problema dividiéndola en seg-mentos menores. Se pueden especificarhasta 64 segmentos. No todas las aplicacio-nes se beneficiarán de esta funcionalidad,pero cuando el bloqueo de la caché de cla-ves se convierte en el cuello de botella, esuna genial forma de mejorar el rendi-miento sin tener que cambiar nada en laaplicación. Una vez más, en pos de la com-patibilidad con MySQL, viene desactivadapor defecto.En cuanto a mejora en la flexibilidad deMariaDB, una de las nuevas funcionalida-des son las columnas virtuales, que soncolumnas que se calculan y actualizan atiempo real. Hace tiempo, allá en 2008,Andrey Zhakove compartió con MySQLuna versión inicial de esta funcionalidad,pero nunca llegaron a distribuirla con laversión estable.Lo más frecuente es dejar toda la lógicaen las aplicaciones y que las bases de datossólo hagan eso, alojar datos. Sin embargo,otras veces puede resultar beneficioso dele-gar en la base de datos algunos cálculos.Por ejemplo, si tenemos varias aplicacionesinteractuando con la base de datos, dejarque ésta lleve a cabo algunos cálculospuede redundar en una mayor simplifica-ción del esfuerzo de desarrollo y en unamejor integridad de los datos.Otra nueva funcionalidad de MariaDBtiene como objetivo hacer que el códigosea más modular y prepararlo para desa-rrollos futuros. Un ejemplo de ello puedeser la nueva funcionalidad CREATE Tableespecífica de cada motor de almacena-miento. Anteriormente, si un motor dealmacenamiento quería implementar unafuncionalidad que requiriese de nuevasopciones para el comando CREATE table,había que aplicar un parche a esa seccióndel código del servidor.Idealmente, el código del motor de alma-cenamiento debería estar lo suficiente-mente aislado como para que se puedaañadir sin afectar al resto del servidor encaso de que no se use. Si un motor dealmacenamiento parchea alguna parte delcódigo del servidor, ya no se podrán incluircon seguridad motores de almacenamientoen estado beta o alpha en una versión esta-ble. En MariaDB existe actualmente unmodo estándar a través del cual los moto-res de almacenamiento pueden ampliar ladirectiva CREATE table, manteniendo ais-lado e independiente el código del motorde almacenamiento. A partir de ahora esposible incluir nuevos motores de almace-MariaDB vs. MySQL • PRÁCTICOFigura 1: Clientes de MariaDB 5.2.4 (arriba) y MySQL 5.5.8conectando con un sevidor MySQL 5.5.8. Como no se ha seleccionadoninguna 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.8conectando con un sevidor MariaDB 5.2.4. Como no se ha selec-cionado ninguna base de datos, el cliente mysql de MariaDB muestra“(none)” en el espacio para el nombre de la base de datos abierta.
  3. 3. ción, encargados de actualizar los datoscuando es necesario, ha hecho que seamás fácil actualizar de MySQL 5.0 aMariaDB 5.1, que de MySQL 5.0 a MySQL5.1.La política estándar para cualquiernueva funcionalidad es la siguiente: si lanueva funcionalidad introduce algún pro-blema de compatibilidad, la configuraciónpredeterminada de MariaDB, o bien la des-habilita completamente, como en el casode la segmentación de la caché de claves, ola configura para que actúe como la ver-sión equivalente de MySQL.Dado que no siempre es posible el cum-plimiento de esta política estándar, existenalgunas incompatibilidades inevitablesentre MariaDB y MySQL. Por ejemplo, encaso de que estemos usando una libreríapara un motor de almacenamiento de sólobinarios, debe recompilarse específica-mente para la versión de MariaDB queestemos utilizando, debido a ciertos cam-bios internos en la API del motor de alma-cenamiento. Además, la salida producidapor algunos componentes, como la delregistro de consultas lentas o los resultadosdel comando CHECKSUM TABLE, varían.Por tanto, si nuestros scripts parsean estassalidas, no hay más remedio que adaptar-los.Una última nota acerca de la compatibili-dad: si empezamos a usar cualquiera de lasnuevas funcionalidades u opciones deconfiguración de MariaDB, no es fácil vol-ver siquiera a una versión equivalente deMySQL.ConclusiónSólo la situación de cada cual puede deter-minar si se ha de optar por MariaDB enlugar de MySQL. Si tenemos un contrato desoporte con Oracle, entonces la elección yaestá hecha; no soportan MariaDB. Sinembargo, hay varias empresas, comoSkySQL, que ofrecen soporte completo 24/7 tanto para MariaDB como para MySQL.MariaDB sigue la pista a las últimas ver-siones oficiales de MySQL, publicandodesde dos semanas después hasta dos otres meses, dependiendo de cómo de gran-des hayan sido los cambios producidosentre las versiones. Por otro lado, MariaDBincluye muchas funcionalidades que no seencuentran en MySQL, e irá incluyendootras nuevas a medida que vayan siendoprobadas y aprobadas.Una razón para elegir MySQL sobreMariaDB es la omnipresencia de MySQL enlos repositorios oficiales de todas las distri-buciones de Linux. Instalar MySQL es tansencillo como hacer apt-get o yum.MariaDB está trabajando por su inclusiónen los repositorios oficiales, pero porahora, sólo se encuentra en unas pocas [6].Otra razón para continuar usandoMySQL puede ser que ya dispongamos deuna licencia comercial de Oracle que nospermita incluir MySQL en una aplicaciónprivativa. Los desarrolladores de MariaDBestán sujetos a los términos de la licenciaGPL y no pueden publicar MariaDB condoble licencia.Finalmente, sea cual sea la elecciónúltima, la competencia entre MariaDB yMySQL siempre es buena. Después detodo, nadie puede decir que Internet Expo-rer no saliera beneficiado de su rivalidadcon Firefox. Inamiento en una fase más temprana de sudesarrollo, ya que en caso de no usarse notendrán efecto alguno sobre el resto del ser-vidor.Todas las funcionalidades mostradasaquí, así como otras que no hemos visto,se pueden consultar con mayor detalle enla base de conocimiendo de MariaDB [3].CompatibilidadCon MariaDB, cada esfuerzo se ha hechoteniendo en cuenta la compatibilidad yhaciendo que las nuevas funcionalidadessean lo más transparentes posible para elusuario para que cualquier desarrollo pre-vio sea completamente válido. A esteefecto:• Los datos y archivos de definición detablas (.frm) son binariamente compati-bles.• Todas las APIs de clientes, protocolos ystructs son idénticas.• Todos los nombres de archivo, rutas,puertos, sockets, etc., son exactamenteiguales.• Todos los conectores de MySQL (PHP,Perl, Python, Java, MyODBC, Ruby, C,etc.) funcionan sin problemas conMariaDB.• Los paquetes mysql-client funcionan conMariaDB y viceversa.Por tanto, en la mayoría de los casos sepuede desinstalar MySQL e instalarMariaDB, y todo seguirá funcionandocomo si nada. Si se usa la misma versión,no hay que convertir los archivos dedatos, igual que si se estuviese actuali-zando desde una versión 5.1.x de MySQLa otra.Además, gran parte del esfuerzo hechoen el desarrollo de los scripts de actualiza-PRÁCTICO • MariaDB vs. MySQL46 Número 73 W W W. L I N U X - M A G A Z I N E . E S[1] Manual de referencia para MySQL:http://dev.mysql.com/doc/refman/5.5/en/[2] Artículo en Wikipedia sobre normali-zación 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 paraMySQL 5.5: http://www.lenzg.net/archives/325-A-quick-summary-of-patch-contributions-included-in-MySQL-5.5.html[5] Contribuciones externas paraMariaDB 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-mariadbRECURSOSUna de las razones por las que MariaDBcuenta con funcionalidades que MySQL notiene es porque el proyecto MySQL adoptamuy lentamente el código proveniente delas contribuciones externas. Por ejemplo,en la publicación de la versión 5.5.8 GA deMySQL, las contribuciones externas eran,en su mayoría, menores (más que nadaunos cuantos arreglos de fallos [4]), mien-tras que en MariaDB 5.2 se introdujeronvarias nuevas funcionalidades con códigoproveniente de contribuciones ajenas aMonty Program [5]. Entre estas nuevas fun-cionalidades se cuentan las estadísticas deusuario, la segmentación de la caché declaves, autenticación modular (PluggableAuthentication), el motor de almacena-miento OQGraph y el cliente de SphinxSE.Los motivos que los desarrolladores deMariaDB aducen para incluir tal cantidad decódigo externo son de naturaleza pragmá-tica: si el código es lo suficientementebueno como para ejecutarse en productivoen empresas como Google, Facebook uotras, entonces es lo suficientementebueno para ser incluido en MariaDB.Aunque dicha aseveración no siempre seacierta, en las contribuciones se llevan acabo una serie de rigurosas pruebas y derevisión del código. Incluso cuando unacontribución no alcanza el nivel de calidadóptimo, se puede modificar hasta quealcance dicho nivel de calidad para su inclu-sión. Un ejemplo de ello es la funcionalidadque aportan las columnas virtuales, que fuereescrita sobremanera para mejorar su ren-dimiento, funcionalidad, fiabilidad e inte-gración con MariaDB.Contribuciones Externas

×