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