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

Отличительные особенности ClickHouse

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поддержка SQL

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

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

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

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

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

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

ClickHouse поддерживает таблицы с первичным ключом. Для быстрой обработки запросов по диапазону первичного ключа данные сортируются инкрементно с использованием merge tree. Благодаря этому данные можно постоянно добавлять в таблицу. Блокировки не применяются при приёме новых данных.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функции, которые могут считаться недостатками

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