Как шардировать конкурентную map по ключу

Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.

Короткий ответ

Что ответить на собеседовании

Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.

Подробный разбор

Ответ с пояснениями

Условие

Одна защищённая mutex map стала точкой конкуренции в Go. Нужны Get и Set по строковому ключу. Как разделить её на N шардов и какие операции усложнятся?

Ответ

Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.

Создайте все карты заранее и не меняйте N без процедуры переноса данных. Для операций над несколькими шардами установите общий порядок locks, чтобы избежать дедлоков. Размер и обход всей структуры не становятся автоматически атомарными. Шардирование помогает только при распределённых ключах; один горячий ключ всё равно останется узким местом.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее