Вопрос
Я записываю данные в ClickHouse Cloud и хочу при чтении быть уверенным, что получаю самую актуальную и полную информацию.
Ответ
Подключение к тому же узлу
Если вы используете собственный протокол или сеанс для записи/чтения, то должны быть подключены к одной и той же реплике: в этом случае вы читаете напрямую с узла, в который записываете данные, поэтому чтение всегда будет согласованным.
Подключение к случайно выбранному узлу
Если вы не можете гарантировать, что обращаетесь к одному и тому же узлу (например, если обращаетесь к узлу через HTTPS-запросы, которые распределяет балансировщик нагрузки), вы можете либо:
A)
- записать данные
- подключиться к другой реплике
- выполнить
SYSTEM SYNC REPLICA db.table_name LIGHTWEIGHT - прочитать последние данные
См. справку по командам SYSTEM
ИЛИ
B) выполнять чтение в любой момент с последовательной согласованностью
SELECT
...
SETTINGS select_sequential_consistency = 1Обратите внимание: при использовании ClickHouse Cloud и его движка таблиц SharedMergeTree по умолчанию параметр insert_quorum_parallel не требуется — все вставки в SharedMergeTree по умолчанию являются quorum inserts.
Использование SYSTEM SYNC REPLICAS или select_sequential_consistency увеличит нагрузку на ClickHouse Keeper и может снизить производительность в зависимости от нагрузки на сервис.
Рекомендуется выполнять запись и чтение в рамках одного и того же сеанса или через собственный протокол (sticky connection).