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

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

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

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