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