Уникальные особенности 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 поддерживает таблицы с первичным ключом. Для быстрого выполнения запросов по диапазону первичного ключа данные отсортированы инкрементально с использованием дерева слияний. Благодаря этому данные могут постоянно добавляться в таблицу. При добавлении новых данных блокировки не применяются.
Первичные индексы
Физически сортировка данных по первичному ключу позволяет извлекать данные на основе конкретных значений или диапазонов значений с низкой задержкой за менее чем несколько десятков миллисекунд.
Вторичные индексы
В отличие от других систем управления базами данных, вторичные индексы в ClickHouse не указывают на конкретные строки или диапазоны строк. Вместо этого они позволяют базе данных заранее знать, что все строки в некоторых частях данных не будут соответствовать условиям фильтрации запроса и не считываются вообще, таким образом, они называются индексами пропуска данных.
Подходящие для онлайн-запросов
Большинство OLAP систем управления базами данных не нацелены на онлайн-запросы с задержкой менее одной секунды. В альтернативных системах время формирования отчетов в десятки секунд или даже минут часто считается приемлемым. Иногда требуется еще больше времени, что заставляет системы готовить отчеты в оффлайн-режиме (заранее или отвечая «возвращайтесь позже»).
В ClickHouse «низкая задержка» означает, что запросы могут обрабатываться без задержек и без попыток подготовить ответ заранее, прямо в тот момент, когда загружается страница пользовательского интерфейса. Иными словами, онлайн.
Поддержка аппроксимированных вычислений
ClickHouse предоставляет различные способы обмена точности на производительность:
- Агрегатные функции для аппроксимированного вычисления числа уникальных значений, медиан и квантилей.
- Выполнение запроса на основе части (SAMPLE) данных и получение аппроксимированного результата. В этом случае пропорционально меньше данных считывается с диска.
- Выполнение агрегации для ограниченного числа случайных ключей вместо всех ключей. При определенных условиях распределения ключей в данных это предоставляет достаточно точный результат, используя при этом меньше ресурсов.
Адаптивный алгоритм объединения
ClickHouse адаптивно выбирает, как JOIN несколько таблиц, предпочитая алгоритм хеш-объединения и возвращаясь к алгоритму объединения на основе слияния, если есть более одной крупной таблицы.
Репликация данных и поддержка целостности данных
ClickHouse использует асинхронную многомастеровую репликацию. После записи на любую доступную реплику все оставшиеся реплики получают свою копию в фоновом режиме. Система поддерживает идентичные данные на разных репликах. Восстановление после большинства сбоев выполняется автоматически или полуавтоматически в сложных случаях.
Для получения дополнительной информации смотрите раздел Репликация данных.
Контроль доступа на основе ролей
ClickHouse реализует управление учетными записями пользователей с использованием SQL-запросов и позволяет настраивать контроль доступа на основе ролей, аналогично тому, что можно найти в стандарте ANSI SQL и популярных системах управления реляционными базами данных.
Особенности, которые можно считать недостатками
- Нет полноценных транзакций.
- Недостаток возможности модифицировать или удалять уже вставленные данные с высокой скоростью и низкой задержкой. Доступны пакетные удаления и обновления для очистки или модификации данных, например, для соблюдения GDPR.
- Разреженный индекс делает ClickHouse не таким эффективным для точечных запросов, извлекающих одиночные строки по их ключам.