MongoDB Sharding + Репликация - PullRequest
       25

MongoDB Sharding + Репликация

0 голосов
/ 22 октября 2018

Я новичок в MongoDB и пытаюсь понять, как эти две технологии работают вместе:

При использовании репликации для вашей базы данных у вас есть основной узел и несколько вторичных серверов.Чтобы обеспечить согласованность, рекомендуется всегда читать с основного узла, верно?

Так что, когда вы используете репликацию с сегментированием для примера: у вас есть 2 реплики r1 и r2 на разных серверах, раздел создаетсяидентификатор от 1 до 250 и 2 шарда, шард 1 с 1 - 125 и шард 2 с 126 - 250.

Теперь мои вопросы: теперь при использовании разбиения с шардингом это означает, что каждый шард имеет свой собственный основной узел?Таким образом, при чтении информации из документа с идентификатором 130 сначала необходимо выяснить, где находится первичный узел из сегмента 2?

Например: у r1 есть первичный узел для 1-125 и вторичный для 126-250

r2 имеют первичный узел для 126-250 и второстепенный для 1-125

Это правильно?

Каждая реплика по-прежнему хранит полную информацию базы данных?

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 22 октября 2018

При использовании репликации для вашей базы данных у вас есть основной узел и несколько вторичных серверов.Для обеспечения согласованности рекомендуется всегда читать с основного узла, верно?

Ответы - да и нет.Да, обычно вы читаете с первичного узла, но если вы читаете с вторичного узла, это немного задерживает, но результат почти такой же, как у первичного

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

Теперь мои вопросы: при использовании разбиения с использованием шардинга теперь это означает, что каждый шард имеет свой собственный основной узел?

Да

Таким образом, при чтении информации из документа с идентификатором 130 сначала необходимо выяснить, где находится первичный узел из сегмента 2?

Нет, когда вы подключаетесь к кластеру, вы должны подключиться через mongos https://docs.mongodb.com/manual/reference/program/mongos/ Он сделает все за вас, найдя, какой сегмент содержит ваши данные, основной узел и т. Д. С mongos вы работаете с кластером, какsingle db.

Единственное, что вам следует позаботиться о производительности, которую вы должны прочитать и понять о сборе осколков и ключе осколка https://docs.mongodb.com/manual/core/sharding-shard-key/

Например: r1 имеет основной узел для1-125 и среднее для 126-250.У r2 есть основной узел на 126-250 и второстепенный на 1-125.Это правильно?

-> Неверно, данные разделены ключом шарда, подробнее см. Выше.В этом случае, если вы используете идентификатор (1 - 250) для ключа шарда.

  • r1 будет содержать от 1 до 125 как на первичном, так и на вторичном (вторичный является резервным для первичного, который первичный будет клонирован на вторичный)
  • r2 будет содержать 126 - 250 в обоих первичныхи вторичные тоже (для детализации r2 первичные содержат 126 - 250, вторичные тоже содержат 126 - 250. Вторичный узел является зеркалом первичного узла)

Каждая реплика все еще хранит полную информацию базы данных?

Нет, только основной шард содержит полную информацию о базе данных (https://docs.mongodb.com/manual/core/sharded-cluster-shards/#primary-shard) Каждый набор реплик содержит часть коллекции шардов, которая определяется ключом шарда. Коллекция шардов - это большая таблица, на которую вы хотите разделитьнесколько машин для улучшения производительности

...