Postgres vs ClickHouse: Conceitos equivalentes e diferentes
INSERT, UPDATE e DELETE. Embora a replicação física possa levar aos mesmos resultados, a replicação lógica oferece maior flexibilidade para direcionar tabelas e operações específicas, bem como para realizar transformações de dados e dar suporte a diferentes versões do Postgres.
Em contraste, shards e réplicas no ClickHouse são dois conceitos-chave relacionados à distribuição de dados e à redundância. As réplicas do ClickHouse podem ser consideradas análogas às réplicas do Postgres, embora a replicação seja eventualmente consistente, sem a noção de um primário. O sharding, diferentemente do Postgres, tem suporte nativo.
Um shard é uma parte dos dados da sua tabela. Você sempre tem pelo menos um shard. Distribuir os dados em shards entre vários servidores pode ser usado para dividir a carga quando você excede a capacidade de um único servidor, com todos os shards sendo usados para executar uma consulta em paralelo. Você pode criar manualmente shards para uma tabela em diferentes servidores e inserir dados diretamente neles. Como alternativa, uma tabela distribuída pode ser usada com uma chave de sharding que define para qual shard os dados são encaminhados. A chave de sharding pode ser aleatória ou o resultado de uma função hash. É importante observar que um shard pode consistir em várias réplicas.
Uma réplica é uma cópia dos seus dados. O ClickHouse sempre tem pelo menos uma cópia dos seus dados e, portanto, o número mínimo de réplicas é um. Adicionar uma segunda réplica dos seus dados fornece tolerância a falhas e potencialmente capacidade computacional adicional para processar mais consultas (Parallel Replicas também podem ser usadas para distribuir a capacidade computacional de uma única consulta, reduzindo assim a latência). As réplicas são obtidas com o motor de tabela ReplicatedMergeTree, que permite ao ClickHouse manter várias cópias dos dados sincronizadas entre diferentes servidores. A replicação é física: apenas partes compactadas são transferidas entre os nós, não consultas.
Em resumo, uma réplica é uma cópia dos dados que fornece redundância e confiabilidade (e potencialmente processamento distribuído), enquanto um shard é um subconjunto dos dados que permite processamento distribuído e balanceamento de carga.
O ClickHouse Cloud usa uma única cópia dos dados armazenada no S3 com várias réplicas de computação. Os dados ficam disponíveis para cada nó de réplica, cada um dos quais tem um cache em SSD local. Isso depende apenas da replicação de metadados por meio do ClickHouse Keeper.
Consistência eventual
Implicações para o usuário
Recomendações
Roteamento consistente
ClickHouse Cloud
Entre em contato com o suporte para obter acesso aos endpoints fixos.
ClickHouse OSS
session_id ou user_id. As configurações prefer_localhost_replica=0 e load_balancing=in_order devem ser definidas na consulta. Isso garantirá que quaisquer réplicas locais dos shards sejam priorizadas; caso contrário, as réplicas serão priorizadas na ordem em que aparecem na configuração, desde que tenham o mesmo número de erros. Se o número de erros for maior, o failover ocorrerá com seleção aleatória. load_balancing=nearest_hostname também pode ser usado como alternativa para essa seleção determinística de shard.
Ao criar uma tabela distribuída, você especificará um cluster. Essa definição de cluster, especificada em config.xml, listará os shards (e suas réplicas), permitindo que os usuários controlem a ordem em que são usados a partir de cada nó. Com isso, você pode garantir que a seleção seja determinística.
Consistência sequencial
- Ler/gravar no mesmo nó - Se você estiver usando o protocolo nativo ou uma sessão para fazer a gravação/leitura via HTTP, deverá estar conectado à mesma réplica: nesse cenário, como você está lendo diretamente do nó em que grava, sua leitura sempre será consistente.
- Sincronizar réplicas manualmente - Se você gravar em uma réplica e ler de outra, poderá executar
SYSTEM SYNC REPLICA LIGHTWEIGHTantes da leitura. - Habilitar a consistência sequencial - por meio da configuração da consulta
select_sequential_consistency = 1. No OSS, a configuraçãoinsert_quorum = 'auto'também deve ser especificada.
Veja aqui mais detalhes sobre como habilitar essas configurações.
O uso de consistência sequencial aumentará a carga no ClickHouse Keeper. O resultado pode significar inserts e leituras mais lentos. O SharedMergeTree, usado no ClickHouse Cloud como o principal motor de tabela, gera menos sobrecarga e escala melhor com consistência sequencial. No OSS, você deve usar essa abordagem com cautela e medir a carga do Keeper.
Suporte transacional (ACID)
Compressão
Query (Postgres)
Query (ClickHouse)
Response