Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.
Как шардировать конкурентную map по ключу
Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Одна защищённая mutex map стала точкой конкуренции в Go. Нужны Get и Set по строковому ключу. Как разделить её на N шардов и какие операции усложнятся?
Ответ
Выбирайте шард стабильным hash(key) % N; у каждого шарда своя map и mutex. Операция над одним ключом блокирует только его шард.
Создайте все карты заранее и не меняйте N без процедуры переноса данных. Для операций над несколькими шардами установите общий порядок locks, чтобы избежать дедлоков. Размер и обход всей структуры не становятся автоматически атомарными. Шардирование помогает только при распределённых ключах; один горячий ключ всё равно останется узким местом.