Компания Momentic, разработчик платформы для тестирования ПО на основе AI, перешла с PostgreSQL на ClickHouse, увеличив свой производственный потенциал до 2 миллионов запросов в день с задержкой в 250 миллисекунд.
Проблема с масштабированием PostgreSQL
Переход был вызван ростом числа записей в системе кэша — с 80,000 до 1 миллиарда. Как следствие, PostgreSQL столкнулся с ограничениями по производительности из-за высокой нагрузки на запись и чтение, что приводило к повышенному использованию ресурсов и блокировкам процессов.
На момент начала миграции Momentic обрабатывала около 600,000 запросов к кэшу в день с необходимостью получения результатов менее чем за секунду. Основное преимущество ClickHouse заключается в использовании разреженных первичных индексов, что позволяет значительно сократить расходы на запросы при увеличении объёма данных.
Методы оптимизации и достижения
Следуя новой архитектуре, Momentic оптимизировала структуру первичного ключа, что позволило ускорить поиск данных в 90% случаев. С переходом на ClickHouse также удалось сократить общее количество запросов при выполнении тестов — вместо трёх запросов в PostgreSQL используются только операции вставки с использованием механизма ReplacingMergeTree в ClickHouse.
Параллельно команда сохраняла поток данных в обе системы, что обеспечивало высокую степень доверия к новым данным, прежде чем полностью переключилась на ClickHouse. Это позволило избежать ситуации с потерей данных и обеспечить плавный переход для пользователей.
Выводы для разработчиков
Для российских разработчиков переход на ClickHouse может стать хорошей практикой в случае, если текущая система не справляется с растущей нагрузкой. Оптимизация запросов и использование современных технологий могут не только повысить производительность, но и снизить затраты на инфраструктуру. Важно учитывать, что миграция требует тщательного планирования и тестирования, чтобы минимизировать риски.
Следующий шаг для Momentic — продолжение работы с ClickHouse с акцентом на расширение функционала и повышения эффективности обработки запросов.