Перейти к основному содержимому
Перейти к основному содержимому

Что такое 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 предоставляет способы обмена точностью на производительность. Например, некоторые из его агрегатных функций приближенно вычисляют количество уникальных значений, медиану и процентиль. Кроме того, запросы могут выполняться на выборке данных для быстрого вычисления приблизительного результата. Наконец, агрегации могут выполняться с ограниченным числом ключей вместо всех ключей. В зависимости от того, насколько асимметрично распределены ключи, это может предоставить достаточно точный результат, использующий гораздо меньше ресурсов, чем точное вычисление.

Адаптивные алгоритмы соединения

ClickHouse адаптивно выбирает алгоритм соединения, начиная с быстрых хеш-соединений и переходя к слиянию соединений, если имеется более одной большой таблицы.

Превосходная производительность запросов

ClickHouse известен своей крайне быстрой производительностью запросов. Чтобы узнать, почему ClickHouse так быстр, смотрите руководство Почему ClickHouse быстрый?.