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

102. Запросы, которые пересекают схемы-домены

Средняя

MySQL · MySQL 8.4.6

В 2019 году основной кластер GitHub mysql1 держал около 950 тысяч запросов в секунду. Чтобы его разрезать, таблицы разбили на схемы-домены, а линтер стал ловить запросы, которые трогают таблицы из разных доменов.

schema_domains — какой таблице какой домен назначен. queries — тексты запросов, query_tables — какие таблицы трогает запрос (строка может повторяться). Таблица без записи в schema_domains считается доменом unassigned. Запросы с комментарием cross-schema-domain-query-exempted линтер пропускает.

Верните query_id, domains — домены через запятую по алфавиту без повторов, n_domains — сколько их. Только запросы с двумя доменами и больше, по возрастанию query_id.

В работе: Подготовка к разрезанию монолитной БД: список мест в коде, которые сломаются, когда домены уедут в разные кластеры.

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

Источник: кейс GitHub: разделение кластера mysql1 на схемы-домены, 2021. Условие пересказано своими словами.

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

Какие запросы вернут список запросов, пересекающих домены?

  • INNER JOIN schema_domains
  • COUNT(*) вместо COUNT(DISTINCT …)
  • LEFT JOIN, COALESCE и COUNT(DISTINCT …)
  • Без фильтра по комментарию
  • Сначала пары (запрос, домен) через DISTINCT, потом GROUP BY