MongoDB Шардинг: пошаговое руководство с примером
⚡ Умное резюме
MongoDB Шардинг разделяет большие наборы данных на более мелкие подмножества, распределенные по нескольким массивам данных. MongoDB экземпляров, что снижает нагрузку на ЦП на каждом отдельном сервере. Шардированный кластер объединяет шарды, сервер конфигурации и маршрутизатор для горизонтального масштабирования хранилища и пропускной способности запросов.
Что такое шардинг MongoDB?
Шардинг — это концепция, MongoDB, который разбивает большие наборы данных на небольшие наборы данных по нескольким MongoDB экземпляров.
Иногда данные внутри MongoDB Объём данных будет настолько велик, что запросы к таким большим наборам данных могут привести к значительной загрузке процессора сервера. Для решения этой проблемы... MongoDB имеет концепцию шардинга, которая, по сути, представляет собой разделение наборов данных на несколько MongoDB экземпляров.
Эта коллекция, которая может быть довольно обширной, на самом деле разделена на несколько отдельных коллекций, или, как их называют, Осколков. Логично предположить, что все Осколки функционируют как одна коллекция.
Преимущества шардинга в MongoDB
Перед внедрением шардированного кластера полезно понять, почему команды выбирают шардинг. Основные преимущества:
- Горизонтальная масштабируемость: Данные распределяются по множеству стандартных серверов, вместо того чтобы заставлять одну машину постоянно увеличивать свои размеры.
- Более высокая пропускная способность: Операции чтения и записи выполняются параллельно на разных сегментах, поэтому кластер обрабатывает больше запросов в секунду.
- Увеличенная емкость хранения: Объединенный дисковый объем всех сегментов может вместить наборы данных, значительно превышающие объем данных, хранящихся на одном сервере.
- Высокая доступность: Когда каждый сегмент развернут как набор реплик, отказ одного узла не приводит к остановке кластера.
- Сбалансированная нагрузка: MongoDB Балансировщик автоматически перераспределяет фрагменты данных, чтобы предотвратить превращение какого-либо одного сегмента в «горячую точку».
В совокупности эти преимущества делают шардинг стандартным подходом к масштабированию. MongoDB за пределами возможностей одного сервера.
Как реализовать шардинг
Шарды реализуются с помощью кластеров, которые представляют собой не что иное, как группу MongoDB экземпляров.
В состав Shard входят следующие компоненты:
- Осколок – Это основная вещь, и это не что иное, как MongoDB экземпляр, который содержит подмножество данных. В производственных средах все сегменты должны быть частью наборов реплик.
- Сервер конфигурации - Это MongoDB экземпляр, который содержит метаданные о кластере, в основном информацию о различных MongoDB экземпляры, которые будут хранить данные осколков.
- Маршрутизатор - Это MongoDB Этот экземпляр, по сути, отвечает за перенаправление команд, отправляемых клиентом, на соответствующие серверы.
Пошаговое шардинг Cluster Пример
Шаг 1) Создайте отдельную базу данных для сервера конфигурации.
mkdir /data/configdb
Шаг 2) Запустите MongoDB Экземпляр в режиме конфигурации. Предположим, у нас есть сервер с именем Server D, который будет нашим сервером конфигурации. Нам потребуется выполнить следующую команду, чтобы настроить сервер как сервер конфигурации.
mongod --configdb ServerD:27019
Шаг 3) Запустите экземпляр mongos, указав сервер конфигурации.
mongos --configdb ServerD:27019
Шаг 4) В командной оболочке mongo подключитесь к экземпляру mongos.
mongo --host ServerD --port 27017
Шаг 5) Если вам необходимо добавить в кластер серверы A и B, выполните следующие команды.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Шаг 6) Включите сегментирование базы данных. Чтобы сегментировать базу данных Employeedb, выполните следующую команду.
sh.enableSharding("Employeedb")
Шаг 7) Включите сегментирование для коллекции. Например, если вам нужно сегментировать коллекцию Employee, выполните следующую команду.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Как выбрать ключевой фрагмент в MongoDB
Ключ сегментации — это индексированное поле или набор полей, которые MongoDB Ключ используется для определения того, в каком сегменте будет храниться каждый документ. Поскольку ключ определяет распределение данных, его правильный выбор является важнейшим решением в сегментированной системе. Неправильный ключ концентрирует данные и трафик в одном сегменте, сводя на нет преимущества сегментирования.
Надежный ключ для сегментирования данных обычно обладает следующими характеристиками:
- Высокая кардинальность: Поле должно содержать множество возможных значений, чтобы данные можно было разбить на множество детализированных фрагментов.
- Низкая частота: Ни одно значение не должно доминировать, иначе документы, разделяющие это значение, будут накапливаться в одном фрагменте.
- Немонотонное изменение: Ключи, которые постоянно увеличиваются, например, метки времени, отправляют каждую новую запись в один и тот же сегмент, создавая «горячую точку».
MongoDB Поддерживаются две стратегии сегментирования на основе ключа. Сегментирование по диапазонам разделяет данные на смежные диапазоны и подходит для запросов по диапазонам, в то время как хешированное сегментирование использует хеш-функцию для равномерного распределения операций записи по сегментам. Команды часто начинают с хешированного сегментирования, когда операции записи являются интенсивными, и переключаются на сегментирование по диапазонам, когда преобладают операции чтения по диапазонам. Независимо от выбранной стратегии, перед окончательным утверждением протестируйте ключ на реалистичных шаблонах запросов, поскольку ключ сегментирования нельзя легко изменить после загрузки данных.
Шардинг против репликации в MongoDB
Шардинг и репликация — это взаимодополняющие, но различные функции. В таблице ниже показаны различия, чтобы вы могли правильно применять каждую из них, а на практике в производственных кластерах используются обе функции одновременно.
| Аспект | Sharding | копирование |
|---|---|---|
| Цель | Масштабирование по горизонтали путем разделения данных. | Защитите данные и обеспечьте их доступность. |
| Данные на каждом узле | Подмножество (один фрагмент) данных | Полная копия данных |
| Основное преимущество | Больше места для хранения и большей пропускной способности | Отказоустойчивость и масштабирование чтения |
| Ключевые компоненты | Шарды, сервер конфигурации, маршрутизатор MongoDB | Первичные и вторичные члены |
Вкратце, шардинг отвечает потребности в масштабируемости, а репликация — потребности в доступности, и надежное развертывание сочетает в себе оба подхода.

