Configurações de conexão
Options pode ser usada para controlar o comportamento do cliente. As configurações a seguir estão disponíveis:
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
Protocol | Protocol | Native | Protocolo de transporte: Native (TCP) ou HTTP. Consulte TCP vs HTTP. |
Addr | []string | — | Lista de endereços host:port. Para vários nós, consulte Conectando-se a vários nós. |
Auth | Auth | — | Credenciais de autenticação (Database, Username, Password). Consulte Autenticação. |
TLS | *tls.Config | nil | Configuração de TLS. Um valor diferente de nil habilita TLS. Consulte TLS. |
DialContext | func(ctx, addr) (net.Conn, error) | — | Função de dial personalizada para controlar como as conexões TCP são estabelecidas. |
DialTimeout | time.Duration | 30s | Tempo máximo de espera ao abrir uma nova conexão. |
MaxOpenConns | int | MaxIdleConns + 5 | Número máximo de conexões abertas a qualquer momento. |
MaxIdleConns | int | 5 | Número de conexões ociosas mantidas no pool. |
ConnMaxLifetime | time.Duration | 1h | Tempo máximo de vida de uma conexão no pool. Consulte Pool de conexões. |
ConnOpenStrategy | ConnOpenStrategy | ConnOpenInOrder | Estratégia para escolher um nó de Addr. Consulte Conectando-se a vários nós. |
BlockBufferSize | uint8 | 2 | Número de blocos a decodificar em paralelo. Valores mais altos aumentam a taxa de transferência, com maior uso de memória. Pode ser substituído por consulta via context. |
Settings | Settings | — | map de configurações do ClickHouse aplicadas a cada consulta. Consultas individuais podem sobrescrevê-las por meio de context. |
Compression | *Compression | nil | Compressão no nível de bloco. Consulte Compressão. |
ReadTimeout | time.Duration | — | Tempo máximo de espera por uma leitura do servidor em uma única chamada. |
FreeBufOnConnRelease | bool | false | Se true, libera o buffer de memória da conexão de volta para o pool a cada consulta. Reduz o uso de memória com um pequeno custo de CPU. |
Logger | *slog.Logger | nil | Logger estruturado (Go log/slog). Consulte Logging. |
Debug | bool | false | Obsoleto. Use Logger. Habilita a saída legada de depuração em stdout. |
Debugf | func(string, ...any) | — | Obsoleto. Use Logger. Função personalizada de log de depuração. Requer Debug: true. |
GetJWT | GetJWTFunc | — | Callback que retorna um token JWT para autenticação no ClickHouse Cloud (somente HTTPS). |
HttpHeaders | map[string]string | — | Cabeçalhos HTTP adicionais enviados em cada requisição (somente transporte HTTP). |
HttpUrlPath | string | — | Caminho de URL adicional anexado às requisições HTTP (somente transporte HTTP). |
HttpMaxConnsPerHost | int | — | Sobrescreve MaxConnsPerHost no http.Transport subjacente (somente transporte HTTP). |
TransportFunc | func(*http.Transport) (http.RoundTripper, error) | — | Fábrica personalizada de transporte HTTP. O transporte padrão é passado para permitir sobrescritas seletivas (somente transporte HTTP). |
HTTPProxyURL | *url.URL | — | URL de proxy HTTP para todas as requisições (somente transporte HTTP). |
TLS
DSN/OpenDB/Open) usarão o pacote tls do Go para estabelecer uma conexão segura. O cliente sabe que deve usar TLS se a estrutura Options contiver um ponteiro tls.Config não nulo.
TLS.Config mínima normalmente é suficiente para se conectar à porta nativa segura (geralmente 9440) em um servidor ClickHouse. Se o servidor ClickHouse não tiver um certificado válido (expirado, com hostname incorreto, não assinado por uma autoridade certificadora raiz reconhecida publicamente), InsecureSkipVerify pode ser true, mas isso é fortemente desaconselhado.
tls.Config. Isso pode incluir conjuntos de cifras específicos, forçar uma versão específica do TLS (como 1.2 ou 1.3), adicionar uma cadeia interna de certificados de AC, adicionar um certificado de cliente (e a chave privada) se exigido pelo servidor ClickHouse, além da maioria das outras opções associadas a uma configuração de segurança mais especializada.
Autenticação
Auth nos detalhes da conexão para informar um nome de usuário e uma senha.
Conectando-se a vários nós
Addr.
ConnOpenInOrder(padrão) - os endereços são usados em ordem. Os endereços seguintes só são utilizados se houver falha ao se conectar usando os endereços anteriores da lista. Na prática, essa é uma estratégia de failover.ConnOpenRoundRobin- A carga é distribuída entre os endereços usando uma estratégia round-robin.ConnOpenRandom- Um nó é selecionado aleatoriamente da lista de endereços.
ConnOpenStrategy
Pool de conexões
MaxOpenConns conexões serão usadas a qualquer momento, e o tamanho máximo do pool é controlado por MaxIdleConns. O cliente obtém uma conexão do pool para cada execução de consulta e a devolve ao pool para reutilização. Uma conexão é usada durante todo o ciclo de vida de um lote e liberada em Send().
Não há garantia de que a mesma conexão do pool será usada em consultas subsequentes, a menos que o usuário defina MaxOpenConns=1. Isso raramente é necessário, mas pode ser exigido em casos em que os usuários estejam usando tabelas temporárias.
Além disso, observe que ConnMaxLifetime é, por padrão, de 1 hora. Isso pode fazer com que a carga no ClickHouse fique desbalanceada se nós saírem do cluster. Isso pode acontecer quando um nó fica indisponível: as conexões passam a ser distribuídas entre os outros nós. Essas conexões persistirão e não serão renovadas por 1 hora por padrão, mesmo que o nó problemático retorne ao cluster. Considere reduzir esse valor em casos de workload intenso.
O pool de conexões está habilitado tanto para Native (TCP) quanto para o protocolo HTTP.
Logging
log/slog do Go, usando o campo Logger em Options. Os campos mais antigos Debug e Debugf estão obsoletos, mas ainda funcionam por compatibilidade retroativa (prioridade: Debugf > Logger > no-op).
Compressão
LZ4 e ZSTD. Isso é feito apenas no nível de bloco. A compressão pode ser habilitada incluindo uma configuração Compression na conexão.
gzip, deflate e br. Consulte API de Banco de Dados/SQL - Compressão para detalhes.
TCP vs HTTP
| TCP (protocolo nativo) | HTTP | |
|---|---|---|
| Porta padrão | 9000 (sem TLS), 9440 (TLS) | 8123 (sem TLS), 8443 (TLS) |
| Ativar | Padrão — omita Protocol | Protocol: clickhouse.HTTP ou use um DSN http:// |
| Compressão | lz4, zstd | lz4, zstd, gzip, deflate, br |
| Sessões | Nativo (sempre ativo) | Explícito — passe session_id como configuração |
| Cabeçalhos HTTP | — | HttpHeaders, HttpUrlPath, HttpMaxConnsPerHost |
| Transporte personalizado | — | TransportFunc |
| Autenticação JWT | — | GetJWT (HTTPS do ClickHouse Cloud) |
OpenTelemetry (WithSpan) | ✅ | O servidor oferece suporte; o cliente ainda não envia o header traceparent |