Конфигурация

Client конструируется из массива опций:

php
use TrueAsync\ClickHouse\Client;
use TrueAsync\ClickHouse\Compression;

$client = new Client([
    'host'        => '127.0.0.1',
    'port'        => 9000,
    'database'    => 'default',
    'user'        => 'default',
    'password'    => '',
    'compression' => Compression::LZ4,
    'pool'        => ['max' => 10],
]);

Опции

КлючТипПо умолчаниюОписание
hoststring127.0.0.1Хост сервера.
portint9000 (или 9440 при включённом tls)Порт нативного протокола.
databasestringdefaultБаза данных по умолчанию.
userstringdefaultИмя пользователя.
passwordstring''Пароль.
compressionCompressionCompression::LZ4Перечисление компрессии канала: Compression::None, ::LZ4 или ::ZSTD.
poolarray['max' => 10]Настройки пула соединений; см. ниже.
hostsstring[]нетСписок нескольких хостов; см. ниже.
open_strategyOpenStrategyOpenStrategy::InOrderКак многохостовый пул выбирает хост для каждого соединения: InOrder (failover), RoundRobin, Random.
tlsboolfalseПодключаться по TLS.
tls_verifybooltrueПроверять сертификат сервера (только при TLS).

Конструирование ленивое: ни одно соединение не открывается до первого query/insert. Поэтому неверный хост проявляется как ConnectionException при первом использовании, а не в конструкторе.

Пул соединений

'pool' => ['max' => N] ограничивает число физических соединений, которые открывает один Client (по умолчанию 10). Конкурентные корутины забирают каждая своё соединение вплоть до этого лимита; дальнейшие запросившие ждут, пока одно освободится. См. Пул соединений.

Несколько хостов

'hosts' перечисляет несколько серверов (у каждой записи может быть свой порт). Если задано, оно вытесняет host/port для основного хоста. 'open_strategy' решает, какой хост каждое соединение из пула пробует первым:

  • OpenStrategy::InOrder (по умолчанию) — всегда начинать с первого хоста; остальные — чистый failover, пробуются по порядку только когда предыдущий не смог подключиться.
  • OpenStrategy::RoundRobin — чередовать стартовый хост между соединениями, чтобы пул распределял свои соединения по хостам (каждое всё равно делает failover на остальные).
  • OpenStrategy::Random — выбирать случайный стартовый хост для каждого соединения.
php
use TrueAsync\ClickHouse\OpenStrategy;

$client = new Client([
    'hosts'         => ['ch-1.internal', 'ch-2.internal:9000', 'ch-3.internal'],
    'open_strategy' => OpenStrategy::RoundRobin,
    'user'          => 'default',
]);

Стратегия задаётся на соединение, а не на запрос: ClickHouse привязывает соединение к одному хосту на всё время его жизни, поэтому балансировка происходит на уровне соединений скрытого пула.

TLS

php
$client = new Client([
    'host'       => 'clickhouse.example.com',
    'tls'        => true,     // порт по умолчанию 9440
    'tls_verify' => true,     // false только для самоподписанных тестовых сертификатов
    'user'       => 'default',
    'password'   => 'secret',
]);

TLS обеспечивается слоем потоков PHP (ssl://); сервер должен слушать защищённый порт нативного протокола (по соглашению — 9440).