ClickHouse
Introdução ao ClickHouse
ClickHouse é um banco de dados colunar de código aberto orientado para análise e processamento on-line. É independente do sistema de Big Data Hadoop e apresenta taxa de compressão final e desempenho de consulta rápida. Além disso, o ClickHouse suporta consulta SQL e oferece bom desempenho, especialmente a análise de agregação e desempenho de consulta com base em tabelas grandes e amplas. A velocidade de consulta é uma ordem de grandeza mais rápida do que a de outros bancos de dados analíticos.
As principais funções do ClickHouse são as seguintes:
Funções abrangentes de DBMS
- Linguagem de Definição de Dados (DDL): permite que bancos de dados, tabelas e visualizações sejam criados, modificados ou excluídos dinamicamente sem reiniciar os serviços.
- Linguagem de manipulação de dados (DML): permite que os dados sejam consultados, inseridos, modificados ou excluídos dinamicamente.
- Controle de permissão: suporta configurações de permissão de operação de tabela ou banco de dados baseado no usuário para garantir a segurança dos dados.
- Backup e restauração de dados: suporta backup, exportação, importação e restauração de dados para atender aos requisitos do ambiente de produção.
- Gerenciamento distribuído: fornece o modo de cluster para gerenciar automaticamente vários nós de banco de dados.
Armazenamento baseado em coluna e compressão de dados
O ClickHouse é um banco de dados que usa armazenamento baseado em colunas. Os dados são organizados por coluna. Os dados na mesma coluna são armazenados juntos e os dados em colunas diferentes são armazenados em arquivos diferentes.
Durante a consulta de dados, o armazenamento colunar pode reduzir a faixa de varredura de dados e o tamanho da transmissão de dados, melhorando assim a eficiência da consulta de dados.
Em um sistema tradicional de banco de dados baseado em linhas, os dados são armazenados na sequência em Tabela 1:
Linha |
ID |
Bandeira |
Nome |
Evento |
Tempo |
---|---|---|---|---|---|
0 |
12345678901 |
0 |
nome1 |
1 |
2020/1/11 15:19 |
1 |
32345678901 |
1 |
nome2 |
1 |
2020/5/12 18:10 |
2 |
42345678901 |
1 |
nome3 |
1 |
2020/6/13 17:38 |
N |
... |
... |
... |
... |
... |
Em um banco de dados baseado em linha, os dados na mesma linha são fisicamente armazenados juntos. Em um sistema de banco de dados baseado em colunas, os dados são armazenados na sequência em Tabela 2:
linha: |
0 |
1 |
2 |
N |
---|---|---|---|---|
ID: |
12345678901 |
32345678901 |
42345678901 |
... |
Bandeira: |
0 |
1 |
1 |
... |
Nome: |
nome1 |
nome2 |
nome3 |
... |
Evento: |
1 |
1 |
1 |
... |
Tempo: |
2020/1/11 15:19 |
2020/5/12 18:10 |
2020/6/13 17:38 |
... |
Este exemplo mostra apenas a disposição dos dados em um banco de dados colunar. Bancos de dados colunares armazenam dados na mesma coluna juntos e dados em colunas diferentes separadamente. Os bancos de dados colunares são mais adequados para cenários de processamento analítico on-line (OLAP).
Executor vetorizado
O ClickHouse usa os Dados Múltiplos de Instrução Única (SIMD) da CPU para implementar a execução vetorizada. SIMD é um modo de implementação que usa uma única instrução para operar vários pedaços de dados e melhora o desempenho com paralelismo de dados (outros métodos incluem paralelismo no nível de instrução e paralelismo no nível de thread). O princípio dos SIMD é implementar operações de dados paralelas no nível do registrador da CPU.
Modelo relacional e consulta SQL
O ClickHouse usa SQL como linguagem de consulta e fornece APIs de consulta SQL padrão para integração fácil com o ClickHouse.
Além disso, o ClickHouse utiliza um modelo relacional. Portanto, o custo de migrar o sistema construído em um banco de dados relacional e tradicional ou armazém de dados para ClickHouse é menor.
Fragmentação de dados e consulta distribuída
O cluster de ClickHouse consiste em um ou mais partições, e cada partição corresponde a um nó de serviço ClickHouse. O número máximo de partições depende do número de nós (uma partição corresponde a apenas um nó de serviço).
ClickHouse apresenta os conceitos de tabela local e tabela distribuída. Uma tabela local é equivalente a uma partição de dados. Uma tabela distribuída em si não armazena nenhum dado. É um proxy de acesso da tabela local e funciona como o middleware de fragmentação. Com a ajuda de tabelas distribuídas, vários fragmentos de dados podem ser acessados usando o proxy, implementando assim a consulta distribuída.
Aplicações ClickHouse
ClickHouse é a abreviação de Click Stream e Data Warehouse. Ele é inicialmente aplicado a uma ferramenta de análise de tráfego da Web para realizar análise OLAP para armazéns de dados com base em fluxos de eventos de clique em página. Atualmente, o ClickHouse é amplamente utilizado em campos de publicidade na Internet, análise de tráfego de aplicações e Web, telecomunicações, finanças e Internet das Coisas (IoT). É aplicável a cenários de aplicações de business intelligence e possui um grande número de aplicações e práticas em todo o mundo. Para mais detalhes, visite https://clickhouse.tech/docs/en/introduction/adopters/.
Recursos de código aberto aprimorados de ClickHouse
O ClickHouse MRS tem vantagens como modo de cluster automático, implantação de HA e dimensionamento suave e elástico.
- Modo de cluster automático
Como mostrado em Figura 1, um cluster consiste em vários nós de ClickHouse, que não tem nenhum nó central. É mais um pool de recursos estáticos. Se o modo de cluster de ClickHouse for usado para serviços, será necessário pré-definir as informações do cluster no arquivo de configuração de cada nó. Somente assim, os serviços podem ser acessados corretamente.Os usuários desconhecem as partições de dados e o armazenamento de réplicas em sistemas de banco de dados comuns. No entanto, o ClickHouse permite planejar e definir proativamente configurações detalhadas, como locais de fragmentos, partições e réplica. A instância de ClickHouse do MRS embala o trabalho de forma unificada e adapta-o ao modo automático, implementando um gerenciamento unificado, flexível e fácil de usar. Uma instância do ClickHouse consiste em três nós do ZooKeeper e vários nós do ClickHouse. O modo de réplica dedicada é usado para garantir alta confiabilidade de cópias de dados duplas.Figura 2 Estrutura do cluster do ClickHouse
- Dimensionamento suave e elástico
À medida que os negócios crescem rapidamente, o MRS fornece ClickHouse para cenários como capacidade de armazenamento do cluster ou recursos de computação da CPU que se aproximam do limite. Esta ferramenta é usada para migrar algumas partições de uma ou várias tabelas de MergeTree em vários nós de ClickHouseServer para as mesmas tabelas em outros nós de ClickHouseServer. Dessa forma, a disponibilidade do serviço é garantida e a expansão suave da capacidade é implementada.
Ao adicionar nós de ClickHouse a um cluster, use essa ferramenta para migrar alguns dados dos nós existentes para os novos para balanceamento de dados após a expansão.
- Arquitetura de implementação de HA
O MRS usa a arquitetura de implementação de alta disponibilidade (HA) baseada em ELB para distribuir automaticamente o tráfego de acesso do usuário para vários nós de back-end, expandindo os recursos de serviço para sistemas externos e melhorando a tolerância a falhas. Conforme mostrado em Figura 3, quando uma aplicação de cliente solicita um cluster, o Elastic Load Balance (ELB) é usado para distribuir o tráfego. Com o mecanismo de sondagem do ELB, os dados são gravados em tabelas locais e lidos de tabelas distribuídas em diferentes nós. Desta forma, a carga de leitura/gravação de dados e a alta disponibilidade de acesso à aplicação são garantidas.
Depois que o cluster de ClickHouse é provisionado, cada nó de instância de ClickHouse no cluster corresponde a uma réplica e duas réplicas formam uma partição lógica. Por exemplo, ao criar uma tabela de ReplicatedMergeTree, você pode especificar partições para que os dados possam ser sincronizados automaticamente entre duas réplicas na mesma partição.
Relação entre ClickHouse e outros componentes
O ClickHouse depende do ZooKeeper para instalação e implementação.
As aplicações de computação de fluxo do Flink são usadas para gerar dados de relatórios comuns (tabelas detalhadas) e gravar os dados do relatório em ClickHouse em tempo quase real. Os jobs de Hive/Spark são usados para gerar dados de relatório comuns (tabelas detalhadas) e importar dados para ClickHouse em lote.

Atualmente, o ClickHouse não oferece suporte à interconexão com o Kafka no modo normal ou com o HDFS no modo de segurança.