Em um artigo anterior, apresentamos a história do servidor web Apache, seu papel na ascensão da internet, e como sua participação no mercado está sendo consumida por concorrentes como o Nginx. Apache é parte da pilha LAMP -Linux + Apache + MySQL + PHP – e não é um eufemismo dizer que mais da metade de toda a internet deve sua existência à LAMP.

Hoje vamos dar uma olhada em algumas das diferenças entre o MariaDB e o MySQL, duas tecnologias de banco de dados similares, mas diferentes, usadas para alimentar milhões de sites ao redor do globo.

O que é o MySQL

MySQL é um banco de dados relacional (RDBMS) que viu a luz do dia pela primeira vez em 1995, criado por Michael Monty Widenius e David Axmark. Foi criada quando o mercado era dominado pela Microsoft e pelas soluções proprietárias (e caras) da Oracle.

Página antiga do MySQL de 1998
Página antiga do MySQL de 1998 (Fonte da imagem: Archive.org)

O MySQL é hoje em dia uma marca arquetípica. O seu papel foi fundamental na construção da internet tal como a conhecemos hoje. Este artigo no Linux Journal lança alguma luz sobre os seus primeiros dias.

Com a sua adopção antecipada do licenciamento duplo — e usando a GNU GPL para a sua versão livre — o MySQL abriu caminho para muitos outros vendedores de software que vieram mais tarde.

Nas palavras de Michael Widenius sobre licenciamento duplo:

…uma vez que o MySQL é um produto de infra-estrutura que é facilmente incorporado noutros produtos, poderíamos vender licenças àqueles que queriam incorporar o MySQL no seu produto mas não queriam tornar o seu produto open source.

Os aplicativos da Web implantados no servidor, como parte da pilha LAMP, geralmente não incorporam o MySQL e distribuem seu código. Isso significava que qualquer um poderia usar livremente o software para seus próprios produtos web.

Menos de uma década após o seu lançamento público, o MySQL estava a dominar o mercado das bases de dados relacionais de código aberto.

O Google Trends mostra que o interesse global de pesquisa na web no MySQL atingiu o seu auge entre 2004 – 2005:

Interesse no MySQL ao longo do tempo
Interesse no MySQL ao longo do tempo

Algumas das empresas notáveis que usam o MySQL incluem:

  • Facebook, uma reportagem de 2011 menciona tanto quanto “60 milhões de consultas por segundo, e quase 4 milhões de mudanças de linha por segundo” e a manipulação do MySQL “praticamente toda interação do usuário: gostos, compartilhamentos, atualizações de status, alertas, solicitações”.
  • A parte de facturação da Netflix na sua plataforma
  • Youtube
  • Booking.com
  • Airbnb
  • e muitos outros.

Mais um fator que contribuiu para a ascensão e adoção do MySQL que vale a pena mencionar é o phpMyAdmin.

PhpMyAdmin é uma ferramenta de administração de banco de dados baseado na web que remonta a 1998, o que fez seu caminho bastante cedo para os consoles de gerenciamento de provedores de hospedagem compartilhada, incluindo cPanel. É uma ferramenta escrita em PHP que facilitou a administração do MySQL em servidores LAMP. Importar, exportar, compor consultas complexas, apagar e criar tabelas, realizar pesquisas complexas são apenas algumas das coisas que o phpMyAdmin tornou possíveis sem que os utilizadores tivessem de usar o terminal Linux.

WordPress e MySQL

Um dos factores por detrás da popularidade do MySQL é, sem dúvida, o WordPress, que hoje alimenta cerca de 60% dos sistemas CMS ou 34% de toda a web.
O WordPress foi criado em 2003 por Matt Mullenweg e Mike Little, como um garfo de outro projecto. Foi escrito em PHP, usava o MySQL como base de dados e, quando apareceu, a sua adopção foi apanhada como um incêndio.

O WordPress rapidamente se tornou sinônimo do conceito de software de código aberto, assim como sua pilha de servidores subjacentes. DisplayWP tem um bom gráfico da versão mínima necessária do MySQL para cada versão do WordPress.

Um dos fatores que impulsionou a adoção do MySQL foi o lado GPL de seu licenciamento. Como ele é compatível com o Linux, ele começou a ser incluído por padrão nas distribuições Linux. Hoje ele vem incluído por padrão no Ubuntu.

Breve visão geral do MySQL e do modelo de banco de dados relacional

O MySQL foi concebido como um RDBMS (Relational Database Management System). O modelo de Banco de Dados Relacional remonta à década de 1970, conforme descrito pelos “Doze Mandamentos do Codd“. Em poucas palavras, este modelo estrutura os dados em tabelas que consistem em colunas e linhas. Cada linha é identificada exclusivamente por uma chave (Primary Key para usar jargão SQL).

Essas Chaves Primárias podem ser usadas como pinos de um tipo que são usados por outras tabelas para definir uma relação com a linha específica. Assim, a coluna FOREIGN KEY em uma tabela de banco de dados relacional se referirá a uma coluna PRIMARY KEY em outra tabela, definindo uma relação entre linhas em diferentes tabelas.

Como o Essential SQL explica, “A chave primária consiste em uma ou mais colunas cujos dados contidos dentro dela são usados para identificar exclusivamente cada linha da tabela. Os dados nas colunas-chave primárias devem ser únicos e não podem ser vazios ou NULL. Em um banco de dados relacional “a tabela tem apenas uma chave primária e sua definição é obrigatória”.
Ao mesmo tempo, “chave estrangeira é um conjunto de uma ou mais colunas em uma tabela que se refere à chave primária em outra tabela. Não há qualquer código especial, configurações ou definições de tabela que você precisa colocar para “designar” oficialmente uma chave estrangeira.

Modelo de banco de dados relacional no MySQL
Modelo de banco de dados relacional no MySQL

Desta forma, com as bases de dados relacionais, é possível modelar os dados de forma sofisticada e definir conexões entre vários dados. No nosso simples exemplo acima, temos duas tabelas, com linhas que podem ser relacionadas entre si, por exemplo, cada pessoa possui um carro.

Podemos consultar estes dados de acordo com a lógica que precisamos, podemos filtrar o conjunto de resultados de acordo com diferentes conjuntos de critérios, e podemos construir nossa consulta de uma forma muito mais complexa do que a descrita acima.

Por esta razão, as bases de dados relacionais – e as bases de dados em geral – utilizam linguagens específicas de domínio entre as quais a SQL, que significa Structured Query Language, é a prevalente, se não a única utilizada pela RDBMS.

Aquisição pela Sun

Em 2008, a MySQL AB, a empresa por trás do MySQL, foi adquirida pela Sun Microsystems. Esta empresa criou a JAVA, Solaris Unix OS e contribuiu significativamente para diferentes tecnologias informáticas. Como a Business Wire reportou na altura:

“Sun Microsystems, Inc. (NASDAQ:JAVA) anunciou hoje que entrou num acordo definitivo para adquirir a MySQL AB, um ícone open source e desenvolvedor de uma das bases de dados open source de crescimento mais rápido do mundo por aproximadamente $1 bilhão em consideração total”.

Em breve provará que esta aquisição não foi suficiente para evitar a queda da Sun, mas pinta um quadro de como o MySQL era grande naqueles dias.

Oracle

A Oracle Corporation é fornecedora do maior banco de dados de código fechado até hoje, o banco de dados Oracle.

Era uma concorrente directa do MySQL e virtualmente a antítese da GPL, modelo de software livre e de código aberto que o MySQL estava a tornar-se nessa altura.

Quando a Oracle comprou a Sun, e a MySQL com ela em 2010 (ganhando contra a IBM por isso), o mundo FOSS viu isso como algo tão “sinistro” como um ataque Borg em Star Trek. Um utilizador lembra-se do evento em Quora:

O MySQL era uma grave ameaça para a Oracle – na altura a base de dados da Oracle representava algo a norte de 80% de todas as receitas (e dada a tripulação esqueleto necessária para a manter, ainda mais dos lucros).

A MySQL estava a fazer incursões sérias – grandes empresas da Fortune 50 com licenças de sítios que custaram milhões estavam a transferir bases de dados (especialmente as de leitura apenas) da Oracle para a MySQL porque as despesas administrativas eram muito mais baixas. Eu sei, eu ajudei a fazer algumas destas coisas.

Muitos na comunidade MySQL queriam adicionar funcionalidades que tornariam o uso de uma versão gratuita da Oracle obsoleta. O MySQL estava definitivamente a seguir esse caminho. As ferramentas estavam a amadurecer e o Larry estava com medo.

Então a Oracle comprou o MySQL para ter a certeza que teria um controlo sobre a marca, dispersar a comunidade e salvar a sua bandeira das massas não lavadas.

Esta foi uma conclusão lógica, porque o MySQL, nessa altura, tornou-se tão popular que pode ter sido visto como uma ameaça real ao core business da Oracle. Como disse Ankush Thakur da Geekflare, o MySQL tornou-se tão popular que, muito em breve, os programadores esqueceram que SQL e MySQL eram duas coisas diferentes.

Antes mesmo da aquisição acontecer, no final de 2009, Monty Widenius, que deixou a equipa MySQL nesse ano para estabelecer a sua própria empresa de garfos e bases de dados, publicou um apelo dramático no seu blog (vamos citar apenas o início):

Ajuda para salvar o MySQL

Eu, Michael “Monty” Widenius, o criador do MySQL, estou a pedir-lhe urgentemente para ajudar a salvar o MySQL das garras da Oracle. Sem a sua ajuda imediata, a Oracle poderá ficar com o MySQL a qualquer momento. Ao escrever à Comissão Europeia (CE) pode apoiar esta causa e ajudar a garantir o futuro desenvolvimento do produto MySQL como um projecto Open Source.

A aquisição, no entanto, passou por um mês depois, para consternação de muitos na comunidade open source. A Widenius já tinha deixado a Sun, formado a Monty Program AB, e forjado o MySQL, lançando as bases para MariaDB. Enquanto levava com ele muitos programadores MySQL.

Até hoje, as pessoas continuam a questionar a legitimidade dos receios de Monty. Especialmente, uma vez que o pior cenário não aconteceu de todo: A Oracle não adquiriu o MySQL apenas para o matar.

Alguns argumentam que o MySQL foi comprado pela Oracle como nada mais do que uma “vítima colateral” da aquisição da Sun. Em 2009, aqueles que tinham os olhos no mercado de bases de dados tinham razões para se preocuparem.

Os avisos estavam lá. O desenvolvedor do principal motor de armazenamento da MySQL, InnoDB, uma companhia da Finlândia, foi adquirido pela Oracle em 2005. Mais tarde, foram totalmente fundidos na Oracle, terminando a empresa original. Em 2006, a Oracle comprou os criadores de Berkeley DB, fornecedor de outro motor de armazenamento BDB menos importante. Eles estavam circulando ao redor.

O que é MariaDB

MariaDB teve seu primeiro lançamento em outubro de 2009, com a versão 5.1.38 Beta, baseada no MySQL 5.1.38. Era um fork destinado a “assegurar que a base de código MySQL seria livre para sempre”.

Na altura do forking, o medo mais comum era que a aquisição fosse uma aquisição hostil com o objectivo de matar o MySQL. Esta preocupação, pelo menos em parte, revelou-se infundada.

Novamente em 2009, a Monty Program AB e a Percona, uma companhia que fornece serviços MySQL premium, estabeleceram a Open Database Alliance. O seu objectivo era “unificar todo o desenvolvimento e serviços relacionados com o MySQL, fornecendo uma solução para a fragmentação e incerteza que as comunidades, negócios e especialistas técnicos envolvidos com o MySQL enfrentam.

A ideia era “tornar-se o centro da indústria para a base de dados de código aberto MySQL, incluindo MySQL e código derivado, binários, formação, suporte e outras melhorias para a comunidade MySQL e o ecossistema de parceiros”.

Olhando para trás: é possível que esses passos tenham impedido um cenário pior para o famoso banco de dados.

MariaDB vs MySQL: Compatibilidade

O objectivo da forquilha da MySQL da MariaDB (com o nome da filha da Widenius) era assegurar o futuro acesso à MySQL e o seu desenvolvimento futuro. É por isso que MariaDB foi concebida como uma substituição binária completa – uma substituição “drop-in”, por assim dizer – permitindo a todos os utilizadores do MySQL trocar um pelo outro nos seus sistemas.

O MySQL é uma aplicação cliente-servidor, e tanto o seu programa servidor mysqld, o seu cliente mysql, como programas auxiliares, como o mysqldump, mantêm o mesmo nome com MariaDB.

Substituir o MySQL pelo MariaDB torna-se um processo perfeito para a maioria das aplicações e propósitos, especialmente o WordPress. Software existente, de ferramentas CMS populares a aplicativos como phpMyAdmin, apenas funciona fora da caixa, e os dados reais podem ser exportados/importados de um para outro sem qualquer alteração.

