Em geral, os bancos de dados armazenam dados em formato de linha e usam SQL como linguagem de consulta para acessá-los, mas esse método de armazenamento nem sempre é o melhor em termos de desempenho, depende da própria carga de trabalho. Se você deseja obter dados estatísticos, provavelmente deve usar outro tipo de mecanismo de armazenamento de banco de dados.
Neste blog, veremos o que é Columnar Storage e, para ser mais específico, o que é o MariaDB ColumnStore e como instalá-lo para poder processar seu big data de maneira mais eficiente para propósitos analíticos.
Armazenamento Colunar
Armazenamento Colunar é um tipo de mecanismo de banco de dados que armazena dados usando um modelo orientado a colunas.
Por exemplo, em um banco de dados relacional comum, poderíamos ter uma tabela como esta:
id | nome | sobrenome | idade |
1001 | Oliver | Smith | 23 |
1002 | Harry | Jones | 65 |
1003 | Jorge | Williams | 30 |
1004 | Jack | Taylor | 41 |
Aqui é onde um mecanismo de armazenamento Columnar entra em ação. Em vez de armazenar dados em linhas, os dados são armazenados em colunas. Então, se você precisa saber a idade média, será melhor usá-la, pois você terá uma estrutura assim:
id | nome | id | sobrenome | id | idade | ||
1001 | Oliver | 1001 | Smith | 1001 | 23 | ||
1002 | Harry | 1002 | Jones | 1002 | 65 | ||
1003 | Jorge | 1003 | Williams | 1003 | 30 | ||
1004 | Jack | 1004 | Taylor | 1004 | 41 |
Por outro lado, o custo de fazer inserções únicas é maior do que um banco de dados orientado a linhas, e não é a melhor opção para consultas “SELECT *” ou operações transacionais, portanto podemos dizer que se encaixa melhor em um banco de dados OLAP (Online Analytical Processing) do que em um OLTP (Online Transaction Processing).
MariaDB ColumnStore
É um mecanismo de armazenamento colunar que usa uma arquitetura de dados distribuída massivamente paralela. É um download separado, mas estará disponível como mecanismo de armazenamento para MariaDB Server a partir do MariaDB 10.5.4, que ainda está em desenvolvimento no momento em que este blog foi escrito.
Ele é projetado para big data, usando os benefícios do armazenamento colunar para ter um ótimo desempenho com resposta em tempo real a consultas analíticas.
Arquitetura do MariaDB ColumnStore
É composto por muitos (ou apenas 1) Servidores MariaDB, operando como módulos, trabalhando juntos. Esses módulos incluem Usuário, Desempenho e Armazenamento.
Módulo de usuário
É uma instância do MariaDB Server configurada para operar como front-end para ColumnStore.
O Módulo do Usuário gerencia e controla a operação das consultas do usuário final. Quando um cliente executa uma consulta, ela é analisada e distribuída para um ou mais Módulos de Desempenho para processar a consulta. O módulo User coleta os resultados da consulta e os reúne no conjunto de resultados para retornar ao cliente.
O objetivo principal do Módulo de Usuário é lidar com o dimensionamento de simultaneidade. Ele nunca toca diretamente nos arquivos de banco de dados e não requer visibilidade para eles.
Módulo de desempenho
É responsável por armazenar, recuperar e gerenciar dados, processar solicitações de bloco para operações de consulta e repassá-lo ao módulo ou módulos de usuário para finalizar as solicitações de consulta. Ele não vê a consulta em si, mas apenas um conjunto de instruções fornecidas por um Módulo de Usuário.
O módulo seleciona os dados do disco e os armazena em um buffer compartilhado que faz parte do servidor no qual é executado.
Tendo vários nós do Módulo de Desempenho, um mecanismo de pulsação garante que todos os nós estejam online e haja failover transparente no caso de um nó específico falhar.
Armazenamento
Você pode usar armazenamento local (Módulos de desempenho) ou armazenamento compartilhado (SAN) para armazenar dados.
Quando você cria uma tabela no MariaDB ColumnStore, o sistema cria pelo menos um arquivo por coluna na tabela. Assim, por exemplo, uma tabela criada com três colunas teria no mínimo três objetos lógicos endereçáveis separadamente criados em uma SAN ou no disco local de um Módulo de Desempenho.
ColumnStore otimiza sua estratégia de compactação para desempenho de leitura do disco. Ele é ajustado para acelerar a taxa de descompactação, maximizando os benefícios de desempenho ao ler do disco.
MariaDB ColumnStore usa o buffer de versão para armazenar blocos de disco que estão sendo modificados, gerenciar reversões de transações e atender a função MVCC (controle de simultaneidade de várias versões) ou "leitura de instantâneo" do banco de dados. Isso permite oferecer uma visão consistente de consulta do banco de dados.
Como funciona o MariaDB CloumnStore
Agora, vamos ver como o MariaDB ColumnStore processa uma consulta do usuário final, de acordo com a documentação oficial do MariaDB ColumnStore:
- Os clientes emitem uma consulta ao servidor MariaDB em execução no módulo de usuário. O servidor executa uma operação de tabela para todas as tabelas necessárias para atender à solicitação e obtém o plano de execução da consulta inicial.
- Usando a interface do mecanismo de armazenamento MariaDB, ColumnStore converte o objeto de tabela do servidor em objetos ColumnStore. Esses objetos são então enviados para os processos do Módulo do Usuário.
- O User Module converte o plano de execução do MariaDB e otimiza os objetos fornecidos em um plano de execução ColumnStore. Em seguida, determina as etapas necessárias para executar a consulta e a ordem em que elas precisam ser executadas.
- O Módulo do Usuário então consulta o Mapa de Extensão para determinar quais Módulos de Desempenho consultar para os dados de que precisa, então realiza a Eliminação de Extensão, eliminando da lista quaisquer Módulos de Desempenho que contenham apenas dados fora do intervalo de o que a consulta requer.
- O módulo de usuário envia comandos para um ou mais módulos de desempenho para executar operações de E/S de bloco.
- O módulo ou módulos de desempenho realizam filtragem de predicado, processamento de junção, agregação inicial de dados de armazenamento local ou externo e, em seguida, enviam os dados de volta ao módulo de usuário.
- O módulo do usuário realiza a agregação do conjunto de resultados final e compõe o conjunto de resultados para a consulta.
- O User Module / ExeMgr implementa quaisquer cálculos de função de janela, bem como qualquer classificação necessária no conjunto de resultados. Em seguida, ele retorna o conjunto de resultados para o servidor.
- O MariaDB Server executa quaisquer funções de lista de seleção, operações ORDER BY e LIMIT no conjunto de resultados.
- O MariaDB Server retorna o conjunto de resultados para o cliente.
Como instalar o MariaDB ColumnStore
Agora, vamos ver como instalá-lo. Para mais informações, você pode verificar a documentação oficial do MariaDB.
Usaremos o CentOS 7 como sistema operacional, mas você pode usar qualquer sistema operacional compatível. Os pacotes de instalação estão disponíveis para download aqui.
Primeiro, você precisará instalar o repositório Extra Packages:
$ yum install -y epel-release
Em seguida, os seguintes pacotes necessários:
$ yum install -y boost expect perl perl-DBI openssl zlib snappy libaio perl-DBD-MySQL net-tools wget jemalloc numactl-libs
E agora, vamos baixar a versão mais recente do MariaDB ColumnStore, descompactá-la e instalá-la:
$ wget https://downloads.mariadb.com/ColumnStore/latest/centos/x86_64/7/mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ tar zxf mariadb-columnstore-1.2.5-1-centos7.x86_64.rpm.tar.gz
$ rpm -ivh mariadb-columnstore-1.2.5-1-*.rpm
Quando terminar, você verá a seguinte mensagem:
A próxima etapa é:
If installing on a pm1 node using non-distributed install
/usr/local/mariadb/columnstore/bin/postConfigure
If installing on a pm1 node using distributed install
/usr/local/mariadb/columnstore/bin/postConfigure -d
If installing on a non-pm1 using the non-distributed option:
/usr/local/mariadb/columnstore/bin/columnstore start
Então, para este exemplo, vamos apenas executar o comando:
$ /usr/local/mariadb/columnstore/bin/postConfigure
Agora, ele solicitará algumas informações sobre a instalação:
This is the MariaDB ColumnStore System Configuration and Installation tool.
It will Configure the MariaDB ColumnStore System and will perform a Package
Installation of all of the Servers within the System that is being configured.
IMPORTANT: This tool requires to run on the Performance Module #1
Prompting instructions:
Press 'enter' to accept a value in (), if available or
Enter one of the options within [], if available, or
Enter a new value
===== Setup System Server Type Configuration =====
There are 2 options when configuring the System Server Type: single and multi
'single' - Single-Server install is used when there will only be 1 server configured
on the system. It can also be used for production systems, if the plan is
to stay single-server.
'multi' - Multi-Server install is used when you want to configure multiple servers now or
in the future. With Multi-Server install, you can still configure just 1 server
now and add on addition servers/modules in the future.
Select the type of System Server install [1=single, 2=multi] (2) > 1
Performing the Single Server Install.
Enter System Name (columnstore-1) >
===== Setup Storage Configuration =====
----- Setup Performance Module DBRoot Data Storage Mount Configuration -----
There are 2 options when configuring the storage: internal or external
'internal' - This is specified when a local disk is used for the DBRoot storage.
High Availability Server Failover is not Supported in this mode
'external' - This is specified when the DBRoot directories are mounted.
High Availability Server Failover is Supported in this mode.
Select the type of Data Storage [1=internal, 2=external] (1) >
Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'pm1' (1) >
===== Performing Configuration Setup and MariaDB ColumnStore Startup =====
NOTE: Setting 'NumBlocksPct' to 50%
Setting 'TotalUmMemory' to 25% of total memory.
Running the MariaDB ColumnStore setup scripts
post-mysqld-install Successfully Completed
post-mysql-install Successfully Completed
Starting MariaDB Columnstore Database Platform
Starting MariaDB ColumnStore Database Platform Starting, please wait ....... DONE
System Catalog Successfull Created
MariaDB ColumnStore Install Successfully Completed, System is Active
Enter the following command to define MariaDB ColumnStore Alias Commands
. /etc/profile.d/columnstoreAlias.sh
Enter 'mcsmysql' to access the MariaDB ColumnStore SQL console
Enter 'mcsadmin' to access the MariaDB ColumnStore Admin console
NOTE: The MariaDB ColumnStore Alias Commands are in /etc/profile.d/columnstoreAlias.sh
Execute o script gerado:
$ . /etc/profile.d/columnstoreAlias.sh
Agora você pode acessar o banco de dados executando o comando “mcsmysql”:
$ mcsmysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.3.16-MariaDB-log Columnstore 1.2.5-1
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
É isso. Agora, você pode carregar dados em seu banco de dados MariaDB ColumnStore.
Conclusão
O Armazenamento Colunar é uma ótima alternativa de armazenamento de banco de dados para lidar com dados para fins de análise. MariaDB ColumnStore é um mecanismo de armazenamento Columnar projetado para esta tarefa e, como pudemos ver, a instalação é bastante fácil, portanto, se você precisar de um banco de dados OLAP ou processar big data, experimente.