Quando um banco de dados é criado, um fator muitas vezes esquecido, mas crítico no desempenho, é o mecanismo de armazenamento (principalmente à medida que o banco de dados cresce). Em muitos casos, a tentação é apenas aceitar o padrão e continuar desenvolvendo seu projeto. Isso pode levar a impactos negativos inesperados no desempenho, nos backups e na integridade dos dados posteriormente no ciclo de vida do aplicativo, como quando sua equipe implementa análises e painéis MySQL.
Para evitar essas armadilhas potenciais, vamos dar uma olhada em alguns dos mecanismos de armazenamento mais amplamente usados suportados pelo MySQL (a partir da versão 5.7).
Mecanismos de armazenamento compatíveis
Quais são minhas opções?
Por padrão, o MySQL 5.7 suporta dez mecanismos de armazenamento (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated e Example). Para ver quais estão disponíveis e suportados pelo seu servidor, use este comando:
mysql> MOSTRAR MOTORES\G
Isso gerará uma lista de mecanismos de armazenamento e informará quais estão disponíveis, não disponíveis ou quais estão atualmente definidos como padrão. A coluna "Suporte:" exibirá 'SIM', 'NÃO' ou 'PADRÃO', respectivamente.
Em alguns aplicativos, pode surgir a necessidade de ter diferentes mecanismos de armazenamento para diferentes tabelas no mesmo banco de dados. Este é um exemplo de por que você precisa planejar cuidadosamente o modelo de dados para seu aplicativo. Na maioria dos casos, no entanto, apenas um mecanismo de armazenamento será necessário.
Recursos do mecanismo de armazenamento
Em que eles são bons?
Vamos dar uma olhada em alguns dos mecanismos de armazenamento mais usados. Isso nos dará uma ideia do que cada mecanismo foi projetado para fazer e como eles podem ser melhor usados para atender às nossas metas de negócios.
InnoDB: A opção padrão no MySQL 5.7, o InnoDB é um mecanismo de armazenamento robusto que oferece:
- Conformidade total com ACID
- Confirmação, reversão e recuperação de falhas
- Bloqueio em nível de linha
- Restrições de integridade referencial FOREIGN KEY
- Aumentar a simultaneidade de vários usuários (por meio de leituras sem bloqueio)
Com a funcionalidade acima que o InnoDB oferece, é óbvio porque ele é o mecanismo padrão no MySQL. É um mecanismo que funciona bem e oferece muitos dos atributos necessários que qualquer banco de dados precisaria. No entanto, uma discussão abrangente de todos os seus recursos está fora do escopo deste artigo. Este é o mecanismo que provavelmente será usado na maioria das aplicações.
MeuISAM: A funcionalidade que diferencia o MyISAM é sua capacidade de:
- índices de pesquisa de texto completo
- bloqueio em nível de tabela
- falta de suporte para transações
Embora seja um mecanismo de armazenamento rápido, é mais adequado para uso em aplicativos de leitura pesada e principalmente de leitura, como data warehousing e aplicativos da Web que não precisam de suporte a transações ou conformidade com ACID.
NDB (ou NDBCLUSTER):Se um ambiente em cluster for onde seu banco de dados funcionará, o NDB é o mecanismo de armazenamento preferido. É melhor quando você precisa:
- Computação distribuída
- Alta redundância
- Alta disponibilidade
- Os tempos de atividade mais altos possíveis
Observe que o suporte para NDB não está incluído na distribuição de binários padrão do MySQL Server 5.7. Você terá que atualizar para a versão binária mais recente do MySQL Cluster. No entanto, se você estiver desenvolvendo em um ambiente de cluster, provavelmente terá a experiência necessária para lidar com essas tarefas.
CSV: Um mecanismo de armazenamento útil quando os dados precisam ser compartilhados com outros aplicativos que usam dados formatados em CSV. As tabelas são armazenadas como arquivos de texto com valores separados por vírgulas. Embora isso facilite o compartilhamento de dados com scripts e aplicativos, uma desvantagem é que os arquivos CSV não são indexados. Assim, os dados devem ser armazenados em uma tabela InnoDB até a etapa de Importação/Exportação do processo.
Buraco Negro: Este mecanismo aceita, mas não armazena dados. Semelhante ao UNIX /dev/null, as consultas sempre retornam um conjunto vazio. Isso pode ser útil em um ambiente de banco de dados distribuído no qual você não deseja armazenar dados localmente ou em desempenho ou outras situações de teste.
Arquivo: Assim como o nome indica, esse mecanismo é excelente para dados históricos raramente referenciados. As tabelas não são indexadas e a compactação ocorre na inserção. As transações não são suportadas. Use este mecanismo de armazenamento para arquivar e recuperar dados anteriores.
Federado: Esse mecanismo de armazenamento serve para criar um único banco de dados lógico local, vinculando vários servidores MySQL físicos diferentes. Nenhum dado é armazenado no servidor local e as consultas são executadas automaticamente no respectivo servidor remoto. Ele é perfeito para ambientes de data mart distribuídos e pode melhorar muito o desempenho ao usar o MySQL para relatórios analíticos.
Designar um mecanismo de armazenamento
Como altero qual mecanismo de armazenamento é usado?
O mecanismo de armazenamento usado é estabelecido na criação da tabela. Como dito anteriormente, o InnoDB é o mecanismo de armazenamento padrão nas versões 5.5 e superiores do MySQL. Se você quiser usar um diferente, é melhor fazer isso dentro de sua instrução CREATE TABLE. Por exemplo, digamos que você identificou uma tabela que precisa usar o mecanismo de armazenamento CSV. Sua instrução CREATE TABLE excessivamente simplificada pode ter esta aparência:
mysql> CREATE TABLE Shared_Data (
-> Data_ID INTEGER NOT NULL,
-> Nome VARCHAR(50) NOT NULL,
-> Descrição VARCHAR(150)
-> ) ENGINE='CSV';
Depois disso, executaríamos uma instrução INSERT como de costume:
mysql> INSERT INTO Shared_Data VALUES
-> (1,'dispositivo um', 'a última versão da melhor tecnologia'),
-> (2,'dispositivo dois', 'o mais rápido do mercado');
Após o sucesso, se você inspecionar o diretório do banco de dados, agora deve haver um arquivo ‘Shared_Data.CSV’ nele que contém os registros que você inseriu na tabela Shared_Data.
A mesma metodologia pode ser usada para qualquer um dos muitos mecanismos de armazenamento suportados pelo MySQL. Embora seja possível alterar o mecanismo de armazenamento após a criação de uma tabela com um
ALTER TABLE
declaração, é uma boa prática planejar adequadamente e defini-la no início. Encerrando
O MySQL tem muitas opções
Como você pode ver, o MySQL oferece suporte para mecanismos de armazenamento projetados para lidar com tarefas muito diferentes em muitos ambientes diferentes. Identificar quais mecanismos usar e quando usá-los pode nos ajudar a evitar complicações desnecessárias e problemas de desempenho à medida que nossos aplicativos são dimensionados.
Se você precisa de 99,999% de tempo de atividade e confiabilidade em seu cluster de computação distribuído ou precisa de suporte a transações compatível com ACID com restrições FOREIGN KEY, o MySQL tem um mecanismo de armazenamento para atender às suas necessidades.
Como sempre, o planejamento e a identificação adequados dos objetivos e requisitos de seu projeto são a melhor maneira de identificar com precisão quais mecanismos de armazenamento são mais adequados para sua aplicação. Espero que este artigo sirva como um ponto de partida útil para ajudá-lo a esse respeito.
Este artigo apareceu originalmente aqui. Republicado com permissão. Envie suas reclamações de direitos autorais aqui.