接続設定
TLS
DSN/OpenDB/Open) で、安全な接続を確立するために Go tls package が使用されます。Options 構造体に non-nil の tls.Config ポインターが含まれている場合、クライアントは TLS を使用することを認識します。
TLS.Config で ClickHouse サーバーのセキュアなネイティブポート (通常は 9440) に接続するには十分です。ClickHouse サーバーに有効な証明書 (有効期限切れ、ホスト名の不一致、公開されている信頼済みルート認証局による署名がない、など) がない場合は、InsecureSkipVerify を true にすることもできますが、これは強く非推奨です。
tls.Config 構造体の必要なフィールドを設定する必要があります。これには、特定の暗号スイートの指定、特定のTLSバージョン (1.2 や 1.3 など) の強制、内部CA証明書チェーンの追加、ClickHouse サーバー で必要な場合のクライアント証明書 (および秘密鍵) の追加、さらに高度なセキュリティ構成で利用されるその他の大半のオプションが含まれます。
認証
複数のノードへの接続
Addr 構造体で指定できます。
ConnOpenInOrder(デフォルト) - アドレスは定義された順に使用されます。リストの前方にあるアドレスで接続に失敗した場合にのみ、後続のアドレスが使われます。実質的にはフェイルオーバー戦略です。ConnOpenRoundRobin- ラウンドロビン戦略によって、各アドレスに負荷が分散されます。ConnOpenRandom- アドレスのリストからノードがランダムに選択されます。
ConnOpenStrategy オプションで制御できます
接続プーリング
MaxOpenConns で、プールに保持するアイドル接続数の上限は MaxIdleConns で制御されます。クライアントはクエリを実行するたびにプールから接続を取得し、再利用できるよう実行後にプールへ返します。接続はバッチの存続期間中使用され、Send() で解放されます。
ユーザーが MaxOpenConns=1 を設定しない限り、プール内の同じ接続が後続のクエリでも使われる保証はありません。これが必要になるケースはまれですが、一時テーブルを使用する場合には必要になることがあります。
また、ConnMaxLifetime のデフォルト値は 1 時間である点にも注意してください。そのため、ノードがクラスターから離脱すると、ClickHouse への負荷が不均衡になる場合があります。これは、あるノードが利用できなくなると、接続が他のノードに振り分けられるためです。問題のあるノードがクラスターに復帰しても、これらの接続は維持され、デフォルトでは 1 時間更新されません。ワークロードが高い場合は、この値を小さくすることを検討してください。
接続プーリングは、Native (TCP) と HTTP プロトコルの両方で有効です。
ログ
Options の Logger フィールドを使用して、Go 標準の log/slog パッケージによる構造化ログをサポートしています。従来の Debug フィールドと Debugf フィールドは非推奨ですが、後方互換性のため引き続き利用できます (優先順位: Debugf > Logger > no-op) 。
圧縮
LZ4 と ZSTD の圧縮をサポートしています。これはブロック単位でのみ行われます。圧縮を有効にするには、接続に Compression 設定を含めます。
gzip、deflate、br といった追加の圧縮方式も利用できます。詳しくは、Database/SQL API - Compression を参照してください。
TCP と HTTP
いずれかの API を HTTP に切り替えるには: