Різниця між загостренням та тиражуванням на MongoDB


77

Я просто плутаю Шардінг і Реплікацію про те, як вони працюють .. Відповідно до визначення

Реплікація: Набір реплік у MongoDB - це група процесів монгода, які підтримують той самий набір даних.

Шардінг: Шардінг - це метод зберігання даних на декількох машинах.

Як я розумію, якщо є дані 75 ГБ, то шляхом реплікації (3 сервери), вона зберігатиме 75 ГБ даних на кожному сервері, означає 75 ГБ на сервері-1, 75 ГБ на сервері-2 і 75 ГБ на сервері-3 .. (виправте мене якщо я помиляюсь) .. і, посилюючи його, вони будуть зберігатися як дані 25 ГБ на сервері-1, дані 25 Гб на сервері-2 і дані 25 ГБ на сервері-3. (Так?) ... але тоді я зіткнувся з цим рядком у навчальний посібник

Шарди зберігають дані. Щоб забезпечити високу доступність та узгодженість даних, у кластеризованому виробництві кластери кожен фрагмент є набором реплік

Оскільки набір реплік становить 75 Гб, але осколок становить 25 ГБ, то як вони можуть бути еквівалентними ... це змушує мене заплутатися багато ... Я думаю, що я пропускаю щось велике в цьому. Будь ласка, допоможіть мені в цьому.

Відповіді:


111

Replica-Set означає , що у вас є кілька примірників MongoDB , які кожне дзеркало все дані один одного. Набір реплік складається з одного головного (також званий "первинний") і одного або декількох рабів (також вторинних). Операції зчитування можуть обслуговуватися будь-яким підлеглим, тому ви можете збільшити продуктивність читання, додавши більше рабів до набору реплік (за умови, що ваша клієнтська програма здатна фактично використовувати різні члени набору). Але операції запису завжди проводяться на ведучому набору реплік і потім передаються на раби, тому запис не стане швидшим, коли ви додасте більше рабів.

Репліка-набори також пропонують відмову. Коли один із членів набору реплік зійде, інші переймають його. Коли господар зійде, раби оберуть нового господаря. З цієї причини пропонується для продуктивного розгортання , щоб завжди використовувати MongoDB в якості репліки-набору , щонайменше , три сервера, два з них , які володіють даних (третя є даними менше «арбітр» , який потрібно для визначення нового господаря коли один з рабів сходить).

Sharded кластера означає , що кожен уламок кластера (який також може бути точною копією-набір) бере на себе частину даних. Кожен запит, як читання, так і запис, обслуговується кластером, де дані знаходяться. Це означає, що ефективність читання та запису можна збільшити, додавши більше клаптиків до кластеру. Який документ міститься, на якому фрагменті визначається ключ осколка кожної колекції. Його слід вибирати таким чином, щоб дані могли бути рівномірно розподілені по всіх кластерах, і щоб вони були зрозумілими для найпоширеніших запитів, де знаходиться ключ-осколок (наприклад: коли ви часто запитуєте user_name, ваш ключ-ключ повинен містити поле, user_nameтому кожен запит може бути делегований лише одному фрагменту, який містить цей документ).

Недоліком є ​​те, що страждає відмова. Коли один фрагмент кластера знижується, будь-які дані про нього недоступні. З цієї причини кожен член кластеру також повинен бути набором реплік. Це не потрібно. Якщо ви не переймаєтесь високою доступністю, осколок також може бути одним екземпляром mongod без тиражування . Але для виробничого використання завжди слід використовувати реплікацію .

То що це означає для вашого прикладу?

                            Sharded Cluster             
             /                    |                    \
      Shard A                  Shard B                  Shard C
        / \                      / \                      / \
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+
|Primary| |Secondary|    |Primary| |Secondary|    |Primary| |Secondary|
|  25GB |=| 25GB    |    | 25 GB |=| 25 GB   |    | 25GB  |=| 25GB    |   
+-------+ +---------+    +-------+ +---------+    +-------+ +---------+

Коли ви хочете розділити свої дані об'ємом 75 ГБ на 3 фрагменти по 25 ГБ кожна, вам потрібно щонайменше 6 серверів баз даних, організованих у три набори реплік. Кожен набір реплік складається з двох серверів, які мають однакові 25 ГБ даних.

Вам також потрібні сервери для арбітрів трьох реплік-наборів, а також маршрутизатор mongos та сервер config для кластера. Арбітри дуже легкі і потрібні лише тоді, коли член набору реплік опуститься, тому вони можуть спільно використовувати одне і те ж обладнання з чимось іншим. Але маршрутизатор і конфігураційний сервер Mongos повинні бути надлишковими і на власних серверах.


2
Велике спасибі за детальну відповідь ... ще одне запитання ... якщо основний не працює під час операції запису чи читання, то ... 1) яка затримка у виборі первинного з вторинних та 2) під час цієї затримки, де дані будуть тимчасово зберігатися?
Саад Сааді

4
@SaadSaadi Основний процес виборів описаний у документації . Потрібно від 10 до 12 секунд, щоб вторинники помітили, що основний не працює. Самі первинні вибори зазвичай займуть лише мілісекунди. Набір реплік є лише для читання, поки немає основного. Будь-які спроби додатків записати дані протягом цього часу не зможуть.
Філіпп

1
@Philipp: Лише два коментарі: (1) ключ осколки неможливо змінити (тобто ви не можете опублікувати за допомогою іншого ключа) та (2) ви можете читати із вторинних вузлів набору реплік, але послідовність залежить від проблеми запису (у щоб послідовність варіанту w повинна дорівнювати набору реплік sth, який нежиттєздатний, оскільки кожен фрагмент може мати різний розмір набору реплік навмисно або через збої вузла).
Майк Аргіріу

@Philipp, чи можете ви відповісти на подальші запитання на dba.stackexchange.com/questions/208482/… ?
користувач3198603

18
  • Шардування розділів набір даних на дискретні частини.
  • Реплікація копіює набір даних.

Ці дві речі можуть складатись, оскільки вони різні. Використовуючи обидва засоби, ви розподілите набір даних по декількох групах реплік. По-іншому, ти повторюєш черепки; набір даних без осколків - це один "осколок".

Скупчення Монго з трьома черепками та 3-ма репліками матиме 9 вузлів.

  • 3 набори 3-вузлових реплік.
  • Кожен набір реплік містить один фрагмент.

Чи зберігається він для одного великого файлу в одному фрагменті або в декількох фрагментах (таким чином, через вузли)?
Тоні

Зауважте, що в MongoDB 3.4 або новішої версії вам також знадобляться сервери mongoDB для конфігурації та додатковий сервер, щоб діяти як маршрутизатор mongos. Це приводить загальний кластер 3x3 у вашому прикладі до 13 серверів.
dthrasher

9

За сегментації , ви поділяєте свою колекцію на кілька частин.
Реплікація вашої бази даних означає, що ви створюєте дзеркала вашого набору даних.


4

З точки зору функціональності, що поставляється. Шардінг забезпечує масштабованість і паралельність. Реплікація забезпечує доступність


ні, реплікація лише забезпечує масштабність та паралелізм, враховуючи, що читання набагато частіше, ніж пише
Крістоф Шалай
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.