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