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

244. Зачем 1600 шардов на восьми серверах

Средняя

MySQL · MySQL 8.4

В конце 2011 года Dropbox разбил базу MySQL на 1600 шардов, хотя серверов было всего 8 — по 200 шардов на каждом. Пользователей прибавлялось около 100 миллионов в год, и позже та же база жила уже на 400 мастер-серверах по 4 шарда. Сверху в 2012 году построили Edgestore — хранилище, которое прячет MySQL от клиентского кода.

Шард — отдельная база MySQL, номер шарда считается из ключа один раз и навсегда: shard = hash(user_id) % 1600. Отдельная таблица маршрутизации хранит, на каком сервере живёт каждый шард.

В работе: Планирование шардирования с запасом на рост: SaaS, хранилища файлов, платёжные системы.

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

Источник: кейс Dropbox: доклад о MySQL на HighLoad++, расшифровка 2018. Условие пересказано своими словами.

Что даёт схема «много логических шардов на немногих серверах»?

  • Рост — это перенос целых шардов на новые серверы: строки не пересчитываются и не перераспределяются
  • Много мелких шардов на одном сервере быстрее обрабатывают запросы
  • Можно делать JOIN между шардами одного сервера
  • То же самое даёт shard = hash(user_id) % 8 с добавлением серверов по мере роста