En un artículo anterior, presentamos la historia del servidor web Apache, su papel en el auge de internet y cómo su cuota de mercado está siendo consumida por competidores como Nginx. Apache forma parte de la pila LAMP -Linux + Apache + MySQL + PHP- y no es una subestimación decir que más de la mitad de todo internet debe su existencia a LAMP.

Hoy echaremos un vistazo a algunas de las diferencias entre MariaDB y MySQL, dos tecnologías de bases de datos similares pero con enfoques distintos para alimentar millones de sitios web en todo el mundo.

Qué Es MySQL

MySQL es una base de datos relacional (RDBMS) que vio la luz por primera vez en 1995, creada por Michael Monty Widenius y David Axmark. Se creó cuando el mercado estaba dominado por las soluciones propietarias (y costosas) de Microsoft y Oracle.

Antigua página MySQL de 1998
Antigua página MySQL de 1998 (Fuente de la imagen: Archive.org)

MySQL es hoy en día es una marca arquetípica. Su papel fue clave en la construcción de internet tal y como lo conocemos hoy en día. Este artículo en Linux Journal arroja algo de luz sobre sus primeros días.

Con su temprana adopción de licencias duales – y el uso de la GPL de GNU para su versión libre – MySQL pavimentó el camino para muchos otros proveedores de software que llegaron más tarde.

En palabras de Michael Widenius sobre la doble licencia:

…puesto que MySQL es un producto de infraestructura que se puede integrar fácilmente en otros productos, podríamos vender licencias a aquellos que quisieran integrar MySQL en su producto pero no quisieran hacer su producto de código abierto.

Las aplicaciones web implementadas en el servidor, como parte de la pila LAMP, no suelen incrustar MySQL y distribuir su código. Esto significaba que cualquiera podía usar libremente el software para sus propios productos web.

Menos de una década después de su lanzamiento público, MySQL dominaba el mercado de las bases de datos relacionales de código abierto.

Google Trends muestra que el interés de las búsquedas web globales en MySQL alcanzó su punto máximo entre 2004 y 2005:

Interés en MySQL con el tiempo
Interés en MySQL con el tiempo

Algunas de las compañías que usan MySQL incluyen:

  • Facebook, un informe de 2011 menciona hasta «60 millones de consultas por segundo, y casi 4 millones de cambios de fila por segundo» y MySQL maneja «casi todas las interacciones del usuario: gustos, acciones, actualizaciones de estado, alertas, peticiones».
  • La parte de facturación de Netflix
  • Youtube
  • Booking.com
  • Airbnb
  • y muchos otros.

Un factor más que contribuyó al surgimiento y adopción de MySQL que vale la pena mencionar es phpMyAdmin.

PhpMyAdmin es una herramienta de administración de bases de datos basada en web que se remonta a 1998, y que se introdujo bastante pronto en las consolas de gestión de proveedores de alojamiento compartido, incluido cPanel. Es una herramienta escrita en PHP que ha hecho fácil la administración de MySQL en servidores LAMP. Importar, exportar, componer consultas complejas, borrar y crear tablas, realizar búsquedas complejas son sólo algunas de las cosas que phpMyAdmin ha hecho posibles sin que los usuarios tengan que usar nunca una terminal Linux.

WordPress y MySQL

Uno de los factores detrás de la popularidad de MySQL es sin duda WordPress, que hoy en día impulsa alrededor del 60% de los sistemas CMS o el 34% de toda la web.

WordPress fue creado en 2003 por Matt Mullenweg y Mike Little, como una bifurcación de otro proyecto. Estaba escrito en PHP, usaba MySQL como base de datos, y cuando apareció, su adopción se expandió como el fuego.

WordPress se convirtió rápidamente en sinónimo del concepto de software de código abierto y también lo hizo su pila de servidores subyacente. DisplayWP tiene un buen gráfico de la versión mínima requerida de MySQL para cada nota de prensa de WordPress.

Uno de los factores que impulsó la adopción de MySQL fue el lado GPL de su licenciamiento. Como es compatible con Linux, empezó a ser incluido por defecto en las distribuciones de Linux. Hoy viene incluido por defecto con Ubuntu.

Breve descripción general de MySQL y el modelo de base de datos relacional

MySQL fue concebido como un RDBMS (Relational Database Management System). El modelo de la Base de Datos Relacional se remonta a la década de 1970, tal como se describe en «Los Doce Mandamientos de Codd». En pocas palabras, este modelo estructura los datos en tablas que consisten en columnas y filas. Cada fila se identifica unívocamente con una clave (Llave primaria para usar la jerga SQL).

