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.
- Sharding Introduction. Архів оригіналу за 5 червня 2015. Процитовано 11 травня 2015.
- Університет MongoDB з безкоштовними онлайн курсами. Архів оригіналу за 7 травня 2015. Процитовано 11 травня 2015.
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до прийнятих рекомендацій. |