Войти Регистрация
Data base

103. Рейтинг подов по нагрузке на MySQL

Средняя

MySQL · MySQL 8.4.6

В Shopify у каждого пода свой шард MySQL, магазины распределены по подам по shop_id. Со временем самый загруженный и самый лёгкий шард разошлись почти в 4 раза — магазины пришлось переносить.

pods — поды, shops — в каком поде магазин, shop_load — сколько секунд БД магазин потратил за день. Для каждого пода из pods верните pod_id, shops — число магазинов, load_sec — сумму db_seconds за октябрь 2025 (0, если нагрузки нет), load_rank — место по load_sec по убыванию через RANK(): равные делят место, следующее место пропускается.

Порядок — по load_rank, затем по pod_id.

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

Как проверяем Движка MySQL в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите все верные варианты (одна лишняя отметка допустима). После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
оконные функцииLEFT JOINGROUP BYдатыNULL

Источник: кейс Shopify: балансировка шардов MySQL между подами, 2021. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какие запросы вернут рейтинг подов за октябрь 2025?

  • COUNT(sh.shop_id) без DISTINCT
  • Фильтр по дате в ON, COUNT(DISTINCT), RANK()
  • Фильтр по дате в WHERE
  • Коррелированные подзапросы и ранг через COUNT большего
  • MONTH(l.day) = 10