Estas Claves Primarias pueden ser usadas como clavijas de un tipo que son usadas por otras tablas para definir una relación con la fila específica. Por lo tanto, la columna CLAVE EXTRANJERA en una tabla de base de datos relacional se referirá a una columna CLAVE PRIMARIA en otra tabla, definiendo una relación entre filas en diferentes tablas.

Como explica Essential SQL, «La clave primaria consiste en una o más columnas cuyos datos contenidos se utilizan para identificar de forma única cada fila de la tabla». Los datos en las columnas clave primarias deben ser únicos y no pueden estar vacíos o NULL. En una base de datos relacional, «la tabla sólo tiene una clave primaria, y su definición es obligatoria»

Al mismo tiempo, «la clave foránea es un conjunto de una o más columnas en una tabla que se refiere a la clave primaria en otra tabla. No hay ningún código especial, configuraciones o definiciones de tabla que deba colocar para»designar» oficialmente una clave foránea.

Modelo de base de datos relacional en MySQL
Modelo de base de datos relacional en MySQL

De esta manera, con las bases de datos relacionales, es posible modelar los datos de forma sofisticada y definir las conexiones entre los distintos datos. En nuestro sencillo ejemplo anterior, tenemos dos tablas, con filas que pueden estar relacionadas entre sí, por ejemplo, cada persona posee un coche.

Podemos consultar estos datos de acuerdo a la lógica que necesitamos, podemos filtrar el conjunto de resultados de acuerdo a diferentes conjuntos de criterios, y podemos construir nuestra consulta de una manera mucho más compleja que la que hemos descrito anteriormente.

Por esta razón, las bases de datos relacionales – y las bases de datos en general – utilizan lenguajes específicos de dominio, entre los cuales el SQL, que significa Structured Query Language (Lenguaje de consulta estructurado), es el que prevalece, si no el único, utilizado por el RDBMS.

Adquisición por Sun

En 2008, MySQL AB, la compañía detrás de MySQL, fue adquirida por Sun Microsystems. Esta empresa creó JAVA, Solaris Unix OS y contribuyó significativamente a diferentes tecnologías informáticas. Como informó Business Wire en ese entonces:

«Sun Microsystems, Inc. (NASDAQ:JAVA) ha anunciado hoy que ha llegado a un acuerdo definitivo para adquirir MySQL AB, un icono del código abierto y desarrollador de una de las bases de datos de código abierto de más rápido crecimiento del mundo, por un valor aproximado de 1.000 millones de dólares».

Pronto demostrará que esta adquisición no fue suficiente para prevenir la caída de Sun, pero nos da una idea de lo grande que era MySQL en aquellos días.

Oracle

Oracle Corporation es un proveedor de la mayor base de datos de código cerrado hasta la fecha, la base de datos de Oracle.

Era un competidor directo de MySQL y prácticamente la antítesis de la GPL, el modelo de software libre y de código abierto en el que MySQL se estaba convirtiendo en ese momento.

Cuando Oracle compró Sun, y MySQL con él en 2010 (ganando contra IBM por ello), el mundo FOSS lo vio como algo tan «siniestro» como un ataque Borg en Star Trek. Un usuario recuerda el evento en Quora:

MySQL era una grave amenaza para Oracle – en ese momento la base de datos de Oracle representaba algo más del 80% de todos los ingresos (y dado que la tripulación mínima necesaria para mantenerla, aún más de los beneficios).

MySQL estaba haciendo serias incursiones – las grandes compañías de Fortune 50 con licencias de sitio que costaron millones estaban cambiando las bases de datos (especialmente las de sólo lectura) de Oracle a MySQL porque la sobrecarga administrativa era mucho menor. Lo sé, ayudé a hacer algunas de estas.

Muchos en la comunidad MySQL querían añadir características que hicieran obsoleto el uso de una versión gratuita de Oracle. MySQL definitivamente iba por ese camino. Las herramientas estaban madurando y Larry tenía miedo.

Así que Oracle compró MySQL para asegurarse de que tendría el control de la marca, dispersar a la comunidad y salvar a su buque insignia de las masas no lavadas.

Esta fue una conclusión lógica, porque MySQL, en ese momento, se hizo tan popular que podría haber sido visto como una amenaza real para el negocio principal de Oracle. Como dijo Ankush Thakur de Geekflare, MySQL se hizo tan popular que muy pronto, los desarrolladores olvidaron que SQL y MySQL eran dos cosas diferentes.

