MAATRIX / Блог / VPS для ClickHouse: аналитическая СУБД на своём сервере

VPS для ClickHouse: аналитическая СУБД на своём сервере

Блог MAATRIX · 2026-07-07

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.