Configurações de conexão
Options pode ser usada para controlar o comportamento do cliente. As configurações a seguir estão disponíveis:
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
Para alternar qualquer uma das APIs para HTTP: