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

Основні Компоненти Sharded Cluster

ред.

Шарди

ред.

Шард (Shard) - це екземпляр MongoDB, що містить підмножину даних колекції. Кожен shard являє собою повторюючу копію (Replica Set).

Сервери конфігурації

ред.

Кожен сервер конфігурації тримає в собі метадані про кластер. Тобто те, яким чином дані розкидані по шардах.

Query Routers

ред.

Це екземпляри mongos які надають інтерфейс додатку. Один такий маршрутизатор приймає запити і віддає результат. Mongos одночасно зв`язує декілька шардів. У великих кластерах для пониження навантаження може бути декілька таких маршрутизаторів.

Розбиття даних

ред.

MongoDB розподіляє дані, або шарди, на рівні колекції. Sharding розбиває колекцію даних по шард-ключу( Shard key).

Shard Keys

ред.

Для того, щоб розбити колекцію треба вибрати shard key. Shard key - це спеціальне індексоване поле або комбінація з декількох полів які в поєднанні є унікальними і існують в кожному документі. MongoDB розподіляє значення shard key на чанки (chunks) а ті в свою чергу на шарди. Для розділення значень шард-ключів на чанки MongoDb використовує розділення базоване на хеші і розділення базоване на інтервалі.

Розділення базоване на хеші

ред.

Для розділення по хешу, MongoDB вираховує хеш для значення якогось поля і використовує його для того, щоб утворити шарди.

Розділення базоване на інтервалі

ред.

Для розділення по інтервалу, MongoDB розділяє множину даних на проміжки визначені значеннями shard key. Для прикладу візьмемо чисельний shard key: якщо його візуалізувати то це проміжок від +безкінечності до -безкінечності, кожне значення шард-ключа це точка на прямій. MongoDB розділяє цю лінію на менші проміжки які пізніше стають шардами.

Підтримання збалансованого розподілу даних

ред.

Додавання нових даних чи додавання нових серверів може спричинити дисбаланс в кластері, деякі шарди можуть стати значно "важчими" за решту.

MongoDB впровадили два фонові процеси: розбивання і балансування.

Розбивання

ред.

Розбивання - це фоновий процес який контролює розмір шардів. Коли один блок перевищує встановлені в конфігураційному сервері розміри mongo його розбиває на менші шарди. При чому спрацьовують тригери і автоматично оновлюються метадані конфігураційних серверів.

Балансування

ред.

Балансування - фоновий процес який відповідає за переміщення блоків даних(chunks). Балансування може бути запущене з будь-якого query router'а в кластері. Коли в одному шарді накопичується багато блоків то ці блоки переміщуються до інших шардів. Наприклад: Якщо відношення Користувачі має 100 блоків на shard 1 і 50 блоків на shard 2, то балансувальник змістить частину блоків з першого на другий шард.

Посилання

ред.
  • Офіційний сайт MongoDB. Архів оригіналу за 5 травня 2016. Процитовано 13 травня 2022.