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

У нас есть 2 сервера осколков mongo db (3 набора реплик на каждом).

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

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

splitChunk не может найти фрагмент [{articleId: MinKey, sessionId: MinKey}, {articleId: «59830791», sessionId: «fb0ccc50-3d6a-4fc9-aa66-e0ccf87306ea»}) для разделения, границы фрагментов могут быть устаревшими

Причина, указанная в журнале, - это возможный ключ шарда с низкой мощностью

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

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

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

Ключ осколка: - (pageid) и (уникальный readerid)

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

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

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

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

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

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
181
1

Ответы 1

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

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

We did one more test and stopped balancer again in this test, data was going in both shards even balancer was off (pageIds were reader ids which are repeated from old tests along with some new ids for both)

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

Другие вопросы по теме