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 повинні бути надлишковими і на власних серверах.