Antes de la adquisición, a finales de 2009, Monty Widenius, que dejó el equipo de MySQL ese año para establecer su propia empresa de tenedores y bases de datos, publicó un llamamiento dramático en su blog (citaremos sólo el principio):

Ayuda para guardar MySQL

Yo, Michael «Monty» Widenius, el creador de MySQL, les pido urgentemente que ayuden a salvar a MySQL de las garras de Oracle. Sin su ayuda inmediata, Oracle podría llegar a ser propietario de MySQL en cualquier momento. Escribiendo a la Comisión Europea (CE) usted puede apoyar esta causa y ayudar a asegurar el futuro desarrollo del producto MySQL como un proyecto de código abierto.

Sin embargo, la adquisición se llevó a cabo un mes después, a pesar de la preocupación de muchos en la comunidad de código abierto. Widenius ya había dejado Sun, formado Monty Program AB, y bifurcado MySQL, sentando las bases para MariaDB. Todo mientras se lleva a muchos desarrolladores de MySQL con él.

Hasta el día de hoy, la gente sigue cuestionando la legitimidad de los temores de Monty. Especialmente, ya que el peor escenario no ocurrió en absoluto: Oracle no adquirió MySQL sólo para matarlo.

Algunos argumentan que MySQL fue comprado por Oracle como nada más que una «víctima colateral» de la adquisición de Sun. En 2009, aquellos que tenían sus ojos puestos en el mercado de las bases de datos tenían motivos para preocuparse.

Las advertencias estaban ahí. El desarrollador del principal motor de almacenamiento de MySQL, InnoDB, una empresa finlandesa, fue adquirido por Oracle en 2005. Más tarde, se fusionaron completamente con Oracle, dando por terminada la empresa original. En 2006, Oracle compró a los creadores de Berkeley DB, proveedor de otro motor de almacenamiento BDB menos importante. Estaban dando vueltas.

Qué Es MariaDB

MariaDB tuvo su primera versión en octubre de 2009, con la versión 5.1.38 Beta, basada en MySQL 5.1.38. Era un tenedor destinado a «asegurar que la base de código MySQL fuera libre para siempre».

En el momento de la bifurcación, el temor más común era que la adquisición fuera una adquisición hostil con el objetivo de matar a MySQL. Esa preocupación, al menos en parte, resultó ser infundada.

De nuevo en 2009, Monty Program AB y Percona, una empresa que proporciona servicios MySQL de alta calidad, establecieron la Open Database Alliance. Su objetivo era «unificar todos los desarrollos y servicios relacionados con MySQL, proporcionando una solución a la fragmentación e incertidumbre a la que se enfrentan las comunidades, empresas y expertos técnicos involucrados con MySQL».

La idea era «convertirse en el centro de la industria para la base de datos de código abierto MySQL, incluyendo MySQL y código derivado, binarios, formación, soporte y otras mejoras para la comunidad MySQL y el ecosistema de socios».

Mirando hacia atrás: es posible que estos pasos hayan evitado un escenario peor para la famosa base de datos.

MariaDB vs MySQL: Compatibilidad

El objetivo del tenedor de MySQL de MariaDB (que lleva el nombre de la hija de Widenius) era asegurar el acceso futuro a MySQL y su desarrollo posterior. Esta es la razón por la que MariaDB fue concebido como un reemplazo binario completo – un reemplazo»drop-in», por así decirlo – permitiendo a todos los usuarios de MySQL intercambiar uno por otro en sus sistemas.

MySQL es una aplicación cliente-servidor, y tanto su programa servidor mysqld, su cliente mysql, como los programas auxiliares, como mysqldump, mantienen el mismo nombre con MariaDB.

Reemplazar MySQL con MariaDB se convierte en un proceso perfecto para la mayoría de las aplicaciones y propósitos, especialmente WordPress. El software existente, desde las herramientas CMS más populares hasta aplicaciones como phpMyAdmin, simplemente funcionan desde el primer momento, y los datos reales pueden ser exportados/importados de uno a otro sin ningún cambio.