O objetivo declarado da MariaDB é manter a compatibilidade com o MySQL. De acordo com o site da MariaDB,

  • Os ficheiros de dados e de definição de tabelas são compatíveis.
  • Todas as APIs e protocolos do cliente são compatíveis.
  • Nomes de arquivos, binários e caminhos são os mesmos no MySQL e no MariaDB.
  • Portas e soquetes são os mesmos.
  • Todos os conectores MySQL – PHP, Perl, Python, Java e outros – funcionam com MariaDB.
  • O pacote cliente MySQL funciona indistintamente com o MariaDB tal como com o MySQL.

As fusões mensais são conduzidas para garantir a compatibilidade e para obter quaisquer novas funcionalidades e correções de bugs da Oracle.

MariaDB vs MySQL: As razões por trás da Forking

Havia várias razões por detrás do lançamento da MariaDB. O medo de que a Oracle simplesmente matasse seu crescente concorrente para proteger seu produto principal mais lucrativo era certamente um dos maiores. Os utilizadores teriam perdido um produto fantástico e gratuito!

Outras razões estavam relacionadas com a garantia de que o MySQL teria ficado livre e de código aberto. Hoje, a MariaDB está totalmente licenciada em GPL com todo o seu conjunto de funcionalidades, enquanto o MySQL mantém uma abordagem de dupla licença, com funcionalidades premium licenciadas sob licença proprietária e paga:

O MySQL Enterprise Edition inclui o conjunto mais abrangente de recursos avançados, ferramentas de gerenciamento e suporte técnico para atingir os mais altos níveis de escalabilidade, segurança, confiabilidade e disponibilidade do MySQL. Ele reduz o risco, o custo e a complexidade no desenvolvimento, implantação e gerenciamento de aplicativos MySQL essenciais aos negócios.”

Se compararmos os dois aqui, MariaDB tem uma clara vantagem fornecida pela licença GPL sobre a qual é lançada. Por causa da base de código proprietária, a Oracle não pode legalmente tirar vantagem do código MariaDB e mesclá-lo em seu banco de dados.

Widenius prometeu: “Quando a Oracle lançar uma extensão de código fechado para o MySQL, nós também lançaremos uma de código aberto.

Assuntos Comunitários

Outra razão por trás do garfo foi manter o projeto “aberto” no sentido de ser um projeto voltado para a comunidade (como o WordPress), cuja direção e desenvolvimento estão abertos assim como sua licença. Se olharmos para o registo de submissão, é fácil concluir que a maior parte do código MySQL vem de programadores internos. Os programadores da Oracle agradecem as contribuições ocasionais e notáveis da comunidade, por exemplo, mas isso está longe da abertura da MariaDB e longe do que era o MySQL.

Para colocar as coisas em perspectiva, o repositório do servidor MariaDB no momento deste artigo tem mais de 186k commits, 370+ branches, e 200 contribuidores. O MySQL, por outro lado, tem mais de 148k commits, 9 branches, e 72 contribuidores.

A discussão sobre o desenvolvimento do MariaDB, sua direção, votação sobre as funcionalidades, etc. é feita em uma lista de discussão publicamente disponível:

A equipa "Maria developers"
A equipa “Maria developers”

Além desta, há também a lista de discussão da Maria Discuss.

Maria Captains é uma equipe de desenvolvedores confiáveis para quem os desenvolvedores podem enviar patches. Como diz a página da equipe no Launchpad:

“Os capitães são desenvolvedores confiáveis com acesso de escrita às principais árvores MariaDB. Se você quiser ter um patch na árvore, envie-o para a lista de desenvolvedores maria e um ou mais dos capitães irão trabalhar com você para obter o patch revisado, aprovado e finalmente empurrado para a árvore MariaDB apropriada.”

Houve algumas ocasiões em que o processo de desenvolvimento animado da MariaDB provou sua vantagem sobre o processo fechado da Oracle.

No final de 2012, a fundação MariaDB foi formada para supervisionar o desenvolvimento do banco de dados.

Pouco depois da forquilha, muitos desenvolvedores originais do MySQL se juntaram ao projeto MariaDB. Vendedores de Linux como Red Hat, CentOS, Arch Linux, Debian, OpenSuse, Slackware, Fedora mudaram para MariaDB como RDBMS padrão, assim como distribuições BSD, FreeBSD e OpenBSD, enquanto o Ubuntu inclui MariaDB. A lista completa pode ser encontrada aqui.

