Sharding (MongoDB)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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.