Что влияет на скорость вставки данных в ClickHouse: главные факторы

ClickHouse примеры курсы обучение, архитектура данных примеры курсы обучение, вставка данных в ClickHouse, инженерия данных ClickHouse

Как выполняется вставка данных в ClickHouse, от чего зависит ее скорость и каким образом ее повысить: последовательность операций загрузки и ее оптимизации.

От чего зависит скорость вставки данных в ClickHouse

Поскольку ClickHouse часто используется для построения хранилищ или витрин данных, скорость загрузки данных в эту базу очень важна. Хотя на время вставки данных в ClickHouse влияют множество факторов, включая настройки ETL/ELT-движков, с точки зрения самого колоночного хранилища можно выделить следующие ключевые категории, определяющих скорость загрузки данных:

  • аппаратные ресурсы (ЦП, ОЗУ, диски и сеть). ClickHouse эффективно использует многоядерные процессоры. Высокая тактовая частота и количество ядер напрямую влияют на скорость обработки вставок. Для кэширования данных и быстрой обработки запросов необходим достаточный объем оперативной памяти. SSD-диски значительно быстрее HDD, а использование RAID-массивов может повысить производительность операций записи за счет распараллеливания. Поскольку данные вставляются по сети, высокая загруженность сети и/или ее низкая пропускная способность могут замедлить вставку данных.
  • конфигурация самой СУБД. Поскольку ClickHouse оптимизирован на пакетную вставку больших объемов данных, размер пакета (batch size) сильно влияет на производительность записи. Слишком маленькие пакеты приводят к большему числу операций записи, а слишком большие могут привести к задержкам. Использование нескольких потоков для параллельной вставки может ускорить процесс, но зависит от возможностей аппаратного обеспечения. Разные движки таблиц и ключи сортировки тоже влияют на скорость вставки. Движки семейства MergeTree периодически выполняют слияние мелких частей данных в более крупные для оптимизации хранения и ускорения запросов. Хотя это слияние является фоновым процессом, оно потребляет ресурсы (ЦП, дисковые I/O-операции), что может конкурировать с процессами вставки данных и снижать их скорость. Настройки сжатия меняют объем данных, которые необходимо записать. Процесс сжатия требует дополнительных вычислительных ресурсов и времени, что снижает скорость вставки, особенно при использовании сложных алгоритмов. Дополнительные механизмы обеспечения надежности могут влиять на производительность вставок. Например, если настроены проверки целостности данных и логирование операций. Репликация (особенно геораспределенная) увеличивает время вставки из-за синхронизации данных между узлами. При использовании ZooKeeper для координации реплик, управления метаданными и синхронизации операций, каждый запрос на вставку требует взаимодействия с этой внешней службой для согласования состояния реплик. Это добавляет накладные расходы и может замедлять процесс вставки, особенно при высоких нагрузках. В этом случае имеет смысл рассмотреть альтернативу ClickHouse Keeper, о котором мы писали здесь.
  • формат и структура вставляемых данных. Простые типы данных (числовые, символьные, логические и пр.) вставляются быстрее, чем сложные структуры, такие как массивы, JSON-документы и т.д. ClickHouse поддерживает более 70 форматов, однако, бинарные форматы обрабатываются быстрее текстовых.
  • настройки клиента. Конфигурации клиента, т.е. внешнего по отношению к ClickHouse приложению, выполняющего вставку тоже влияют на скорость вставки данных. При синхронных вставках клиент ожидает подтверждения от сервера о завершении операции вставки перед продолжением работы. Синхронные вставки проще реализовать, но могут стать узким местом при высокой нагрузке. Асинхронная вставка позволяет клиенту не блокироваться и продолжать работу, пока сервер обрабатывает данные. Это особенно полезно при высоких нагрузках и необходимости минимизации задержек. Асинхронные вставки повышают производительность и устойчивость, но требуют дополнительной логики для обработки ошибок и подтверждений. Наконец, интерфейс взаимодействия клиента с ClickHouse (нативный или HTTP) тоже влияет на скорость вставки данных. Подробнее об этом поговорим в следующий раз.

Как выполняется вставка данных

Перед фактическим выполнением операции вставки данных в ClickHouse, сперва выполняется ряд действий на стороне клиента:

  1. Прежде всего, для оптимальной производительности данные должны быть пакетированы. Если пакетирование невозможно, можно использовать асинхронные вставки с использованием промежуточного ПО (брокеры сообщений типа Apache Kafka) или многопоточного/неблокирующего программирования. Асинхронная вставка добавляет буферизацию между распаковкой и анализом данных на стороне ClickHouse.
  2. Поскольку ClickHouse хранит вставленные данные на диске согласно ключу сортировки, можно предварительно, т.е. на стороне клиента, просортировать данные перед отправкой на сервер.
  3. Хотя ClickHouse поддерживает более чем 70 форматов данных, некоторые из них обрабатываются быстрее. Поэтому можно заранее, на стороне клиента выбрать наиболее эффективный формат.
  4. Сжатие данных перед передачей на сервер ClickHouse уменьшает их размер и повышает эффективность утилизации сети, что особенно важно для больших наборов данных. Однако, это переносит накладные расходы на сторону клиента-отправителя данных и приложений, которые будут потреблять данные из колоночного хранилища.
  5. Наконец, после всех операций предварительной подготовки, данные передаются в ClickHouse через нативный или HTTP-интерфейс.

Прием данных на стороне сервера тоже состоит из ряда действий:

  1. ClickHouse получает данные;
  2. после получения данных распаковывает их, если использовалось сжатие;
  3. анализирует их с учетом изначального формата;
  4. создает блок в памяти в формате MergeTree;
  5. сортирует строки по столбцам первичного ключа, если они еще не отсортированы предварительно;
  6. создает разреженный первичный индекс;
  7. применяет сжатие по столбцам;
  8. записывает данные как новую часть данных на диск.
Последовательность пакетной вставки данных в ClickHouse
Последовательность пакетной вставки данных в ClickHouse

Познакомившись с последовательностью вставки данных в ClickHouse, рассмотрим, как можно повысить производительность приема на стороне сервера, не увеличивая нагрузку на него. Если переложить предварительную работу по оптимизации вставки на клиента, получим следующие рекомендации:

  • пакетирование данных для снижения накладных расходов на вставку и повышения эффективности обработки;
  • сортировка данных;
  • форматирование данных – преобразование в формат, эффективный для обработки сервером;
  • сжатие данных, чтобы уменьшить их размер и повысить эффективность сетевой передачи.

Эти оптимизации повышают эффективность и пропускную способность приема данных на стороне сервера, что обычно требует существенных дополнительных ресурсов на стороне клиента. На практике именно формат, алгоритм сжатия и интерфейс передачи данных оказывают наибольшее влияние на операции вставки в ClickHouse. Подробнее об этом читайте в следующей статье.

Освойте ClickHouse на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://clickhouse.com/blog/clickhouse-input-format-matchup-which-is-fastest-most-efficient
  2. https://fastformats.clickhouse.com/
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.