Empresas como Alibaba Cloud, Tencent, IBM, Microsoft, Booking.com tornaram-se patrocinadoras platinas.

Para Kinsta, como a melhor hospedagem de aplicativos, hospedagem de banco de dados e hospedagem gerenciada de WordPress, vale ressaltar que entre os administradores da Fundação MariaDB estão os da Automattic, um sinal claro de que os criadores do WordPress adotaram o MariaDB.

Nos anos seguintes à divisão, a MariaDB teve um desenvolvimento animado, tanto que, devido a todo o conjunto de novas funcionalidades introduzidas em 2012, a MariaDB saltou do número da versão 5.*, compatível com o MySQL, para o 10.0, querendo refletir o salto nas funcionalidades que havia alcançado.

Por razões de desempenho, a Wikimedia Foundation anunciou em 2013 que estava mudando a Wikipedia para MariaDB. O mesmo aconteceu com o Google, e sua lista de usuários agora inclui Deutsche Bank, DBS Bank, Nasdaq, Verizon, Craigslist, entre outros.

Entre os usuários do MySQL, temos GitHub, US Navy, NASA, Tesla, Netflix, WeChat, Facebook, Zendesk, Twitter, Zappos, YouTube, Spotify.

Desde o seu primeiro lançamento, o interesse no sucessor do MySQL tem vindo a crescer constantemente, como mostra a Tendências de Pesquisa do Google:

Interesse no MariaDB ao longo do tempo
Interesse no MariaDB ao longo do tempo

MariaDB vs MySQL: Diferenças chave

Enquanto MariaDB pode ter começado como totalmente compatível com o MySQL, podemos esperar que seus caminhos divirjam mais no futuro.

MariaDB vs MySQL
MariaDB vs MySQL

No seu último post no blogue, Widenius felicita a Oracle pelo seu trabalho na versão 8.0 do MySQL, delineando algumas diferenças e advertências tais como:

Thread Pool: semelhante ao problema que o servidor Nginx resolve comparado com o Apache, o MySQL estava a atribuir threads a cada ligação de cliente, e isto, que podia ser comparado ao arranque de um programa inteiro num PC, era simplesmente ineficiente. MariaDB introduziu sua própria solução para isso na versão 5.5.

Invisible Columns são a característica exclusiva da MariaDB da 10.3.3. Elas não retornam resultados em uma instrução SELECT *, nem precisam ser atribuídas valor em uma instrução INSERT.

MariaDB introduz microssegundos em seus datatypes temporais.

Motores de Armazenamento: Os usos de MariaDB incluem 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 é interessante em termos de desempenho, porque torna possível a escala linear para lidar com petabytes de dados. Mais sobre isso em seu blog.

Os motores de armazenamento MySQL são InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, Merge, Federated, Example.

Database Views são um recurso em que a MariaDB introduz otimizações significativas ao consultar apenas as tabelas necessárias.

Algumas características que o MySQL introduz são JSON tipo de dados nativo, MySQL Shell na versão MySQL 8.0 – que permite javascript e python scripting – e não funciona com MariaDB, SHA-256 plugin de autenticação baseado, melhorando a segurança sobre mysql_native_password.

Aqui você pode encontrar a lista completa das diferenças entre MariaDB vs MySQL e as vantagens do primeiro quando comparado com o segundo.

Resumo

MySQL está sob o guarda-chuva corporativo do maior vendedor de banco de dados comercial do mundo. Com tantos engenheiros a tempo inteiro a trabalhar 24 horas por dia para desenvolver novas funcionalidades premium, já temos alguns pontos em que divergem. MariaDB, por outro lado, normalmente alcança quando se trata de adições premium mas isso nem sempre é imediato e não há garantias.

Dito isto, no entanto, existem muitos cenários em que MariaDB oferece melhor desempenho. Adicione a isso patches e atualizações mais ágeis, um futuro de código aberto mais estável, e um pouco mais de otimismo e você verá por que em Kinsta não somos apenas fãs, mas também usamos MariaDB como parte de nossa pilha de servidores orientada a performance.

Tonino Jankov

Tonino is an entrepreneur, Linux & OSS enthusiast, developer, and tech educator. He has over ten years of experience in development and has been in the blockchain space for 3+ years. When he's not coding, he writes for SitePoint and Alibaba Cloud, binge-watches the newest works of fiction on Netflix, and explores new travel destinations.