Как работает балансировщик Mon go в отношении ключа хешированного осколка - PullRequest
0 голосов
/ 11 января 2020

Это хорошо известная концепция балансировки данных между узлами, и она четко описана в руководстве . Как работает балансировщик в отношении фрагментов хэшированных осколков? Можете ли вы перенести чанк, если в соответствии с ключом осколка документы из этого чанка принадлежат этому осколку? Если это не так, то почему документы находятся в осколке, к которому они не принадлежат? Или балансировщик не имеет значения для хешированного ключа осколка, если количество осколков не меняется?

1 Ответ

0 голосов
/ 13 января 2020

Хешированный ключ шарда по-прежнему работает как обычный ключ шарда на основе диапазона. Их также можно перенести, разделить и т. Д. c. точно так же, как обычный ключ шарда.

Разница в том, что хэшированный ключ шарда имеет некоторый дополнительный процесс при первоначальном шардинге коллекции. Перефразируя со страницы документов на Хэширование шардинга :

При экранировании заполненной коллекции:

Операция шардинга создает начальные блоки для покрытия весь диапазон значений ключа шарда Количество созданных чанков зависит от настроенного размера чанков.

При разбиении пустой коллекции:

Операция разбиения создает пустые чанки, охватывающие весь диапазон сегмента. ключевые значения и выполняет начальное распределение порции. По умолчанию операция создает 2 фрагмента для каждого сегмента и перемещается по кластеру.

Короче говоря, сегментированный хэшированный фрагмент предварительно разбивает все хешированное пространство ключей, а затем балансировщик перемещает фрагменты по кластеру, как обычно.

Кроме начальных разбиений на фрагменты, они функционируют так же, как обычный ключ шарда.

Обратите внимание, что хешированный ключ шарда может помочь, если ваш ключ шарда монотонно увеличивается, чтобы предотвратить «горячий шард» и Помогите распространить ваши записи по всему кластеру. Использование хешированного ключа шарда не является гарантией того, что у вас не может быть больших фрагментов, поскольку мощность хешированного ключа будет отражать мощность фактического ключа.

Например: если предположить, что алгоритм ha sh MD5 (размер 128 бит). Потенциально, пространство MD5 очень большое. Однако, если значение основного ключа (не хэшированное) может быть только A или B, эти два хэширования с MD5 всегда приведут к A -> bf072e9119077b4e76437a93986787ef и B -> 30cf3d7d133b08543cb6c8933c29dfd7, что сделает количество элементов чрезвычайно малым.

...