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