Что такое ClickHouse?
ClickHouse® — высокопроизводительная колоночная система управления базами данных (СУБД) SQL для онлайн-аналитической обработки (OLAP). Она доступна как в виде программного обеспечения с открытым исходным кодом, так и как облачный сервис.
Что такое аналитика?
Аналитика, также известная как OLAP (Online Analytical Processing), — это SQL‑запросы со сложными вычислениями (например, агрегациями, обработкой строк, арифметикой) по очень большим наборам данных.
В отличие от транзакционных запросов (или OLTP, Online Transaction Processing), которые читают и записывают всего несколько строк за запрос и поэтому выполняются за миллисекунды, аналитические запросы обычно обрабатывают миллиарды и триллионы строк.
Во многих вариантах использования аналитические запросы должны выполняться в режиме реального времени, то есть возвращать результат за время менее одной секунды.
Построчное и колоночное хранение данных
Такой уровень производительности достигается только при правильной «ориентации» данных.
Базы данных хранят данные либо построчно, либо по столбцам.
В построчной базе данных последовательные строки таблицы хранятся одна за другой. Такое расположение позволяет быстро получать строки, так как значения всех столбцов одной строки хранятся вместе.
ClickHouse — это колоночная база данных. В таких системах таблицы хранятся как набор столбцов, то есть значения каждого столбца располагаются последовательно одно за другим. Это затрудняет восстановление отдельных строк (так как между значениями строк появляются разрывы), но операции над столбцами, такие как фильтрация или агрегация, становятся значительно быстрее, чем в построчной базе данных.
Различие лучше всего проиллюстрировать на примере запроса, выполняемого по 100 миллионам строк реальных анонимизированных данных веб-аналитики:
Вы можете запустить этот запрос в ClickHouse SQL Playground, который выбирает и фильтрует лишь несколько из более чем 100 существующих столбцов и возвращает результат за миллисекунды:

Как видно из раздела статистики на диаграмме выше, запрос обработал 100 миллионов строк за 92 миллисекунды, что соответствует пропускной способности примерно чуть более 1 миллиарда строк в секунду или чуть менее 7 ГБ переданных данных в секунду.
Строко-ориентированная СУБД
В строко-ориентированной базе данных, даже если приведенный выше запрос обрабатывает только несколько столбцов из существующих, системе все равно необходимо загрузить данные из других существующих столбцов с диска в память. Причина в том, что данные хранятся на диске в фрагментах, называемых блоками (обычно фиксированного размера, например 4 КБ или 8 КБ). Блоки — это наименьшие единицы данных, считываемые с диска в память. Когда приложение или база данных запрашивает данные, подсистема дискового ввода-вывода операционной системы считывает необходимые блоки с диска. Даже если нужна только часть блока, весь блок целиком считывается в память (это связано с устройством дисков и файловых систем):

Колонко-ориентированная СУБД
Поскольку значения каждого столбца хранятся на диске последовательно друг за другом, при выполнении приведённого выше запроса не загружаются лишние данные. Поскольку блочное хранение и передача данных с диска в память соответствуют характеру доступа к данным в аналитических запросах, с диска читаются только те столбцы, которые требуются для запроса, что позволяет избежать лишних операций ввода-вывода для неиспользуемых данных. Это намного быстрее по сравнению со строчно-ориентированным хранением, при котором считываются целые строки (включая столбцы, не относящиеся к запросу):

Репликация данных и их целостность
ClickHouse использует асинхронную мультимастерную схему репликации, чтобы обеспечивать избыточное хранение данных на нескольких узлах. После записи на любую доступную реплику все остальные реплики в фоновом режиме получают свою копию. Система поддерживает одинаковое состояние данных на разных репликах. Восстановление после большинства сбоев выполняется автоматически или полуавтоматически в более сложных случаях.
Ролевое управление доступом
ClickHouse реализует управление учетными записями пользователей посредством SQL‑запросов и позволяет настраивать ролевое управление доступом, аналогичное описанному в стандарте ANSI SQL и реализованному в популярных системах управления реляционными базами данных.
Поддержка SQL
ClickHouse поддерживает декларативный язык запросов, основанный на SQL, который во многих случаях соответствует стандарту ANSI SQL. Поддерживаемые конструкции запросов включают GROUP BY, ORDER BY, подзапросы в секции FROM, конструкцию JOIN, оператор IN, оконные функции и скалярные подзапросы.
Приблизительный расчет
ClickHouse предоставляет возможности пожертвовать точностью ради производительности. Например, некоторые его агрегатные функции вычисляют приблизительное количество различных значений, медиану и квантили. Кроме того, запросы можно выполнять по выборке данных, чтобы быстро получить приблизительный результат. Наконец, агрегацию можно выполнять с ограниченным числом ключей вместо всех ключей. В зависимости от того, насколько смещено распределение ключей, это может дать достаточно точный результат при существенно меньших затратах ресурсов по сравнению с точным расчетом.
Адаптивные алгоритмы соединения
ClickHouse адаптивно выбирает алгоритм соединения: он начинает с быстрых хеш‑соединений и переходит к merge‑соединениям, если в запросе участвует более одной крупной таблицы.
Высочайшая производительность запросов
ClickHouse широко известен своей исключительно высокой скоростью выполнения запросов. Чтобы узнать, почему ClickHouse такой быстрый, см. руководство Why is ClickHouse fast?.