Ключ преобразуется с помощью хэш функции. F(key) -> shard_id
По хэшу определяется шард
Плюсы:
Равномерное и алгоритмическое распределение.
Минусы:
Добавление/удаление шарда всегда боль. Так как хэш функция начинает возвращать другие результаты даже для уже имеющихся данных.
Популярные формулы хэширования:
Если ключ цифровой, то можно просто поделить его на количество серверов, получив остаток от деления. Если это строка, то можно взять хэш функцию, которая даст число и уже его делить на количество серверов.