Что такое ClickHouse?
ClickHouse® — это высокопроизводительная, столбцовая система управления базами данных (СУБД) на основе SQL для онлайн-аналитической обработки (OLAP). Она доступна как в виде программного обеспечения с открытым исходным кодом, так и в виде облачного предложения.
Что такое аналитика?
Аналитика, также известная как OLAP (онлайн-аналитическая обработка), относится к SQL-запросам с сложными вычислениями (например, агрегациями, обработкой строк, арифметикой) над огромными наборами данных.
В отличие от транзакционных запросов (или OLTP, онлайн-транзакционной обработки), которые читают и записывают всего несколько строк за запрос и, следовательно, выполняются за миллисекунды, аналитические запросы обычно обрабатывают миллиарды и триллионы строк.
Во многих случаях аналитические запросы должны быть "в реальном времени", т.е. возвращать результат менее чем за секунду.
Хранение данных в строках и столбцах
Такой уровень производительности можно достичь только с правильной "ориентацией" данных.
Базы данных хранят данные либо в строках, либо в столбцах.
В строково-ориентированной базе данных последовательные строки таблицы хранятся одна за другой. Эта компоновка позволяет быстро извлекать строки, так как значения столбцов каждой строки хранятся вместе.
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 адаптивно, начиная с быстрых хеш-джойнов и переходя к слиянию джойнов, если имеется более одной крупной таблицы.
Высокая производительность запросов
ClickHouse известен крайне высокой производительностью запросов. Чтобы узнать, почему ClickHouse так быстр, смотрите Почему ClickHouse быстрый? руководство.