VPS для ClickHouse: аналитическая СУБД на своём сервере
ClickHouse — колоночная СУБД для аналитики, которая обрабатывает миллиарды строк за секунды. Разберём установку, создание таблицы на движке MergeTree, партиционирование, правильную вставку батчами и требования к диску и памяти на VPS.
Содержание
Почему ClickHouse такой быстрый
['ClickHouse хранит данные по колонкам, а не по строкам. Для аналитических запросов (SUM, COUNT, GROUP BY по миллионам строк) это радикально эффективнее: читаются только нужные колонки, а не вся строка целиком. Плюс агрессивное сжатие — однотипные значения в колонке жмутся в разы.', 'Обратная сторона: ClickHouse не для точечных UPDATE/DELETE и не для транзакций как в PostgreSQL. Это инструмент под аналитику, логи, метрики, отчёты. Вставка идёт крупными пачками, а движок фоново сливает куски данных (отсюда MergeTree).', '- Колоночное хранение — читаем только нужные колонки.
- Сжатие — данные на диске в разы компактнее.
- Батчевая вставка — тысячи строк за раз, не по одной.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для ClickHouseУстановка из официального репозитория
['Ставим из официального APT-репозитория ClickHouse. При установке пакет предложит задать пароль пользователя default.', 'sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg\ncurl -fsSL \'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key\' | \\\n sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg\necho "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | \\\n sudo tee /etc/apt/sources.list.d/clickhouse.list\nsudo apt update && sudo apt install -y clickhouse-server clickhouse-client\nsudo systemctl enable --now clickhouse-server', 'Подключаемся клиентом и проверяем версию:', 'clickhouse-client --password --query "SELECT version()"']
Таблица на движке MergeTree
['Основной рабочий движок — MergeTree. Ключевой момент — ORDER BY (ключ сортировки), по которому строятся индексы разреженного типа и ускоряется фильтрация. Партиционирование по месяцу упрощает удаление старых данных.', 'CREATE TABLE events\n(\n event_date Date,\n event_time DateTime,\n user_id UInt64,\n event_type LowCardinality(String),\n url String,\n duration_ms UInt32\n)\nENGINE = MergeTree\nPARTITION BY toYYYYMM(event_date)\nORDER BY (event_date, user_id);', 'Тип LowCardinality(String) для колонок с малым числом уникальных значений (тип события, страна) экономит место и ускоряет запросы. Партиция по месяцу позволяет мгновенно дропать старьё: ALTER TABLE events DROP PARTITION 202501.']
Правильная вставка данных
['Главное правило ClickHouse: вставляйте батчами, а не по одной строке. Каждая вставка создаёт кусок данных на диске, который потом надо слить. Тысячи одиночных INSERT в секунду завалят движок фоновых слияний.', '# вставка из файла батчем\nclickhouse-client --password --query \\\n "INSERT INTO events FORMAT CSVWithNames" < events.csv\n\n# или множественные значения одним запросом\nINSERT INTO events VALUES\n (\'2026-01-01\',\'2026-01-01 10:00:00\',1,\'click\',\'/home\',120),\n (\'2026-01-01\',\'2026-01-01 10:00:05\',2,\'view\',\'/pricing\',340);', 'Если данные идут потоком по одной строке, включите асинхронную вставку — ClickHouse сам соберёт их в батч на своей стороне.', 'SET async_insert = 1;\nSET wait_for_async_insert = 1;']
Аналитические запросы и память
['Сила ClickHouse — агрегации по огромным объёмам. Разреженный индекс по ORDER BY отсекает лишние гранулы, читается минимум данных с диска.', 'SELECT\n event_type,\n count() AS cnt,\n avg(duration_ms) AS avg_ms\nFROM events\nWHERE event_date >= today() - 30\nGROUP BY event_type\nORDER BY cnt DESC;', 'Тяжёлые GROUP BY и JOIN требуют памяти. Ограничьте потребление на запрос, чтобы один отчёт не съел всю RAM сервера. Значения задаются в users.xml или на сессию.', 'SET max_memory_usage = 4000000000; -- 4 ГБ на запрос\nSET max_threads = 4;']
Диск, железо и типичные ошибки
['ClickHouse активно пишет и сливает куски данных на диск, а аналитические запросы сканируют гигабайты — скорость диска критична. AMD EPYC + NVMe у MAATRIX дают высокие IOPS и пропускную способность, поэтому фоновые merge и сканы идут быстро, а не упираются в диск. Сжатие ClickHouse экономит место, но чем быстрее NVMe, тем больше строк в секунду вы обрабатываете. Локации UK/США, тарифы от $8/мес и оплата картой РФ, СБП, криптой или MAAT делают запуск аналитики за рубежом простым.', '- Вставка по одной строке — лавина мелких кусков и перегрузка слияний.
- Неудачный ORDER BY — индекс не помогает, запросы читают всё подряд.
- Без лимита памяти — тяжёлый GROUP BY уводит сервер в OOM.
- Ждёте UPDATE как в SQL — ClickHouse не для точечных изменений строк.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для ClickHouseЧастые вопросы
Можно ли использовать ClickHouse как основную БД приложения?
Нет, он не для транзакций и точечных изменений. ClickHouse — аналитический слой рядом с основной OLTP-базой (PostgreSQL/MySQL), куда льют события и метрики.
Сколько RAM нужно ClickHouse?
Зависит от сложности запросов. Для старта хватает 4-8 ГБ, но тяжёлые агрегации и JOIN требуют больше — ограничивайте max_memory_usage, чтобы не ловить OOM.
Почему нельзя вставлять по одной строке?
Каждая вставка создаёт отдельный кусок данных, который движок должен слить. Частые мелкие вставки перегружают фоновые merge. Используйте батчи или async_insert.