ClickHouse — это распределенная аналитическая столбцовая (column-oriented) СУБД созданная внутри компании Яндекс в 2012 году. Основная задача ClickHouse это выполнять аналитические запросы в режиме реального времени на структурированных больших данных.
Благодаря развитой функциональности и наличию детальной документации привели к тому, что ClickHouse постепенно распространился по многим отделам Яндекса и ClickHouse стал использоваться в Директе, Маркете, Почте, AdFox, Вебмастере, в мониторингах и в бизнес-аналитике. ClickHouse позволял либо решать задачи, для которых раньше не было подходящих инструментов, либо решать задачи на порядки эффективнее, чем другие системы. В 2016 году Яндекс принимает решение сделать СУБД ClickHouse open-source проектом, т.е. доступным всем желающим по лицензии Apache 2.0.
Область применения:
- аналитика веб-приложений;
- аналитика метрик в режиме реального времени;
- мониторинг и анализ логов;
- мониторинг и анализ данных в режиме реального времени;
Особенности ClickHouse
- ClickHouse позволяет выполнять аналитические запросы в интерактивном режиме по данным, обновляемым в реальном времени.
- Система способна масштабироваться до десятков триллионов записей и петабайтов данных.
- Линейная масштабируемость. Система позволяет увеличивать кластер добавлением серверов.
- Отказоустойчивость. Система представляет собой кластер шардов, где каждый шард — это группа реплик. Используется асинхронная multimaster репликация: после записи на любую доступную реплику, данные распространяются на все остальные реплики. Для координации работы реплик используется ZooKeeper (ZooKeeper не участвует в процессе обработки и выполнения запроса).
- Поддержка SQL. ClickHouse поддерживает диалект SQL c расширениями: массивы и вложенные структуры данных, вероятностные структуры, функция по работе с URI, возможность подключить внешнее key-value хранилище и т. д.
- Сжатие данных.
Принципы работы
Ключевым преимуществом ClickHouse считается высокая скорость выполнения SQL-запросов на чтение (OLAP-сценарий), которая обеспечивается благодаря следующим архитектурным решениям:
- столбцовое хранение данных, что позволяет считывать данные только из нужных колонок и эффективно сжимать однотипную информацию;физическая сортировка данных по первичному ключу позволяет быстро получать конкретные значения или диапазонов;
- векторные вычисления по кусочкам столбцов снижают издержки на диспетчеризацию и позволяют более эффективно использовать CPU;
- распараллеливание операций как в пределах одного сервера на несколько процессорных ядер, так и в рамках распределенных вычислений на кластере за счет механизма шардирования;
- поддержка приближенных вычислений на части выборки, что снижает число обращений к жесткому диску и еще больше повышает скорость обработки данных.
Стоит отметить, что в отличие от других популярных столбцовых СУБД для Big Data, которые работают только в оперативной памяти, ClickHouse работает с жесткими дисками (HDD, SSD). Это снижает стоимость эксплуатации системы, поскольку жесткие диски дешевле RAM. При работе в кластере данные реплицируются асинхронно в фоновом режиме с поддержкой полной идентичности на разных репликах. Apache ZooKeeper используется для координации процесса репликации, но не участвует в обработке данных и выполнения запросов. При сбое в большинстве случаев восстановление данных происходит автоматически. По желанию можно включить кворумную запись данных. Кластер ClickHouse масштабируется линейно путем добавления новых узлов. Так же ClickHouse поддерживает диалект SQL c расширениями, такими как массивы и вложенные структуры данных, вероятностные структуры, возможность подключить внешнее key-value хранилище.
Недостатки
- Отсутствие полноценных транзакций.
- Возможность изменять или удалять ранее записанные данные с низкими задержками и высокой частотой запросов не предоставляется. Есть массовое удаление и изменение данных для очистки более не нужного или соответствия GDPR.
- Разреженный индекс делает ClickHouse плохо пригодным для точечных чтений одиночных строк по своимключам.
Вывод
ClickHouse — сверхскоростная СУБД. Она отлично подходит для исследовательских работ и запросов, где нужна линейная масштабируемость.