Отличительные особенности ClickHouse
Настоящая столбцовая система управления базами данных
В настоящей столбцовой СУБД дополнительные данные не хранятся вместе со значениями. Это означает, что для избежания хранения длины значений рядом с ними, должны поддерживаться значения фиксированной длины. Например, миллиард значений типа UInt8 должен занимать около 1 ГБ в несжатом виде, иначе это сильно влияет на использование CPU. Важно хранить данные компактно (без "мусора"), даже в несжатом виде, так как скорость декомпрессии (использование CPU) в значительной степени зависит от объема несжатых данных.
Это в отличие от систем, которые могут хранить значения разных колонок отдельно, но не могут эффективно обрабатывать аналитические запросы из-за оптимизации для других сценариев, таких как HBase, Bigtable, Cassandra и Hypertable. В таких системах вы получите пропускную способность около ста тысяч строк в секунду, но не сотни миллионов строк в секунду.
В конечном счете, ClickHouse является системой управления базами данных, а не одной базой данных. Она позволяет создавать таблицы и базы данных во время выполнения, загружать данные и выполнять запросы без перенастройки и перезапуска сервера.
Сжатие данных
Некоторые столбцовые СУБД не используют сжатие данных. Однако, сжатие данных играет ключевую роль в достижении отличной производительности.
В дополнение к эффективным кодекам общего назначения с различными компромиссами между пространством на диске и потреблением CPU, ClickHouse предоставляет специализированные кодеки для конкретных типов данных, что позволяет ClickHouse конкурировать с более нишевыми базами данных, такими как базы данных временных рядов.
Физическое хранение данных на диске
Физически отсортированные данные по первичному ключу позволяют извлекать данные на основе конкретных значений или диапазонов значений с низкой задержкой менее чем за несколько десятков миллисекунд. Некоторые столбцовые СУБД, такие как SAP HANA и Google PowerDrill, могут работать только в ОЗУ. Этот подход требует выделения большего аппаратного бюджета, чем необходимо для анализа в реальном времени.
ClickHouse предназначен для работы на обычных жестких дисках, что означает, что стоимость хранения данных за ГБ низка, но SSD и дополнительная ОЗУ также полностью используются, если они доступны.
Параллельная обработка на нескольких ядрах
Большие запросы естественно параллелизуются, используя все необходимые ресурсы, доступные на текущем сервере.
Распределенная обработка на нескольких серверах
Почти ни одна из упомянутых выше столбцовых СУБД не поддерживает распределенную обработку запросов.
В ClickHouse данные могут храниться на разных шардах. Каждый шард может быть группой реплик, используемых для отказоустойчивости. Все шарды используются для выполнения запроса параллельно, что прозрачно для пользователя.
Поддержка SQL
ClickHouse поддерживает язык SQL, который в основном совместим со стандартом ANSI SQL.
Поддерживаемые запросы включают GROUP BY, ORDER BY, подзапросы в FROM, JOIN клаузе, оператор IN и оконные функции window functions и скалярные подзапросы.
Коррелирующие (зависимые) подзапросы на момент написания не поддерживаются, но могут стать доступными в будущем.
Векторный вычислительный движок
Данные хранятся не только по колонкам, но также обрабатываются векторы (части колонок), что позволяет достигать высокой эффективности CPU.
Обновления данных в реальном времени
ClickHouse поддерживает таблицы с первичным ключом. Для быстрой обработки запросов по диапазону первичного ключа данные сортируются инкрементально с использованием дерева слияния. Благодаря этому данные могут постоянно добавляться в таблицу. При загрузке новых данных никакие блокировки не устанавливаются.
Первичные индексы
Физически отсортированные данные по первичному ключу позволяют извлекать данные на основе конкретных значений или диапазонов значений с низкой задержкой менее чем за несколько десятков миллисекунд.
Вторичные индексы
В отличие от других систем управления базами данных, вторичные индексы в ClickHouse не указывают на конкретные строки или диапазоны строк. Вместо этого они позволяют базе данных заранее знать, что все строки в некоторых частях данных не будут соответствовать условиям фильтрации запроса, и не читать их вообще, таким образом они называются индексами пропуска данных.
Подходит для онлайн-запросов
Большинство СУБД OLAP не направлены на онлайн-запросы с задержками в доли секунды. В альтернативных системах время создания отчетов в десятки секунд или даже минут часто считается приемлемым. Иногда требуется даже больше времени, что вынуждает системы готовить отчеты оффлайн (заранее или отвечая "возвращайтесь позже").
В ClickHouse "низкая задержка" означает, что запросы могут обрабатываться без задержек и без попыток подготовить ответ заранее, прямо в момент загрузки страницы пользовательского интерфейса. Другими словами, онлайн.
Поддержка аппроксимированных вычислений
ClickHouse предоставляет различные способы поменять точность на производительность:
- Агрегатные функции для аппроксимированного вычисления количества различных значений, медиан и квантилей.
- Выполнение запроса на основе части (SAMPLE) данных и получение аппроксимированного результата. В этом случае пропорционально меньше данных извлекается с диска.
- Выполнение агрегации для ограниченного количества случайных ключей, вместо всех ключей. При определенных условиях распределения ключей в данных это дает достаточно точный результат, используя меньше ресурсов.
Адаптивный алгоритм JOIN
ClickHouse адаптивно выбирает, как JOIN несколько таблиц, предпочитая алгоритм хеш-соединения и переходя к алгоритму слияния, если имеется более одной большой таблицы.
Репликация данных и поддержка целостности данных
ClickHouse использует асинхронную многомастеровую репликацию. После записи в любую доступную реплику все остальные реплики в фоновом режиме получают свою копию. Система поддерживает идентичные данные на разных репликах. Восстановление после большинства сбоев выполняется автоматически или полуавтоматически в сложных случаях.
Для получения дополнительной информации смотрите раздел Репликация данных.
Контроль доступа на основе ролей
ClickHouse реализует управление учетными записями пользователей с помощью SQL-запросов и позволяет настраивать контроль доступа на основе ролей, аналогично тому, что можно найти в стандарте ANSI SQL и популярных системах управления реляционными базами данных.
Особенности, которые можно считать недостатками
- Нет полноценных транзакций.
- Отсутствие возможности модифицировать или удалять уже вставленные данные с высокой производительностью и низкой задержкой. Доступны пакетные удаления и обновления для очистки или изменения данных, например, для соблюдения GDPR.
- Разреженный индекс делает ClickHouse не таким эффективным для точечных запросов, извлекающих отдельные строки по их ключам.