ClickHouse - это столбцовая система управления базами данных, оптимизированная для онлайн-обработки аналитических запросов (OLAP).
Изначально ClickHouse разрабатывалась для обеспечения работы платформы веб-аналитики Яндекс.Метрики, а затем была выделена в отдельный проект с открытым исходным кодом. Оценить возможности ClickHouse можно по утверждениям компании Яндекс, судя по которым, их база данных успешно справляется с 13 триллионами записей и 20 миллиардами событий в сутки, генерируя на лету индивидуальные отчёты.
Данные в ClickHouse имеют столбцовую (колоночную) организацию, при которой группируются значения одного атрибута. Это позволяет эффективно получать массы значений конкретных атрибутов, анализировать их взаимное влияние и закономерности. Запросы, которые требуют доступа только к определенным столбцам (атрибутам), могут выполняться очень быстро и эффективно при столбцовой организации данных.
С другой стороны, в традиционной строковой организации базы данных данные хранятся построчно, где каждая запись группирует все значения атрибутов для конкретного объекта. Такая организация данных эффективна для операций, требующих доступа сразу ко всем атрибутам конкретного объекта, но менее эффективна при выполнении аналитических запросов, которые оперируют массами данных по отдельным атрибутам.
Наряду со столбцовой организацией данных, в ClickHouse реализован ряд мер, направленных на повышение производительности:
- Отсутствие лишних данных
В ClickHouse поддерживаются значения постоянной длины, чтобы не хранить рядом со значениями типа «число» их длины. - Поддержка сжатия данных
Сжатие данных, реализованное в ClickHouse, играет важную роль в обеспечении хорошей производительности. - Хранение данных на обычном жестком диске
Многие столбцовые СУБД могут работать только в оперативной памяти. ClickHouse позволяет использовать жесткие диски для хранения данных. - Параллельная обработка запроса
В ClickHouse реализовано эффективное распараллеливание запросов, максимально используя доступные на сервере ресурсы. - Распределенная обработка запроса
В ClickHouse запрос может быть выполнен на всех распределенных шардах (сегментах базы данных) параллельно. - Поддержка SQL
ClickHouse имеет свой язык запросов на основе SQL и во многих случаях его синтаксис совпадает с SQL. - Векторный движок
Данные в ClickHouse могут быть обработаны по векторам, фрагментам столбца. За счёт этого достигается высокая эффективность обработки. - Обновление данных в реальном времени
ClickHouse поддерживает таблицы с первичным ключом, чтобы ускорить выполнение запросов по диапазону первичного ключа. Доступно постоянное добавление данных в таблицу без блокировки. - Наличие индекса
Физическая сортировка данных по первичному ключу позволяет получать данные для конкретных его значений или их диапазонов с низкими задержками. - Подходит для онлайн запросов
Низкие задержки позволяют не откладывать выполнение запроса, а отвечать в режиме онлайн. - Поддержка приближённых вычислений
ClickHouse даёт различные способы понижения точности вычислений, когда она не нужна, взамен получая повышение производительности.
К недостаткам ClickHouse или его особенностям можно отнести:
- Отсутствие реализации полноценных транзакций.
- Удаление и изменение конкретных данных имеет высокие задержки, но есть эффективные средства массового удаления и изменение данных.
- Разреженный индекс делает ClickHouse плохо пригодным для точечных чтений одиночных строк.
- Не поддерживает ANSI SQL 2008 и PostgreSQL.
- Не умеет делать локальные и распределённые JOIN.
ClickHouse не подходит для операций над данными вида "ключ-значение", такие операции в ClickHouse могут быть выполнены, но с высокими задержками и низкой производительностью. Однако ClickHouse будет хорошим вариантом для баз данных временных рядов, обеспечивая высокую скорость выполнения запросов. Предназначение ClickHouse прежде всего это - аналитика, а для других целей, скорее всего, лучше использовать иные СУБД.
Типичными задачами, для решения которых применяется ClickHouse, является:
- Онлайн-аналитика в реальном времени
ClickHouse позволяет выполнять аналитические запросы в режиме реального времени, обеспечивая низкую задержку при ответе на запросы. При этом ClickHouse предлагает мощные агрегирующие функции, возможность группировки, фильтрации и сортировки данных, что делает его эффективным для выполнения сложных аналитических запросов, включая многомерный анализ, сегментацию данных, вычисление статистических показателей, аналитику веб-трафика, финансовый анализ и т.д. - Аналитика больших данных
ClickHouse способен обрабатывать и анализировать огромные объемы данных. Он эффективно работает с наборами данных размером в терабайты и предоставляет высокую производительность для запросов, требующих доступа к огромным объемам данных. - Выявление трендов и прогнозирование поведения
ClickHouse широко используется для обработки журналов событий, логов, аудита и других данных событийного характера. Он позволяет проводить анализ этих данных в реальном времени, выявлять тренды и системные проблемы, прогнозировать поведение систем и т.д. - Аналитика IIoT (Industrial Internet of Things)
ClickHouse используется для обработки и анализа данных, сгенерированных различными устройствами IIoT, датчиками и контроллерами. Он способен обрабатывать потоковые данные, выполнять агрегацию и аналитику в реальном времени, а также хранить исторические данные для последующего анализа. Например, применяться для планирования производства, оценки эффективности работы оборудования, выявления узких мест и прогнозирования появления неисправностей. - Анализ маркетинговых показателей
ClickHouse может быть полезным инструментом для анализа маркетинговой эффективности. С помощью него можно отслеживать показы, клики, конверсии и т.д., сегментировать данные, вычислять на их основе маркетинговые показатели эффективности и создавать отчеты.