Зміст

    Коли ClickHouse дійсно потрібен, а коли — ні

    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.