ClickHouse — мощная колоночная СУБД, предназначенная для аналитических нагрузок. В основе работы с данными лежат различные типы таблиц, каждая из которых имеет свои особенности, преимущества и ограничения. Рассмотрим основные типы таблиц в ClickHouse, разделяя их на реплицируемые и нереплицируемые.
Реплицируемые таблицы
Реплицируемые таблицы предназначены для обеспечения отказоустойчивости и распределённой обработки данных в кластере. Они позволяют синхронизировать данные между разными узлами.
ReplicatedMergeTree
Этот тип таблиц является основой для построения отказоустойчивых решений в ClickHouse. Он основан на MergeTree, но добавляет механизм репликации. Данные автоматически синхронизируются между узлами с использованием ZooKeeper.
Особенности:
Поддержка автоматической репликации и распределённой обработки запросов.
Возможность восстановления данных после сбоев.
Используется для построения масштабируемых кластеров.
ReplicatedCollapsingMergeTree
Расширение ReplicatedMergeTree, добавляющее поддержку механизма коллапсирования (удаления парных строк). Это полезно для обработки логов, в которых одни записи могут отменять другие.
Особенности:
Автоматическое удаление парных записей с противоположными знаками.
Полная поддержка репликации.
Оптимально подходит для хранения событий, например, действий пользователей, где требуется удалять дублирующиеся данные.
Нереплицируемые таблицы
Эти таблицы хранят данные локально и не поддерживают автоматическую синхронизацию между узлами. Они подходят для работы с небольшими объёмами данных или в средах без требований к отказоустойчивости.
MergeTree
Базовый тип таблицы для аналитических данных. Она обеспечивает эффективное хранение, сортировку и сжатие данных, а также поддержку индексов.
Особенности:
Высокая производительность при обработке больших объёмов данных.
Автоматическая агрегация и удаление старых данных.
Поддержка первичного ключа и секционирования.
Log
Простейший тип таблиц, предназначенный для быстрого добавления и считывания данных без сложной обработки.
Особенности:
Подходит для ведения логов и временных данных.
Отсутствие индексации и сортировки.
Высокая скорость вставки данных.
TinyLog
Упрощённый вариант Log, используемый для небольших объёмов данных.
Особенности:
Все данные хранятся в одном файле.
Минимальные накладные расходы.
Не поддерживает параллельную запись.
Memory
Таблица, хранящая данные в оперативной памяти. Отличается высокой скоростью работы, но данные не сохраняются при перезапуске сервера.
Особенности:
Высокая скорость чтения и записи.
Подходит для временных данных и кэша.
Данные теряются при рестарте ClickHouse.
Null
Специальный тип таблицы, который не сохраняет данные, но принимает запросы.
Особенности:
Используется для тестирования и отладки.
Все записи мгновенно «исчезают» после вставки.
Set
Хранит уникальные значения, часто используется для выполнения быстрых проверок вхождения.
Особенности:
Оптимизирован для операций с множествами.
Подходит для реализации механизмов фильтрации данных.
Join
Предназначена для хранения данных, используемых в JOIN-запросах.
Особенности:
Улучшает производительность при выполнении соединений.
Хранит данные в специальном формате для быстрого доступа.
ClickHouse предоставляет широкий выбор типов таблиц для различных задач. ReplicatedMergeTree и ReplicatedCollapsingMergeTree — основные реплицируемые таблицы, тогда как все остальные являются локальными и не поддерживают автоматическое копирование данных. Выбор подходящего типа таблицы зависит от требований к отказоустойчивости, скорости работы и особенностей обработки данных.
Более подробное описание всех типов таблиц можно найти в официальной документации.
Механизм Collapsing в ClickHouse: принцип работы, особенности и преимущества
CollapsingMergeTree и его реплицируемая версия ReplicatedCollapsingMergeTree — это особые движки в ClickHouse, которые позволяют автоматически удалять взаимно исключающие строки на основе специального признака. Это особенно полезно при обработке логов, где фиксируются как добавления, так и удаления записей.
Принцип работы CollapsingMergeTree
CollapsingMergeTree работает на основе специального столбца Sign. Этот столбец определяет, должна ли строка добавляться в таблицу или удаляться при слиянии сегментов.
-
Sign = 1 — строка добавляется.
-
Sign = -1 — строка удаляется, если найдена соответствующая строка с
Sign = 1
.
При мерджах ClickHouse находит парные записи (+1
и -1
) с одинаковыми значениями первичного ключа и удаляет их.
Пример работы механизма Collapsing
1. Создание таблицы
2. Вставка данных
Здесь мы сначала добавляем два события (Sign = 1
), а затем отменяем одно из них (Sign = -1
).
3. Состояние до мерджа
4. После слияния данных (OPTIMIZE TABLE
)
Строки (1, login, 2025-04-03 10:00:00)
с Sign = 1
и Sign = -1
схлопнулись и удалились.
Особенности и нюансы
-
Collapsing работает не мгновенно
-
Удаление парных строк происходит при слиянии данных (
OPTIMIZE TABLE
). -
До мерджа удаленные строки всё ещё видны.
-
-
Требуется правильный порядок вставки данных
-
Если запись
Sign = -1
вставить раньшеSign = 1
, коллапсирование может не сработать. -
Для избежания проблем лучше использовать
FINAL
при выборках:
-
-
Не удаляет одиночные записи
-
Если у записи нет парной строки с
Sign = -1
, она остаётся в таблице.
-
-
Работает только с
CollapsingMergeTree
-
В других движках (например,
MergeTree
) такие операции придётся обрабатывать вручную.
-
Преимущества CollapsingMergeTree
✅ Эффективное сжатие данных – помогает удалять дубликаты без дополнительных запросов.
✅ Оптимизирован для обработки логов – удобно для трекинга действий пользователей, где возможны отмены.
✅ Автоматическое удаление при мердже – нет необходимости вручную чистить устаревшие записи.
✅ Поддержка репликации – работает в ReplicatedCollapsingMergeTree для отказоустойчивых систем.
Когда использовать CollapsingMergeTree?
📌 Событийные данные, где записи могут отменяться (например, логирование входов и выходов).
📌 Финансовые транзакции, если требуется откат операций.
📌 Отслеживание изменений состояний объектов (создание/удаление сущностей).
CollapsingMergeTree — мощный инструмент для автоматического удаления ненужных данных. Однако его следует применять осторожно, чтобы избежать потери важных записей. 🚀
Что нужно чтобы настроить репликацию?
Для настройки репликации в ClickHouse необходимо выполнить несколько шагов. Вот основные требования и последовательность действий:
1. Настроить кластер и ZooKeeper
Репликация в ClickHouse использует ZooKeeper для координации узлов. Вам нужно:
-
Установить и запустить ZooKeeper на одном или нескольких серверах.
-
Добавить его адреса в конфигурационный файл ClickHouse (
config.xml
).
Пример секции конфигурации config.xml
:
2. Определить кластер в ClickHouse
В файле /etc/clickhouse-server/config.xml
добавьте описание кластера:
3. Создать реплицируемую таблицу
При создании таблицы используется ReplicatedMergeTree (или его разновидности). Укажите путь в ZooKeeper и имя реплики:
-
'/clickhouse/tables/my_cluster/my_table'
— путь в ZooKeeper. -
'{replica}'
— автоматически подставляется именем текущего узла.
4. Проверить синхронизацию данных
После вставки данных на одном узле (clickhouse1
) они автоматически появятся на другом (clickhouse2
).
Проверить состояние репликации можно так:
5. Настроить отказоустойчивость
-
Если узел выходит из строя, другой продолжает работать.
-
После восстановления узел автоматически подтягивает недостающие данные из реплики.
-
Запросы можно балансировать через
Distributed
таблицы.
Настроив эти шаги, вы получите отказоустойчивую реплицируемую базу в ClickHouse. 🚀
Комментарии
Отправить комментарий