O MariaDB Server foi originalmente derivado do MySQL e, portanto, herdou sua arquitetura de mecanismo de armazenamento plugável. Diferentes mecanismos de armazenamento têm características diferentes em termos de desempenho, mas também recursos e possibilidades. Isso permite que os usuários escolham a ferramenta certa para o trabalho em vez de usar o mesmo mecanismo de armazenamento, independentemente do propósito dos dados, quais são os requisitos em relação ao armazenamento de dados e como os dados devem ser acessados. Nesta postagem do blog, gostaríamos de examinar as opções disponíveis no MariaDB e discutir possíveis casos de uso para os diferentes mecanismos de armazenamento disponíveis.
O que é um mecanismo de armazenamento?
Primeiro, porém, vamos dar uma olhada no que é o mecanismo de armazenamento? O MariaDB consiste em várias camadas que operam juntas. O SQL é analisado por um deles, então o MariaDB busca dados, usando uma API comum. Sob o capô, há um mecanismo de armazenamento que contém os dados e reage às solicitações de dados, extrai os dados e os disponibiliza para o MariaDB.
Em resumo, o MariaDB envia uma solicitação para uma linha e cabe ao mecanismo de armazenamento recuperá-la e enviá-la de volta. O MariaDB não se importa como exatamente a linha é armazenada ou como ela será recuperada, tudo depende da implementação dentro do mecanismo de armazenamento. Os mecanismos de armazenamento também podem implementar recursos diferentes. As transações também estão sendo tratadas inteiramente no lado do mecanismo de armazenamento. É por isso que algumas das transações de suporte e outras não. Com esta arquitetura é possível escrever diferentes mecanismos de armazenamento, dedicados a resolver diferentes problemas.
Mecanismos de armazenamento no servidor MariaDB
MariaDB vem com um conjunto de mecanismos de armazenamento. Você pode verificar quais estão disponíveis através de um simples comando:
MariaDB [(none)]> SHOW STORAGE ENGINES;
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | Stores tables as CSV files | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage. Used for internal temporary tables and privilege tables | NO | NO | NO |
| SEQUENCE | YES | Generated tables filled with sequential values | YES | NO | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | Non-transactional engine with good performance and small data footprint | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES | YES | YES |
+--------------------+---------+-------------------------------------------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.000 sec)
Como você pode ver, existem muitos deles, vamos cobrir os mais importantes.
InnoDB
O InnoDB, obviamente, é O mecanismo de armazenamento. Transacional, construído para lidar com tráfego OLTP, pode fornecer um desempenho realmente ótimo. É o mecanismo padrão usado no MariaDB e, a menos que você saiba o que está fazendo, provavelmente desejará mantê-lo em seu banco de dados.
MeuISAM
MyISAM é um dos mecanismos de armazenamento “originais” disponíveis no MySQL e depois no MariaDB. Não é transacional, tornando-o não ideal para as configurações de replicação e, bem, para a maioria dos outros ambientes também. Ainda é um mecanismo muito rápido, especialmente no que diz respeito ao acesso ao índice, tornando-o adequado para cargas de trabalho somente leitura que não serão afetadas pelo bloqueio de INSERTs e fragilidade geral do MyISAM.
Ária
Aria é um mecanismo criado para MariaDB como substituto do MyISAM. Não é transacional, mas é seguro contra falhas, tornando-o muito mais confiável. Atualmente, ele é usado para tabelas temporárias e de sistema, mas também pode ser usado em vez do MyISAM para cargas de trabalho que exigem acesso rápido e somente leitura aos dados.
Memória
Este é um mecanismo all-in-memory que normalmente é usado para tabelas temporárias na memória. Não é persistente, mas pode funcionar para algumas cargas de trabalho somente leitura.
CSV
Este mecanismo de armazenamento foi projetado para armazenar dados em um arquivo como valores separados por vírgula. Não é o mecanismo de armazenamento mais usado, é muito especializado, mas ainda pode ser usado para extrair facilmente dados do MariaDB para qualquer outro software de banco de dados, bem como Excel ou software similar.
Mecanismos de armazenamento no MariaDB Enterprise Server
O MariaDB Enterprise Server vem com alguns mecanismos de armazenamento adicionais sobre o que está disponível na edição da comunidade. Vamos dar uma olhada neles também.
ColumnStore
Este é um mecanismo de armazenamento dedicado para carga de trabalho analítica. Graças à maneira específica de armazenar os dados, é mais rápido recuperar grandes volumes de dados, frequentemente necessários para relatórios. Este pode ser o mecanismo de armazenamento de sua escolha para cargas de trabalho OLAP (OnLine Analytical Processing).
S3
O mecanismo S3 permite acessar dados localizados no S3. É um mecanismo não transacional destinado a dar aos usuários a opção de arquivar dados no S3. O acesso somente leitura está disponível após a criação da tabela.
Aranha
Spider engine permite conectar vários bancos de dados MariaDB na rede, criando um armazenamento fragmentado. É transacional e facilita a escalabilidade horizontal dos usuários, dividindo os dados em vários MariaDB Enterprise Servers, distribuindo o tráfego e a carga de trabalho entre eles.
Minhas Rochas
MyRocks é um mecanismo de armazenamento desenvolvido no Facebook, com o objetivo de reduzir a amplificação de gravação e minimizar o desgaste das unidades SSD. É um mecanismo transacional que deve lidar muito bem com a carga de trabalho OLTP, especialmente as cargas de trabalho típicas de sites de mídia social. O MyRocks vem com uma compactação muito boa, melhor que o InnoDB, o que pode ajudar a reduzir significativamente as despesas de armazenamento se o conjunto de dados se tornar muito grande para o InnoDB lidar adequadamente.
Conclusão
Como você pode ver, existem inúmeras opções fornecidas tanto pelo MariaDB Enterprise quanto pelo Community Server em relação à maneira como os dados podem ser armazenados. Existem mecanismos de armazenamento que se destacam em cargas de trabalho somente leitura, OLAP ou grandes conjuntos de dados. Cabe ao usuário escolher um bom ajuste. Por favor, tenha em mente que, em caso de dúvida, você sempre pode usar o InnoDB, que fornece um desempenho muito bom em geral e deve ser mais que suficiente para a maioria dos casos. É para aqueles casos extremos em que você pode precisar procurar algo mais adequado.