Ao usar o motor de tabela Memory no ClickHouse Cloud, os dados não são replicados em todos os nós (por design). Para garantir que todas as consultas sejam roteadas para o mesmo nó e que o motor de tabela Memory funcione como esperado, você pode fazer uma das seguintes coisas:
- Executar todas as operações na mesma sessão
- Usar um cliente que use TCP ou a interface nativa (o que habilita suporte a conexões com afinidade), como o clickhouse-client
PREWHERE, incluindo a movimentação automática de condições WHERE controlada pela configuração optimize_move_to_prewhere: primeiro, apenas as colunas das condições são lidas, e as colunas restantes são lidas somente para os blocos em que alguma linha passa no filtro, e apenas para as linhas que passam. Uma conjunção de condições é avaliada em etapas, como no MergeTree com a configuração enable_multiple_prewhere_read_steps: as colunas de cada condição subsequente são lidas apenas para as linhas que atenderam às condições anteriores. Isso é especialmente vantajoso em conjunto com compress = true, pois, com uma condição seletiva, a maioria das colunas nunca chega a ser descomprimida. SELECT count() FROM table sem filtro é respondido a partir dos metadados, sem ler os dados.
A produtividade máxima (mais de 10 GB/s) é alcançada em consultas simples, porque não há leitura de disco, descompressão nem desserialização de dados. (Vale observar que, em muitos casos, a produtividade do motor MergeTree é quase tão alta.)
Ao reiniciar o servidor, os dados desaparecem da tabela e ela fica vazia.
Normalmente, o uso desse motor de tabela não se justifica. No entanto, ele pode ser usado para testes e para tarefas em que a velocidade máxima é necessária com um número relativamente pequeno de linhas (até aproximadamente 100.000.000).
O motor Memory é usado pelo sistema para tabelas temporárias com dados externos de consulta (consulte a seção “Dados externos para o processamento de uma consulta”) e para implementar GLOBAL IN (consulte a seção “Operadores IN”).
É possível especificar limites superior e inferior para limitar o tamanho da tabela do motor Memory, permitindo efetivamente que ela atue como um buffer circular (consulte Parâmetros do motor).
Parâmetros do motor
min_bytes_to_keep— Quantidade mínima de bytes a manter quando a tabela Memory estiver sujeita a limite de tamanho.- Valor padrão:
0 - Requer
max_bytes_to_keep
- Valor padrão:
max_bytes_to_keep— Quantidade máxima de bytes a manter na tabela Memory; as linhas mais antigas são excluídas a cada inserção (ou seja, buffer circular). O total máximo de bytes pode exceder o limite informado se o lote mais antigo de linhas a ser removido ficar abaixo do limite demin_bytes_to_keepao adicionar um bloco grande.- Valor padrão:
0
- Valor padrão:
min_rows_to_keep— Quantidade mínima de linhas a manter quando a tabela Memory estiver sujeita a limite de tamanho.- Valor padrão:
0 - Requer
max_rows_to_keep
- Valor padrão:
max_rows_to_keep— Quantidade máxima de linhas a manter na tabela Memory; as linhas mais antigas são excluídas a cada inserção (ou seja, buffer circular). O total máximo de linhas pode exceder o limite informado se o lote mais antigo de linhas a ser removido ficar abaixo do limite demin_rows_to_keepao adicionar um bloco grande.- Valor padrão:
0
- Valor padrão:
compress- Indica se os dados devem ser compactados na memória.- Valor padrão:
false
- Valor padrão:
Uso
Inicialize as configuraçõesbytes e rows podem ser definidos ao mesmo tempo; no entanto, serão respeitados os menores limites de max e min.