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

Уникальные особенности ClickHouse

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

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

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

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

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

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

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

Дисковое хранилище данных

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

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

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

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

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

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

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

Поддержка SQL

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

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

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

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

Данные не только хранятся по колонкам, но также обрабатываются векторами (частями колонок), что позволяет достигать высокой эффективности использования ЦП.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Для получения дополнительной информации смотрите раздел Репликация данных.

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

ClickHouse реализует управление учетными записями пользователей с использованием SQL-запросов и позволяет настраивать контроль доступа на основе ролей, аналогичный тому, что можно найти в стандарте ANSI SQL и популярных системах управления реляционными базами данных.

Возможности, которые можно считать недостатками

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