Содержание
    14.12.2025

    Часто можно встретить утверждение, что ClickHouse — это «очень быстрая база данных», способная обрабатывать огромные объёмы информации. Это правда, но с важной оговоркой: ClickHouse подходит не для всех сценариев. Его высокая производительность не всегда является достаточным аргументом, чтобы полностью отказаться от привычных реляционных СУБД.

    Если рассмотреть MySQL, то при работе с большими объёмами данных довольно быстро проявляются ограничения. По мере роста таблиц запросы начинают выполняться всё медленнее, а попытки оптимизации — создание индексов, партиционирование, разбиение данных на отдельные таблицы — лишь частично решают проблему. В результате приходится тратить значительное время разработчиков на сложные и не всегда надёжные обходные решения, которые не устраняют корень проблемы.

    Практический пример

    В компании Хостинг Украина мы столкнулись с задачей поиска аномалий в трафике. Для этого необходимо собирать и анализировать все HTTP-запросы, поступающие на сайты клиентов. В сутки обрабатывается около 1,3 миллиарда запросов, которые поступают с множества серверов.

    Чтобы MySQL справлялся с такой нагрузкой, пришлось применять целый набор оптимизаций:

    • ограничить срок хранения данных тремя сутками;
    • разбить данные на отдельные таблицы, чтобы удалять их целиком, а не выполнять медленный DELETE WHERE date < CURRENT_DATE - INTERVAL 3 DAY;
    • сегментировать таблицы для ускорения поиска по IP-адресам;
    • агрегировать IPv6-адреса до сети /64, поскольку боты часто меняют IPv6 и отправляют каждый запрос с нового адреса;
    • минимизировать количество полей в индексах, так как индексы занимают место и замедляют вставку данных;
    • реализовать очередь на вставку данных, так как запросы приходили более чем со ста серверов каждые пять минут.

    Даже при всех этих мерах запросы на формирование статистики выполнялись медленно и требовали заметного времени ожидания.

    Переход на ClickHouse

    После переноса данных в ClickHouse ситуация изменилась кардинально:

    • скорость выборок по различным колонкам значительно выросла даже без использования индексов;
    • для таблиц было настроено время жизни данных (TTL), и ClickHouse автоматически удаляет устаревшие записи;
    • объём занимаемого дискового пространства сократился за счёт эффективного сжатия данных;
    • отпала необходимость агрегировать IPv6-адреса в /64, так как ClickHouse поддерживает аналитику по сетям «из коробки»;
    • данные теперь вставляются напрямую с каждого сервера, без промежуточных очередей — ClickHouse принимает их быстро и выполняет слияние данных в фоновом режиме.

    Для сравнения: хотя MySQL предлагает Archive Storage Engine и InnoDB со сжатием, первый не поддерживает индексы и крайне медленен для аналитики, а второй показывает посредственные результаты при OLAP-нагрузках и больших объёмах данных.

    Итоги

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

    • статистики
    • логов
    • событийных данных
    • информации, которую не нужно обновлять или выборочно удалять.

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