Настройки соединения
Options. Доступны следующие настройки:
TLS
DSN/OpenDB/Open) используют пакет Go tls для установки защищённого соединения. Клиент понимает, что нужно использовать TLS, если структура Options содержит ненулевой указатель tls.Config.
TLS.Config обычно достаточно для подключения к защищённому native-порту (обычно 9440) на сервере ClickHouse. Если у сервера ClickHouse нет действительного сертификата (истёк срок действия, неверное имя хоста, сертификат не подписан общепризнанным корневым центром сертификации), для InsecureSkipVerify можно установить значение true, но делать это настоятельно не рекомендуется.
tls.Config. Это может включать указание конкретных наборов шифров, принудительное использование определённой версии TLS (например, 1.2 или 1.3), добавление внутренней цепочки CA‑сертификатов, добавление клиентского сертификата (и приватного ключа), если этого требует сервер ClickHouse, а также большинство других параметров для более специализированной конфигурации безопасности.
Аутентификация
Подключение к нескольким узлам
Addr.
ConnOpenInOrder(по умолчанию) - адреса используются по порядку. Последующие адреса задействуются только в случае сбоя при подключении к адресам, расположенным выше в списке. По сути, это стратегия переключения при отказе.ConnOpenRoundRobin- Нагрузка равномерно распределяется между адресами по стратегии round-robin.ConnOpenRandom- Узел случайным образом выбирается из списка адресов.
ConnOpenStrategy
Пул соединений
MaxOpenConns, а максимальный размер пула задается параметром MaxIdleConns. Для выполнения каждого запроса клиент получает соединение из пула, а затем возвращает его обратно для повторного использования. Соединение используется на протяжении всего жизненного цикла батча и освобождается при вызове Send().
Нет гарантии, что для последующих запросов из пула будет использоваться одно и то же соединение, если только пользователь не задаст MaxOpenConns=1. Это требуется редко, но может быть необходимо при использовании временных таблиц.
Также обратите внимание, что значение ConnMaxLifetime по умолчанию составляет 1 час. Это может приводить к неравномерному распределению нагрузки на ClickHouse, если узлы покидают кластер. Например, если узел становится недоступным, соединения перераспределяются на другие узлы. По умолчанию эти соединения сохраняются и не обновляются в течение 1 часа, даже если проблемный узел вернется в кластер. При высокой рабочей нагрузке стоит рассмотреть уменьшение этого значения.
Пул соединений поддерживается как для Native (TCP), так и для HTTP-протокола.
Логирование
log/slog, используя поле Logger в Options. Поля Debug и Debugf считаются устаревшими, но по-прежнему работают для обратной совместимости (приоритет: Debugf > Logger > no-op).
Сжатие
LZ4 и ZSTD. Оно выполняется только на уровне блоков. Сжатие можно включить, добавив конфигурацию Compression к соединению.
gzip, deflate и br. Подробнее см. в разделе Database/SQL API — Compression.
TCP vs HTTP
Чтобы переключить любой API на HTTP: