Горячая база уменьшена в 45 раз — платежи не останавливались · Codelabs
RU|EN|KK
← Все кейсы
CASE 02Перенос истории в колоночное хранилище

Горячая база уменьшена в 45 раз — платежи не останавливались

Денежный журнал разросся до сотен миллионов строк, и всё, что с ним работало, начинало тормозить. Мы оставили в основной базе одни сутки вместо сорока пяти, а всю историю отправили в отдельное хранилище — потоком, с задержкой в секунды. Каждый отчёт переводили на новое чтение по одному, маленькими релизами, и на каждом шаге сверяли старый ответ с новым: расхождение должно было быть нулевым. Так и вышло.

ДанныеMariaDBClickHouse

Как это устроено

Переключение делали не одним релизом, а серией маленьких: каждый читатель денежного журнала переводился на новое чтение отдельно, под рантайм-переключателем, с возможностью мгновенно вернуть старый путь.

Приёмка каждого шага — сравнение «старый путь против нового» на боевых данных с требованием нулевого расхождения. Попутно пришлось решить три неочевидные задачи: классификацию строк-надгробий, фильтрацию легаси-свёрток и общий канон часовых поясов между MySQL и ClickHouse.

Данные едут в колоночное хранилище потоком из журнала репликации, задержка измеряется секундами. Горячая база держит сутки вместо сорока пяти дней, история доступна целиком, платежи не останавливались ни на минуту.

В цифрах

  • ·горячая база: 1 сутки вместо 45 дней
  • ·история сохранена целиком
  • ·сверка на каждом шаге: расхождение 0.00
  • ·платежи не останавливались

Опишите задачу — ответим, что из неё у нас уже построено