Skip to main content
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
O motor Memory armazena dados na RAM, em formato não comprimido. Os dados são armazenados exatamente na forma em que são recebidos ao serem lidos. Em outras palavras, ler dessa tabela não tem custo algum. O acesso concorrente aos dados é sincronizado. Os bloqueios são curtos: operações de leitura e gravação não bloqueiam umas às outras. Índices não são suportados. A leitura é paralelizada. As leituras suportam 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
  • 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 de min_bytes_to_keep ao adicionar um bloco grande.
    • Valor padrão: 0
  • 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
  • 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 de min_rows_to_keep ao adicionar um bloco grande.
    • Valor padrão: 0
  • compress - Indica se os dados devem ser compactados na memória.
    • Valor padrão: false

Uso

Inicialize as configurações
Altere as configurações
Observação: Os parâmetros de limite de bytes e rows podem ser definidos ao mesmo tempo; no entanto, serão respeitados os menores limites de max e min.

Exemplos

além disso, para as linhas: