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

Ключевые особенности ClickHouse

Настоящая столбцово-ориентированная система управления базами данных

В настоящей столбцово-ориентированной СУБД вместе с хранимыми значениями не сохраняются дополнительные данные. Это означает, что необходимо поддерживать значения фиксированной длины, чтобы не приходилось отдельно хранить их длину в виде числа. Например, миллиард значений типа UInt8 должен занимать около 1 ГБ в несжатом виде, в противном случае это сильно повлияет на использование CPU. Крайне важно хранить данные компактно (без какого-либо «мусора») даже в несжатом виде, поскольку скорость декомпрессии (нагрузка на CPU) в основном зависит от объёма несжатых данных.

В отличие от этого, существуют системы, которые могут хранить значения разных столбцов раздельно, но не могут эффективно обрабатывать аналитические запросы, поскольку они оптимизированы под другие сценарии, такие как HBase, Bigtable, Cassandra и Hypertable. В этих системах вы получите пропускную способность порядка сотни тысяч строк в секунду, но не сотен миллионов строк в секунду.

Наконец, ClickHouse — это система управления базами данных, а не одна отдельная база данных. Она позволяет создавать таблицы и базы данных во время работы, загружать данные и выполнять запросы без переконфигурирования и перезапуска сервера.

Сжатие данных

Некоторые столбцовые СУБД не используют сжатие данных. Однако сжатие данных играет ключевую роль в достижении высокой производительности.

Помимо эффективных универсальных кодеков сжатия с различным балансом между занимаемым на диске пространством и потреблением процессорного времени, ClickHouse предоставляет специализированные кодеки для определённых типов данных, что позволяет ClickHouse конкурировать и превосходить более нишевые базы данных, например базы данных временных рядов.

Хранение данных на диске

Физическая сортировка данных по первичному ключу позволяет извлекать данные по конкретным значениям или диапазонам значений с низкой задержкой — менее чем за несколько десятков миллисекунд. Некоторые колоночные СУБД, такие как SAP HANA и Google PowerDrill, могут работать только в оперативной памяти. Такой подход требует выделения большего бюджета на аппаратное обеспечение, чем действительно необходимо для анализа в режиме реального времени.

ClickHouse спроектирован для работы на обычных жестких дисках, что означает низкую стоимость хранения данных в расчёте на 1 ГБ, но при наличии SSD и дополнительной оперативной памяти они также используются в полной мере.

Параллельная обработка на нескольких ядрах

Большие запросы автоматически распараллеливаются, задействуя все необходимые ресурсы, доступные на текущем сервере.

Распределённая обработка на нескольких серверах

Почти ни одна из упомянутых выше колоночных СУБД не поддерживает распределённую обработку запросов.

В ClickHouse данные могут храниться на разных шардах. Каждый шард может представлять собой группу реплик, используемых для отказоустойчивости. Все шарды используются для параллельного выполнения запроса; это прозрачно для пользователя.

Поддержка SQL

ClickHouse поддерживает декларативный язык запросов, основанный на SQL и в основном совместимый со стандартом ANSI SQL.

Поддерживаются запросы с GROUP BY, ORDER BY, подзапросы в разделе FROM, предложение JOIN, оператор IN, оконные функции и скалярные подзапросы.

Коррелированные (зависящие) подзапросы на момент написания этой документации не поддерживаются, но могут появиться в будущем.

Векторный вычислительный движок

Данные не только хранятся по столбцам, но и обрабатываются векторами (частями столбцов), что обеспечивает высокую эффективность использования процессорных ресурсов.

Вставка данных в режиме реального времени

ClickHouse поддерживает таблицы с первичным ключом. Чтобы быстро выполнять запросы по диапазону первичного ключа, данные постепенно сортируются с использованием дерева слияний (MergeTree). Благодаря этому данные могут непрерывно добавляться в таблицу. При приёме новых данных блокировки не устанавливаются.

Первичные индексы

Физическая сортировка данных по первичному ключу позволяет извлекать данные по конкретным значениям или диапазонам значений с низкой задержкой — менее нескольких десятков миллисекунд.

Вторичные индексы

В отличие от других систем управления базами данных, вторичные индексы в ClickHouse не указывают на конкретные строки или диапазоны строк. Вместо этого они позволяют системе заранее определить, что все строки в отдельных частях данных не будут удовлетворять условиям фильтрации запроса, и не читать эти части вовсе, поэтому такие индексы называются индексами пропуска данных.

Подходит для онлайн-запросов

Большинство OLAP-систем управления базами данных не ориентированы на онлайн-запросы с задержкой менее секунды. В альтернативных системах время построения отчёта в десятки секунд или даже минуты часто считается приемлемым. Иногда это занимает ещё больше времени, что вынуждает системы подготавливать отчёты офлайн (заранее или отвечая сообщением «зайдите позже»).

В ClickHouse под «малой задержкой» понимается, что запросы могут обрабатываться без промедления и без предварительной подготовки ответа, прямо в момент загрузки страницы пользовательского интерфейса — другими словами, онлайн.

Поддержка приближённых вычислений

ClickHouse предоставляет различные способы пожертвовать точностью ради повышения производительности:

  1. Агрегатные функции для приближённого вычисления количества различных значений, медиан и квантилей.
  2. Выполнение запроса на основе части данных (SAMPLE) и получение приближённого результата. В этом случае с диска считывается пропорционально меньше данных.
  3. Выполнение агрегации для ограниченного числа случайных ключей вместо всех ключей. При определённых условиях распределения ключей в данных это обеспечивает достаточно точный результат при меньшем потреблении ресурсов.

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

ClickHouse адаптивно выбирает способ выполнения операции JOIN над несколькими таблицами, отдавая предпочтение hash join и переходя к merge join, если более чем одна таблица имеет большой размер.

Поддержка репликации и целостности данных

ClickHouse использует асинхронную многомастерную репликацию. После записи данных на любую доступную реплику все остальные реплики в фоновом режиме получают свою копию. Система поддерживает идентичное состояние данных на разных репликах. Восстановление после большинства сбоев выполняется автоматически или полуавтоматически в более сложных случаях.

Подробнее см. раздел Репликация данных.

Контроль доступа на основе ролей

ClickHouse реализует управление учетными записями пользователей посредством SQL‑запросов и поддерживает настройку контроля доступа на основе ролей, аналогичную предусмотренной стандартом ANSI SQL и реализованной в популярных реляционных СУБД.

Особенности, которые можно рассматривать как недостатки

  1. Отсутствие полноценных транзакций.
  2. Отсутствие возможности модифицировать или удалять уже вставленные данные с высокой скоростью обработки и низкой задержкой. Доступны пакетные операции удаления и обновления для очистки или изменения данных, например для соблюдения требований GDPR.
  3. Разреженный индекс делает ClickHouse менее эффективным для точечных запросов, выбирающих отдельные строки по ключу.