Скорость — ключ к успеху наших продуктов, приложений, решений. Вместо того, чтобы угадывать ваш следующий шаг, данные могут быстрее проложить ваш путь к сложным бизнес-решениям. Сегодня мы хотим познакомить вас с решением, которое поможет разобраться в вопросах хранения и анализа больших данных: ClickHouse.
ClickHouse — это хорошо масштабируемая система управления базами данных (СУБД) с открытым исходным кодом, в которой используется структура, ориентированная на столбцы. Он предназначен для оперативной аналитической обработки (OLAP) и обладает высокой производительностью. ClickHouse может вернуть обработанные результаты в режиме реального времени за доли секунды. Это делает его идеальным для приложений, работающих с массивными наборами структурированных данных: аналитика данных, сложные отчеты о данных, вычисления в науке о данных…
ClickHouse больше всего хвалят за исключительно высокую производительность. Эта производительность зависит от суммы многих факторов:
- Хранение данных по столбцам
- Сжатие данных
- Механизм векторных вычислений
- Приблизительные расчеты
- Использование физических разреженных индексов
Но производительность — не единственное преимущество ClickHouse. ClickHouse — это больше, чем база данных, это сложная система управления базами данных, которая поддерживает распределенную обработку запросов, секционирование, репликацию данных и сегментирование. Это масштабируемая и надежная система, способная обрабатывать терабайты данных.
На самом деле ClickHouse предназначен для записи огромных объемов данных и одновременной обработки большого количества запросов на чтение. И вы можете удобно использовать декларативный язык запросов, подобный SQL.
Contents
Основные возможности ClickHouse
ClickHouse имеет бурно развивающееся сообщество разработчиков и продолжает активно развиваться и совершенствоваться. Вы можете просмотреть журнал изменений и их дорожную карту , чтобы увидеть последние функции и планы на будущее. Даже при быстром росте системы каждая новая функция оценивается с точки зрения производительности, чтобы убедиться, что она не влияет на скорость системы. И многие из существующих самых больших функций ClickHouse специально направлены на повышение его производительности и эффективности.
Столбцовая СУБД
Как настоящая столбцовая база данных, ClickHouse хранит значения одного и того же столбца физически рядом друг с другом без дополнительных данных, прикрепленных к каждому значению. Это важно, когда даже незначительное количество дополнительных данных (например, длина строки), прикрепленных к сотням миллионов элементов в столбце, существенно влияет на скорость сжатия, распаковки и чтения.
Сжатие данных
Для достижения желаемой производительности ClickHouse использует сжатие данных. Это включает в себя сжатие общего назначения, а также ряд специализированных кодеков, предназначенных для различных типов данных, хранящихся в отдельных столбцах.
Обработка запросов на нескольких серверах
ClickHouse поддерживает распределенную обработку запросов с данными, хранящимися в разных шардах. Большие запросы распараллеливаются между несколькими ядрами и используют необходимые им ресурсы.
Синтаксис SQL-запроса
ClickHouse поддерживает синтаксис SQL, аналогичный ANSI SQL. Однако он не идентичен, поэтому для миграции с другой SQL-совместимой системы могут потребоваться переводы.
Механизм векторных вычислений
При обработке данных ClickHouse работает с кусками столбцов (так называемыми векторами) и операции выполняются над массивами элементов, а не над отдельными значениями.
Нет блокировок базы данных
ClickHouse постоянно обновляет таблицы, не полагаясь на блокировки при добавлении новых данных.
Первичные индексы и индексы пропуска данных
Clickhouse физически сортирует данные по первичному ключу. Вторичные индексы (также называемые «индексами пропуска данных») заранее указывают, какие данные не будут соответствовать критериям фильтрации и должны быть пропущены (отсюда и название).
Приблизительные расчеты
Чтобы еще больше повысить производительность, для сложных запросов можно выполнять вычисления на выборке данных, находя компромисс между точностью и производительностью. Это актуально, например, для сложных вычислений по науке о данных.
Хотя ClickHouse может быть отличным выбором для многих сценариев, важно помнить о его архитектурных характеристиках. Поскольку ClickHouse довольно уникален, легко допустить ошибки, которые приведут к неоптимальной производительности. Вот почему важно понимать, что стоит за этой СУБД и как она функционирует.
Начнем с самой отличительной его черты — столбцовой структуры хранилища.
Почему система управления базами данных, ориентированная на столбцы?
Чтобы лучше понять, откуда возникает потребность в подходе, ориентированном на столбцы, и почему ClickHouse его использует, давайте подробнее рассмотрим два разных типа систем: онлайн-обработка транзакций (OLTP) и онлайн-аналитическая обработка (OLAP). В частности, обратите внимание на степень детализации, с которой они манипулируют данными, и на типы операций, которые преобладают в этих системах.
OLTP: онлайн-обработка транзакций
Приложения OLTP выполняют небольшие, но очень частые операции по вставке, обновлению и выбору небольшого количества строк. В приложениях такого типа мы традиционно используем подход, ориентированный на строки, как наиболее эффективный способ работы с целыми отдельными строками.
OLAP: онлайн-аналитическая обработка
Совсем другое дело системы OLAP — операции не нацелены на отдельные строки — вместо этого мы работаем с сотнями тысяч и даже миллионами записей одновременно, полагаясь на механизмы группировки и агрегации. Данные в системах OLAP представлены событиями и редко нуждаются в обновлении. И, что важно, обычно требуется получить и обработать только часть полей за раз. Это делает очень неэффективным чтение полных строк, как это делают системы, ориентированные на строки.
Суть в том, что в приложениях OLTP записи хранятся для простого обновления отдельных строк, в то время как в системах OLAP данные хранятся в основном для быстрого чтения и анализа больших блоков данных.
Поэтому построчная СУБД не могла эффективно управлять аналитической обработкой объемов данных, типичной для OLAP-приложений.
OLAP и системы, ориентированные на столбцы
Системы, ориентированные на столбцы, были разработаны для решения задач OLAP. В действительно столбчатых базах данных данные физически группируются и хранятся по столбцам. Это сводит к минимуму доступ к диску и повышает производительность, поскольку для обработки определенного запроса требуется прочитать только часть данных. Поскольку каждый столбец содержит данные одного типа, в нем могут использоваться эффективные механизмы сжатия.
Кроме того, колоночный подход позволяет добавлять или удалять новые столбцы без снижения производительности, поскольку это означает простое создание или удаление файлов. Напротив, добавление нового столбца в базу данных, ориентированную на строки, потребует обновления данных в каждой строке.
Понимание различий между системами OLAP и OLTP, а также различий между строковым и столбцовым подходами является ключевым моментом при принятии решения о том, использовать ClickHouse или нет. В следующем разделе мы рассмотрим, как это соотносится с конкретными системными требованиями и на что следует обратить внимание, принимая решение о переходе на ClickHouse.
Когда использовать ClickHouse
При правильном использовании и в подходящих сценариях ClickHouse — мощное, масштабируемое и быстрое решение, превосходящее своих конкурентов. ClickHouse создан для приложений OLAP и включает в себя ряд оптимизаций для чтения данных и обработки сложных запросов на высокой скорости.
Вы получите максимальную отдачу от ClickHouse, если:
- вы работаете с огромными объемами данных (измеряемыми в терабайтах), которые непрерывно записываются и считываются;
- у вас есть таблицы с огромным количеством столбцов (ClickHouse любит большое количество столбцов!), но значения столбцов достаточно короткие;
- ваши данные хорошо структурированы и еще не агрегированы;
- вы вставляете данные большими партиями по тысячам строк, миллион — хорошее число;
- подавляющее большинство операций — чтение с агрегацией;
- для чтения вы обрабатываете большое количество строк, но довольно мало столбцов;
- вам не нужно изменять данные позже;
- вам не нужно извлекать определенные строки;
- вам не нужны транзакции.
Например, Яндекс использует более 500 серверов, на которые ежедневно поступает 25 миллионов записей. Другая компания, которая использует ClickHouse, Bloomberg, имеет более сотни серверов и ежедневно принимает около триллиона новых записей (данные за 2018 год).
Когда не стоит использовать ClickHouse
ClickHouse разработан, чтобы быть быстрым. Однако оптимизации, которые делают ClickHouse идеальным решением для OLAP-приложений, делают его неоптимальным для других типов проектов.
Не используйте ClickHouse для OLTP. ClickHouse ожидает, что данные останутся неизменными. Хотя удалить большие куски данных из базы данных ClickHouse технически возможно, это не быстро. ClickHouse просто не предназначен для модификации данных. Он также неэффективен при поиске и извлечении отдельных строк по ключам из-за разреженной индексации. Наконец, ClickHouse не полностью поддерживает транзакции ACID.
ClickHouse не является СУБД типа «ключ-значение». Он также не предназначен для хранения файлов.
Это также не документно-ориентированная база данных. ClickHouse использует предопределенную схему, которую необходимо указать при создании таблицы. Чем лучше схема, тем эффективнее и производительнее запросы.
С чего начать
Я надеюсь, что это заинтриговало вас о ClickHouse и его сверхспособностях. И, возможно, вы задаетесь вопросом, как вы можете начать использовать его самостоятельно. ClickHouse — это проект с открытым исходным кодом, и вы можете следовать его документации, чтобы создать его самостоятельно.
Однако мы знаем, что настройка и обслуживание кластера ClickHouse может быть довольно сложной задачей. Обеспечение правильной репликации данных, отказоустойчивости, стабильности требует много времени и сил. Вот почему Aiven решил предложить Aiven для ClickHouse, который предоставит вам преимущества ClickHouse без головной боли.
С Aiven для ClickHouse вы можете сосредоточиться на продукте, который вы создаете, а мы обеспечим бесперебойную работу базовой инфраструктуры, чтобы вы могли полностью забыть о ней.
Статья является переводом aiven.io