El objetivo declarado de MariaDB es mantener la compatibilidad con MySQL. Según el sitio web de MariaDB,

  • los archivos de datos y de definición de tablas son compatibles.
  • todas las APIs y protocolos de cliente son compatibles.
  • Los nombres de archivo, binarios y rutas son los mismos en MySQL y MariaDB.
  • Los puertos y las tomas son los mismos.
  • Todos los conectores MySQL – PHP, Perl, Python, Java, y otros – trabajan con MariaDB.
  • El paquete de cliente MySQL funciona indistintamente con MariaDB al igual que con MySQL.

Mensualmente se realizan fusiones para asegurar la compatibilidad y para obtener nuevas características y correcciones de errores de Oracle.

MariaDB vs MySQL: Las Razones Detrás de la Bifurcación

Hubo múltiples razones detrás de la liberación de MariaDB. Los temores de que Oracle simplemente matara a su creciente competidor para proteger su producto principal más lucrativo eran sin duda uno de los mayores. ¡Los usuarios habrían perdido un producto fantástico y gratuito!

Otras razones estaban relacionadas con asegurar que MySQL se hubiera mantenido libre y de código abierto. Hoy en día, MariaDB tiene licencia GPL con todo su conjunto de características, mientras que MySQL mantiene un enfoque de doble licencia, con características premium licenciadas bajo licencia propietaria y pagada:

«MySQL Enterprise Edition incluye el conjunto más completo de características avanzadas, herramientas de gestión y soporte técnico para alcanzar los más altos niveles de escalabilidad, seguridad, fiabilidad y tiempo de actividad de MySQL. Reduce el riesgo, el costo y la complejidad en el desarrollo, la implementación y la administración de aplicaciones MySQL críticas para la empresa».

Si comparamos los dos aquí, MariaDB tiene una clara ventaja proporcionada por la licencia GPL sobre la que se publica. Debido a la base de código propietario, Oracle no puede aprovechar legalmente el código de MariaDB y fusionarlo con su base de datos.

Widenius lo prometió: «Cuando Oracle publique una extensión de código cerrado para MySQL, también publicaremos una de código abierto.»

Asuntos de la Comunidad

Otra razón detrás de la bifurcación era mantener el proyecto «abierto» en el sentido de que se trata de un proyecto comunitario (como WordPress), cuya dirección y desarrollo están abiertos al igual que su licencia. Si echamos un vistazo al registro de confirmaciones, es fácil concluir que la mayor parte del código MySQL proviene de desarrolladores internos. Los desarrolladores de Oracle agradecen las contribuciones ocasionales y notables de la comunidad, por ejemplo, pero eso está lejos de la apertura del MariaDB y lejos de lo que MySQL solía ser.

Para poner las cosas en perspectiva, el repositorio del servidor MariaDB en el momento de escribir este artículo tiene más de 186.000 confirmaciones, más de 370 sucursales y 200 colaboradores. MySQL, por otro lado, tiene más de 148.000 confirmaciones, 9 sucursales y 72 contribuyentes.

La discusión sobre el desarrollo de MariaDB, su dirección, la votación sobre las características, etc. se realiza en una lista de correo disponible al público:

El equipo de desarrolladores de"María
El equipo de desarrolladores de MariaDB

Además de ésta, también está la lista de correo Maria Discuss.

Maria Captains es un equipo de desarrolladores de confianza a los que los desarrolladores pueden enviar parches. Como dice la página del equipo en Launchpad:

«Los capitanes son desarrolladores de confianza con acceso de escritura a los principales árboles de MariaDB. Si quieres tener un parche en el árbol, envíalo a la lista de desarrolladores de MariaDB y uno o más de los capitanes trabajarán contigo para que el parche sea revisado, aprobado y finalmente empujado al árbol apropiado de MariaDB».

Ha habido algunas ocasiones en las que el animado proceso de desarrollo de MariaDB ha demostrado su ventaja sobre el proceso cerrado de Oracle.

A finales de 2012 se creó la fundación MariaDB para supervisar el desarrollo de la base de datos.

Poco después de la bifurcación, muchos desarrolladores originales de MySQL se unieron al proyecto MariaDB. Los proveedores de Linux como Red Hat, CentOS, Arch Linux, Debian, OpenSuse, Slackware, Fedora cambiaron a MariaDB como RDBMS por defecto, así como distribuciones BSD, FreeBSD y OpenBSD, mientras que Ubuntu incluye MariaDB. La lista completa se puede encontrar aquí.

Compañías como Alibaba Cloud, Tencent, IBM, Microsoft, Booking.com se convirtieron en patrocinadores de platino.

