Вставка данных в пустую базу данных Sharded в mongo, когда балансировщик не включен, приводит к тому, что все данные в одном шарде - PullRequest
0 голосов
/ 01 мая 2018

Нам нужно 2 сервера шардов dongo mongo (3 набора реплик каждый).

Мы создали коллекцию Sharded и вставили 200 тыс. Документов. В этом окне Balancer был отключен, и мы включили его после первого теста и снова начали вставку.

Во время первого теста все данные были вставлены в один осколок, и мы получили много предупреждений в монгологе: -

splitChunk не может найти чанк [{articleId: MinKey, sessionId: MinKey}, {articleId: "59830791", sessionId: "fb0ccc50-3d6a-4fc9-aa66-e0ccf87306ea"}) для разделения чанков. быть несвежим

Причина, указанная в журнале, возможна. Осколок кардинального ключа

После второго и третьего теста, когда балансировщик был на данных, данные были уравновешены на обоих шардах.

Мы провели еще один тест и снова остановили балансировщик в этом тесте, данные шли в обоих шардах, даже балансировщик был выключен (идентификаторы страниц были идентификаторами читателей, которые повторялись из старых тестов вместе с некоторыми новыми идентификаторами для обоих)

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

Ключ шарда: - (pageid) и (уникальный readerid)

Ниже приведена статистика вставки: -

  1. Страница прочитана длительностью 200k

  2. Уникальные идентификаторы страниц 2000

Продолжительность чтения страниц сеанса: - 70000

Заранее спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

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

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

Мы сделали еще один тест и снова остановили балансировщик в этом тесте, данные шли в обоих черепках даже балансировщик был выключен (идентификаторы страниц были идентификаторами читателей, которые повторяется из старых тестов вместе с некоторыми новыми идентификаторами для обоих)

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

...