Banco de Dados

2 jan, 2019

Você sabe o que são as Storage Engines do MySQL?

Publicidade

Nas últimas semanas eu venho falando muito do PostgreSQL, um banco de dados que eu adoro! Mas o combinado é que conversaríamos sobre os três bancos de dados open source e relacionais do Azure (PostgreSQL, MySQL e MariaDB). Por isso, hoje é dia de falar sobre o MySQL.

Todas as vezes que eu o utilizei foi com ressalvas, mas preciso confessar que é um banco de dados extremamente poderoso e com uma história fantástica!

Antes que alguém me questione, ou faça uma piada: ele pode ser usado sem o PHP. Aliás, acho esse casamento perfeito, e me arrisco a dizer que o MySQL faz parte do “ecossistema do PHP”. Acreditem em mim – ele é muito poderoso e seu uso vai muito além de páginas web.

Um pouco da história

A MySQL AB (empresa dona do MySQL) foi vendida para a Sun por um 1 bilhão de dólares, um valor impensado naquela época! Posteriormente, a Sun foi vendida para a Oracle e sendo assim, hoje o MySQL é um produto da Oracle.

A Oracle mantém duas versões do MySQL: uma gratuita e uma paga (que inclui serviços como suporte e ferramentas extras).

Se você optar por instalar a versão gratuita do MySQL nos seus servidores, é indispensável estar atento às condições de uso explicadas na licença GPL.

Quanto à versão gratuita, ela é chamada de community, e pode ser baixada neste link.

Esse artigo nasceu porque (na minha opinião) o que mais diferencia o MySQL dos outros SGBDs, é a possibilidade de escolher a Storage Engine. Essa liberdade nos dá a responsabilidade de escolher a opção certa para cada necessidade de negócio.

A flexibilidade do MySQL permite que ele seja uma opção interessante para trabalhar bem em ambientes muito diferentes e complexos. Ao mesmo tempo, ele pode potencializar aplicações embarcadas, DW, indexação de conteúdo e software de prateleira, sistemas redundantes e altamente disponíveis, processamento de transação on-line (OLTP) e muito mais. Ou seja, a utilização do MySQL vai muito além do PHP (repetindo para fixar).

Storage Engine

Para acabar o mistério, as Storage Engines são componentes do MySQL que manipulam as operações SQL para diferentes tipos de tabelas – simples assim!

Achei essa definição das Storge Engine na web e curti. Por isso, resolvi transcrevê-la com o objetivo de deixar o conceito o mais claro possível:

“Como os diversos sistemas de arquivo disponíveis para GNU/ Linux, cada storage engine possui seus próprios benefícios e desvantagens. O servidor comunica-se com elas através da API da storage engine. Essa interface esconde diferenças entre as SE e as tornam amplamente transparentes na camada de consulta. A API contém várias funções de baixo nível que realiza operações como “iniciar uma transação” ou “trazer a linha”. As storage engines não interpretam SQL nem se comunicam umas com as outras; elas simplesmente respondem às requisições do servidor.”

Ao criar uma tabela, o DBA ou desenvolvedor pode escolher qual a storage engine mais adequada. A possibilidade de escolha da storage engine nos permite extrair o melhor do MySQL, desde que escolhamos a opção certa para a necessidade da aplicação – como armazenamento de dados, processamento de transações ou situações de alta disponibilidade – enquanto aproveitam a vantagem de utilizar um conjunto de interfaces e serviços independentes de qualquer storage engine.

Se as alterações nos aplicativos ocasionarem alteração da storage engine, não serão necessárias alterações significativas no seu código para que as coisas funcionem. A arquitetura do servidor MySQL protege o aplicativo da complexidade da storage engine, apresentando uma API consistente e fácil de usar.

Quais Storage Engines tenho disponíveis?

Para começar, você pode verificar quais SE (= Storage Engine) seu servidor suporta, usando o comando SHOW ENGINES. O valor da coluna Support indica se a SE pode ser usada.

Atualmente, a InnoDB é um SE padrão do MySQL, pois equilibra alta confiabilidade e alto desempenho. Se você criar uma tabela no MySQL sem especificar a SE, a InnoDB será usada.

As características legais da InnoDB, são:

  • Suas operações DML possuem suporte para as propriedades ACID, com transações que incluem recursos de confirmação, reversão e recuperação de falhas para proteger os dados.
  • Bloqueio em nível de linha e leituras consistentes (no estilo Oracle) aumentam a simultaneidade e o desempenho para uma quantidade grande de usuários.
  • As tabelas organizam seus dados no disco para otimizar as consultas com base nas chaves primárias. Cada tabela possui um índice cluster na chave primária que organiza os dados para minimizar o I/O em algumas consultas.
  • Para manter a integridade referencial, o InnoDB suporta FOREIGN KEY. Ou seja, inserções, atualizações e exclusões são verificadas para garantir que não resultem em inconsistências em diferentes tabelas.

Existem diversas SE e eu não tenho a pretensão de abordar todas, mas abaixo segue um breve resumo daquelas que eu acho bem importantes:

  • MyISAM: esta SE tem bloqueio no nível de tabela, bom desempenho para cargas em batch e posteriores leituras.
  • Memory: armazena todos os dados na memória para acesso rápido em ambientes que exigem pesquisas rápidas de dados não críticos. Ou seja, use para cache.
  • CSV: suas tabelas são realmente arquivos de texto com valores separados por vírgula. Esta SE permite importar ou baixar dados no formato CSV para trocar dados com scripts e aplicativos que leem e escrevem no mesmo formato. Cuidado com o fato das tabelas criadas com esta SE não serem indexadas, por isso, você normalmente manterá os dados nas tabelas criadas com InnoDB durante a operação normal, e só usará tabelas CSV durante o estágio de importação ou exportação.
  • Archive: tabelas criadas com esta SE são compactas e não indexadas e destinam-se a armazenar e recuperar grandes quantidades de informações históricas, arquivadas ou de auditoria de segurança raramente referenciadas.

Para resumir, adorei a tabela que existe na documentação oficial do MySQL, por isso trouxe ela para o artigo, de modo que vocês a utilizem para decidir qual a melhor SE de acordo com suas necessidades:

Origem: https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html

E no Azure?

Falamos bastante das SE, mas quais estão disponíveis no serviço MySQL do Azure? Esse é um aspecto que você precisa levar em consideração. E eu fiquei bem feliz de testar as SE e descobrir que temos algumas opções. Não estão disponíveis a Archive e MyISAM (se você precisar desta storage engine, use MRG_MYISAM).

Conclusão

O MySQL é um dos bancos de dados mais usados no mundo. Pioneiro, flexível e com uma comunidade apaixonada!

Vale a pena conhecê-lo e utilizá-lo – sempre respeitando a versão e suas limitações de uso. Se você irá instalar o MySQL no seu servidor, ou vai criar uma VM no Azure, você tem diversas possibilidades de escolha de SE.

Analise seus requisitos e escolha a SE correta (tanto se optou instalar o MySQL, ou mesmo o Azure).

Aguardem e não percam! No próximo artigo mostrarei como criar um Servidor MySQL no Azure e conversaremos sobre as características, preços, utilização, administração e outros itens importantes.

Treinamentos

Para quem se interessa em fazer treinamentos de MySQL, eu indico os treinamentos da Nerv Informática. O instrutor é o Ricardo Portilho, que é a minha referência em MySQL e MariaDB.

Referências