Para Kinsta, como el mejor alojamiento de aplicaciones, bases de datos y WordPress administrado, es interesante mencionar que entre la junta directiva de la Fundación MariaDB hay gente de Automattic, una clara señal de que los creadores de WordPress han adoptado MariaDB.

En los años posteriores a la división, MariaDB tuvo un desarrollo muy vivo, tanto que debido al conjunto de nuevas características introducidas en 2012, MariaDB saltó del número de versión 5.*, compatible con MySQL, al 10.0, queriendo reflejar el salto en características que había logrado.

Por razones de rendimiento, la Fundación Wikimedia anunció en 2013 que cambiaría Wikipedia a MariaDB. Lo mismo sucedió con Google, y su lista de usuarios ahora incluye Deutsche Bank, DBS Bank, Nasdaq, Verizon, Craigslist y otros.

Entre los usuarios de MySQL se encuentran GitHub, US Navy, NASA, Tesla, Netflix, WeChat, Facebook, Zendesk, Twitter, Zappos, YouTube, Spotify.

Desde su primer lanzamiento, el interés en el sucesor de MySQL ha ido creciendo constantemente, como muestra Google Search Trends:

Interés en MariaDB con el tiempo
Interés en MariaDB con el tiempo

MariaDB vs MySQL: Diferencias clave

Aunque MariaDB puede haber comenzado como totalmente compatible con MySQL, podemos esperar que sus caminos diverjan más en el futuro.

MariaDB vs MySQL

En su último post en el blog, Widenius felicita a Oracle por su trabajo en la versión 8.0 de MySQL, destacando algunas diferencias y advertencias como:

Thread Pool: similar al problema que resuelve el servidor de Nginx comparado con Apache, MySQL asignaba hilos a cada conexión de cliente, y esto, que podía compararse con arrancar un programa completo en un pc, era simplemente ineficiente. MariaDB introdujo su propia solución en la versión 5.5

Las Columnas Invisibles son la característica exclusiva de MariaDB desde 10.3.3. No devuelven resultados en una instrucción SELECT *, ni necesitan que se les asigne un valor en una instrucción INSERT.

MariaDB introduce microsegundos en sus tipos de datos temporales.

Motores de almacenamiento: Los usos de MariaDB incluyen XtraDB, InnoDB, MariaDB ColumnStore, Aria, Archive, Blackhole, Cassandra Storage Engine, Connect, CSV, FederatedX, Memory storage engine, Merge, Mroonga, MyISAM, MyRocks, QQGraph, Sequence Storage Engine, SphinxSE, Spider, TokuDB. ColumnsStore es interesante desde el punto de vista del rendimiento, ya que hace posible el escalado lineal para manejar petabytes de datos. Más información en su blog.

Los motores de almacenamiento MySQL son InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, Merge, Federated, Example.

Las Vistas de la Base de Datos son una característica en la que MariaDB introduce optimizaciones significativas consultando sólo las tablas necesarias.

Algunas de las características que MySQL introduce son el tipo de datos nativos JSON, MySQL Shell en la versión MySQL 8.0 – que permite el javascript y python scripting – y no funciona con el plugin de autenticación basado en MariaDB, SHA-256, mejorando la seguridad sobre mysql_native_password.

Aquí puede encontrar la lista completa de las diferencias entre MariaDB vs MySQL y las ventajas de la primera en comparación con la segunda.

Resumen

MySQL está bajo el paraguas corporativo del mayor proveedor de bases de datos comerciales del mundo. Con tantos ingenieros a tiempo completo trabajando las 24 horas del día para desarrollar nuevas funciones de primera calidad, ya tenemos algunos puntos en los que difieren. MariaDB, por otra parte, suele ponerse al día en lo que se refiere a las adiciones de primas, pero eso no siempre es inmediato y no hay garantías.

Dicho esto, sin embargo, hay muchos escenarios en los que MariaDB ofrece un mejor rendimiento. Añada a esto parches y actualizaciones más ágiles, un futuro de código abierto más estable y un poco más de optimismo, y verá por qué en Kinsta no sólo somos fans, sino que también usamos MariaDB como parte de nuestra pila de servidores basados en el rendimiento.

Tonino Jankov

Tonino es emprendedor, entusiasta de Linux y OSS, desarrollador y formador tecnológico. Tiene más de diez años de experiencia en desarrollo y lleva más de tres años en el espacio blockchain. Cuando no está programando, escribe para SitePoint y Alibaba Cloud, se pega un atracón de películas de ficción en Netflix y explora nuevos destinos turísticos.