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

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

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

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

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

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