Разница между окантовкой и репликацией на MongoDB

Я просто путаюсь с Sharding и Replication, что они работают. Согласно определению

Репликация: набор реплик в MongoDB представляет собой группу процессов mongod, которые поддерживают один и тот же набор данных.

Sharding: Sharding - метод хранения данных на нескольких компьютерах.

В соответствии с моим пониманием, если есть данные из 75 ГБ, а затем с помощью репликации (3 сервера), он будет хранить данные 75 ГБ на каждом сервере - 75 ГБ на сервере-1, 75 ГБ на сервере-2 и 75 ГБ на сервере-3. (исправьте меня, если я ошибаюсь).. и путем осколки он будет храниться как данные 25 ГБ на данных сервера-1, 25 ГБ на сервере-2 и 25 ГБ данных на сервере-3. (Правильно?)... но потом я столкнулся эта строка в учебнике

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

Поскольку набор реплик имеет размер 75 ГБ, но осколок составляет 25 ГБ, то как они могут быть эквивалентными... это заставляет меня много путать... Я думаю, что в этом нет ничего хорошего. Пожалуйста, помогите мне в этом.

Ответ 1

Давайте попробуем эту аналогию. Вы используете библиотеку.

Как и любой человек, у которого есть библиотека, у вас есть книги в библиотеке. Вы сохраняете все книги, которые у вас есть на полке. Это хорошо, но ваша библиотека стала настолько хорошей, что ваш соперник хочет ее сжечь. Поэтому вы решили сделать много дополнительных полок в других местах. Существует одна самая важная полка, и когда вы добавляете новые книги, вы быстро добавляете одни и те же книги на другие полки. Теперь, если соперник уничтожает полку - это не проблема, вы просто открываете другую и копируете ее с помощью книг.

Это репликация (просто замените библиотеку на приложение, поместите на сервер, запишите документ в коллекции, а ваш соперник - просто поврежденный жесткий диск на сервере). Он просто создает дополнительные копии данных, и если что-то пойдет не так, он автоматически выбирает другой первичный.

Эта концепция может помочь, если вы

  • хотят масштабировать показания (но они могут отставать от основного).
  • выполните некоторые автономные чтения, которые не касаются основного сервера.
  • обслуживает часть данных для определенного региона с сервера из этого конкретного региона.
  • Но основной причиной репликации является доступность данных. Итак, вы правы: если у вас есть 75 Гб данных и реплицируйте их с помощью 2 вторых - вы получите 75 * 3 Гб данных.

Посмотрите на другой сценарий. Нет конкурента, поэтому вы не хотите копировать свои полки. Но сейчас у вас другая проблема. Вы стали настолько хороши, что одной полки недостаточно. Вы решаете распространять свои книги между множеством полок. Вы решаете распространять их между полками на основе имени автора (это не очень хорошая идея и читайте, как выберите sharding key здесь). Итак, все, что начинается с имени меньше, чем К, переходит на одну полку всего, что есть К, и больше идет к другому. Это sharding.

Эта концепция может помочь вам:

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

Здесь вы частично правы. Если у вас 75Gb, то в сумме на всех серверах будет еще 75 Gb, но это не обязательно будет разделено поровну.

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

каждый осколок представляет собой набор реплик

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

Ответ 2

Ответ на ответ Саада:

Также вы можете иметь осколки и реплики вместе на одном сервере, поэтому не рекомендуется делать это. Каждый сервер должен иметь одну роль в системе. Если, например, вы решили иметь 2 осколка и повторить его 3 раза, вы получите 6 машин.

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

Ответ 3

Я пишу это как ответ, но на самом деле его вопрос к ответу Сальвадора Сэра.

Как вы сказали, что при кодировании 75 ГБ данные "могут быть" сохранены как данные на 25 ГБ на сервере-1, 25 ГБ на сервере-2 и 25 ГБ на сервере-3. (это распределение зависит от ключа Sharding)... затем, чтобы предотвратить его потерю, нам также нужно реплицировать осколок. так что это означает, что теперь каждый сервер содержит его осколки, а также репликацию других осколков, присутствующих на другом сервере.. означает, что на сервере-1 будет

1) Свой собственный осколок.

2) Репликация осколка, присутствующего на сервере-2

3) Репликация осколка, присутствующего на сервере-3

то же самое происходит с сервером-2 и сервером-3. Я прав?.. Если это так, то каждый сервер снова имеет 75 ГБ данных. Правильно или неправильно?

Ответ 4

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

r имеет осколок, а также набор реплик, тогда в этом случае сбой этого сервера приведет к потере набора реплик и осколка.

Однако у вас может быть осколок 1 и набор реплик (копия осколков 2 и осколок 3) на том же сервере, но это не рекомендуется..

Ответ 5

Sharding - это как разделение данных. Допустим, у вас около 3 ГБ данных, и вы определили 3 осколка, поэтому каждый осколок МОЖЕТ взять 1 ГБ данных (и это действительно зависит от ключа осколка) Почему нужен осколок? Поиск определенных данных из 3 ГБ в 3 раза сложнее, чем поиск в 1 ГБ данных. Таким образом, он почти похож на раздел. И осколки помогают для быстрого доступа к данным.

Теперь перейдем к реплике, скажем, что у вас есть те же 3 ГБ данных без какой-либо репликации (это означает, что существует только одна копия данных), поэтому, если что-то случится с этой машиной или диском, ваши данные исчезнут. Поэтому для решения этой проблемы используется репликация. Скажем, когда вы настраиваете БД, вы дали свою репликацию как 3, что означает, что 3 ГБ данных доступны 3 раза (поэтому общий размер может быть 9 ГБ, деленный на каждый из 3 ГБ копии). Репликация помогает при сбое.