Оптимизация базы данных
Аудит и оптимизация базы данных и OLAP запросов для системы маркетинговой аналитики
СТЕК ТЕХНОЛОГИЙ
MariaDB | ClickHouse | Python 3
АУДИТ И ОПТИМИЗАЦИЯ
7bits, Россия, Омск
Сервис — это SaaS технология для сбора, анализа и оптимизации рекламных кампаний.

Заказчик обратился к нам с задачей оптимизировать долгие запросы к базе данных, которые мешали комфортному использованию сервиса.

Для решения этой задачи мы адаптировали существующие запросы, переместили существующие данные в БД ClickHouse и создали скрипт для импорта из MariaDB. Благодаря этому нашей команде удалось значительно увеличить скорость получения данных, используемых при отображении статистики в интерфейсе приложения.
Задачи
Аудит хранилища данных MariaDB (~2ТБ) и запросов

Импорт данных в ClickHouse

Оптимизация запросов для достижения скорости ответа в 5 секунд на данных за 6 месяцев

Реализация скрипта для инкрементального импорта данных из MariaDB в ClickHouse

Тестирование скорости на новой БД

Выдача рекомендаций для будущих оптимизаций потока данных

График отображает время в секундахпо основным запросам для получения статистических данных.

Запросы для получения статистических данных сложны тем, что подразумевают агрегирование большого количества данных, что приводит к долгому выполнению таких запросов.

Как можно видеть на графике, длительность некоторых запросов достигала почти 7 минут!

В качестве СУБД сервис использовал MariaDB.

До оптимизации
Мы провели анализ существующих запросов и приняли решение модифицировать структуру базы данных и перенести данные в более подходящую СУБД.

Для статистических данных мы решили использовать Clickhouse, что позволило значительно ускорить процесс их получения.

График отображает время в секундах по тем же запросам. Нам удалось сократить среднее время запроса до 1 секунды. Время самого долгого запроса сократилось с 7 минут до 4.5 секунд.
После оптимизации
Благодаря использованию новой структуры базы данных и Clickhouse в качестве СУБД нашей команде удалось значительно увеличить скорость получения данных, используемых при отображении статистики в интерфейсе данного приложения.
Посмотрите на другие наши проекты