Наряду с традиционными SQL СУБД вроде Postgres, MariaDB, MS SQL Server, существуют также NoSQL СУБД, отличающиеся заточенностью и высокой производительностью для определённого типа задач. NoSQL СУБД в свою очередь подразделяются на различные типы: key-value (например, Redis), документоориентированные (MongoDB), графовые (Neo4J) и колоночные (Cassandra).
Среди колоночных NoSQL СУБД особую популярность приобрела Clickhouse. Это колоночная система управления базами данных, отличающаяся высокой производительностью в области OLAP и предоставляемая как в формате open source-решения, так и в формате облачного решения.
Когда и кто разработал Clickhouse
Clickhouse была создана в 2009 году российской компанией Яндекс для обеспечения работы собственной аналитической платформы Яндекс Метрика. Тем не менее с ростом её популярности в 2016 она была переведена в open source под лицензией Apache 2. Сегодня Clickhouse — это отдельная компания ClickHouse Inc., не аффилированная с Яндекс и оперирующая в юрисдикции США (Сан-Франциско).
Для чего нужна Clickhouse
Задачи, решаемые СУБД, можно поделить на два типа: транзакционные (OnLine Transaction Processing — OLTP) и аналитические (OnLine Analytical Processing — OLAP). Clickhouse нужна прежде всего для решения OLAP-задач.
OLTP-задачи отличает фокус на большом количестве индивидуальных транзакций, тогда как для OLAP-задач характерна работа с большим объёмом исходных данных. Примером OLTP-задачи может являться запись в БД информации о действиях пользователя в приложении, в то время как пример OLAP-задачи — расчёт какой-либо метрики поверх всех действий всех пользователей в приложении (например, расчёт click-through rate или CTR нажатия на определённую кнопку в интерфейсе).
Собственно Clickhouse проявляет свои лучшие свойства именно при выполнении OLAP-задач, в рамках которых надо работать с очень большим объёмом данных, приводить их к определённой структуре и формату представления, удобному для принятия решения: подготовка прогноза продаж, определение эффективности веб-кампании, медицинский анализ результатов использования пациентами лекарств и многое другие задачи.
Особенности и преимущества Clickhouse
Ключевая особенность Clickhouse — использование «под капотом» механизма хранения информации, ориентированного на колонки, нежели на строки. Это позволяет при запросе загружать только нужные колонки с информацией, а также использовать блочное хранение для эффективного их сжатия на диске. Clickhouse также отличается хранением информации на разных узлах, чтобы предотвратить потерю информации для повышения эффективности запросов и для оперативного восстановления после большинства сбоев.
Хотя Clickhouse относится к NoSQL СУБД, она поддерживает как SQL-подобный язык запросов, так и настройку доступа по ролям. Высокая производительность Clickhouse обеспечивается не только за счёт хранения данных по колонкам, но и использованию приблизительных вычислений, когда позволяется приносить в жертву точность в пользу прироста эффективности.
Последней по списку, но не по важности особенностью Clickhouse является наличие алгоритмов соединений, начиная с относительно быстрых хэш-соединений и заканчивая медленными слияниями соединений.
Чем отличаются Clickhouse и Postgres
В то время как Postgres является OLTP SQL реляционной СУБД с построчным хранением данных, где важны частые изменения и точечные выборки по строкам, Clickhouse представляет собой OLAP NoSQL нереляционную СУБД с поколоночным хранением, позволяющую эффективно выполнять операции агрегации и анализа больших массивов данных с менее быстродействующей реализацией операций модификации отдельных записей.
Postgres может быть использована для быстрой модификации отдельных записей, например, в приложениях CRM, ERP, интернет-магазинах и других. Clickhouse заточен для работы в рамках задач, где нужно оперативно и эффективно агрегировать и анализировать огромные объёмы данных, например, аналитические платформы, финансовые или операционные расчеты, сбор логов и так далее.
Но это не единственное отличие данных СУБД. В части масштабируемости про Postgres обычно считается, что эта СУБД лучше всего подходит для вертикального масштабирования посредством увеличения мощности одного сервера, тогда как относительно Clickhouse можно сказать, что она спроектирована под горизонтальное масштабирование и функционирование в рамках распределённых кластеров. В части транзакционности на фоне того, что Postgres полностью поддерживает ACID-транзакции, Clickhouse жертвует транзакционностью в пользу производительности.
В части репликации Postgres привержен потоковой репликации по модели «Основной — Реплика», обеспечивающей консистентность. Clickhouse же применяет собственные механизмы репликации, отшлифованные для распределённых сред, с фокусом на высокую доступность и масштабируемость.
Резюмируем: Postgres подходит для оперативного хранения данных, тогда как Clickhouse — для построения аналитики и отчетности.
Архитектура Clickhouse
Архитектурные особенности Clickhouse обеспечивают её скорость, масштабируемость и эффективность при работе с очень большими объемами данных (триллионы строк и сотни колонок).
Выделяются следующие ключевые компоненты архитектуры:
- Колоночное хранение данных — оно даёт высокую скорость агрегации и эффективность сжатия данных.
- Векторные вычисления — данные обрабатываются по блокам, позволяя эффективно использовать вычислительные ресурсы процессора.
- Физическая сортировка и партиционирование ускоряет выборки по диапазонам и конкретным значениям.
- Масштабируемость и распределённость повышают отказоустойчивость системы и её эффективность.
- Параллельная обработка помогает сделать аналитику по большому объёму данных еще быстрее.
- Интеграция и доступ, заключающиеся в предоставлении различных способов подключения от консольного клиента до драйверов для популярных языков программирования.
Говоря об архитектуре Clickhouse, также выделяют следующие слои:
- Слой хранения, отвечающий за физическое хранение данных по колонкам, индексацию, партиционирование и сжатие;
- Слой обработки запросов, включающий парсер SQL, оптимизатор, планировщик и векторный движок выполнения запросов;
- Интеграционный слой, обеспечивающий взаимодействие с внешними источниками данных, системами резервного копирования, мониторинга и управления доступом.
В конечном счёте, особенности архитектуры Clickhouse обеспечивают её высокую производительность при аналитических запросах, эффективное сжатие данных, горизонтальную масштабируемость и гибкую возможность взаимодействия с другими ПО.
Типы данных в Clickhouse
Clickhouse поддерживает широкий набор типов данных, основные категории которых — числовые, строковые, временные, составные и специальные.
Числовые типы включают в себя целые числа (например, Int64), числа с плавающей запятой (Float64), десятичные числа (Decimal64). Строковые типы представлены строкой произвольной длины (String) и строкой фиксированной длины (FixedString). Дата и время приведены в форматах Date, Datetime, Time. Выделяют также логический true или false. Имеются структуры, состоящие из нескольких элементов вроде Array, Tuple, Nullable, LowCardinality и других. Встречаются и особые структуры наподобие JSON, UUID, IPv4, Variant.
При этом важно помнить, что все типы данных Clickhouse чувствительны к регистру в названиях.
Примеры использования Clickhouse
Clickhouse применяется в самых разных направлениях, где востребован быстрый анализ большого объёма данных:
- Веб-аналитика или событийная аналитика. Напомню, что изначально Clickhouse создавался для сервиса Яндекс Метрика для анализа посещаемости сайтов.
- Анализ больших открытых наборов данных вроде поездок такси в Нью-Йорке, логи кликов, данные различных репозиториев (Kaggle, GitHub).
- Рекламные технологии и маркетинг: построение сложных маркетинговых воронок, расчёт конверсий, отрисовка карты действий пользователя.
- Мониторинг посредством обработки операционных логов для поиска аномалий и построения отчётов или выявления подозрительных с точки зрения безопасности активностей.
- Финансовая аналитика благодаря обработке многомерных OLAP-кубов (построение финансовых отчётов) или процессингу огромных исторических выборок (анализ котировок акций).
- Телеком или IoT — обработка логов для оптимизации работы сетей и устройств.
- E-commerce: отслеживание эффективности акций, персонализация предложений, генерация отчётов по ключевым бизнес-метрикам вроде выручки, прибыли и других.
- Прочие нетипичные задачи — например, анализ генетических данных в биоинформатике.
Как начать работать
Существует несколько способов начать работу с Clickhouse:
- Локальная установка, для чего потребуется скачать и запустить бинарный файл для вашей операционной системы.
- Локальная разработка с помощью Docker, когда нужный образ будет скачан с Docker Hub и развернут внутри linux-контейнера.
- Воспользоваться услугами облачных платформ вроде Yandex Cloud или VK Cloud.
Установка и подключение
Если вы выбрали опцию локальной установки, то это можно сделать следующим образом.
Если вы пользователь Mac/Linux, то алгоритм следующий:
- Запустить из терминала следующую команду, которая автоматически определит вашу операционную систему и скачает нужный файл:
curl https://clickhouse.com/ | sh.
- Запустить сервер с помощью следующей команды, которая создаст необходимые каталоги и файлы:
./clickhouse server
- Запустить клиент, открыв новый терминал и выполнив следующую команду:
./clickhouse client
Вы увидите приглашение к вводу SQL-запросов.
Если вы пользователь Windows, то необходимо предварительно установить WSL и далее войти в терминал Ubuntu, где и выполнить приведённые выше команды.
Clickhouse — это мощный аналитический инструмент, позволяющий производить агрегацию и анализ огромного объёма данных и отличающийся хранением данных по колонкам, работой в распределённом кластере, высокой отказоуйсточивостью, возможностями горизонтального масштабирования, приближенными вычислениями и выдающейся производительностью при обработке аналитических запросов.