MongoDB Шардинг: пошаговое руководство с примером

⚡ Умное резюме

MongoDB Шардинг разделяет большие наборы данных на более мелкие подмножества, распределенные по нескольким массивам данных. MongoDB экземпляров, что снижает нагрузку на ЦП на каждом отдельном сервере. Шардированный кластер объединяет шарды, сервер конфигурации и маршрутизатор для горизонтального масштабирования хранилища и пропускной способности запросов.

  • 🧩 Основная концепция: Шардирование разделяет одну логическую коллекцию на множество сегментов, однако запросы по-прежнему рассматривают данные как единую коллекцию.
  • ???? ️ Cluster Компоненты: Для работы шардированного кластера необходимы шарды для данных, сервер конфигурации для метаданных и маршрутизатор для передачи команд клиентам.
  • ⚙️ Процесс реализации: Запустите сервер конфигурации, запустите маршрутизатор MongoDB, добавьте шарды, затем включите шардинг для базы данных и коллекции.
  • 🔑 Ключ к фрагменту: Ключ сегментации определяет способ распределения документов, поэтому высокая кардинальность и равномерные шаблоны доступа имеют важное значение.
  • 📈 Основное преимущество: Шардинг обеспечивает горизонтальную масштабируемость, распределяя хранилище и рабочую нагрузку вместо модернизации одного сервера.

MongoDB Шардинг: пошаговое руководство с примером

Что такое шардинг MongoDB?

Шардинг — это концепция, MongoDB, который разбивает большие наборы данных на небольшие наборы данных по нескольким MongoDB экземпляров.

Иногда данные внутри MongoDB Объём данных будет настолько велик, что запросы к таким большим наборам данных могут привести к значительной загрузке процессора сервера. Для решения этой проблемы... MongoDB имеет концепцию шардинга, которая, по сути, представляет собой разделение наборов данных на несколько MongoDB экземпляров.

Эта коллекция, которая может быть довольно обширной, на самом деле разделена на несколько отдельных коллекций, или, как их называют, Осколков. Логично предположить, что все Осколки функционируют как одна коллекция.

Преимущества шардинга в MongoDB

Перед внедрением шардированного кластера полезно понять, почему команды выбирают шардинг. Основные преимущества:

  • Горизонтальная масштабируемость: Данные распределяются по множеству стандартных серверов, вместо того чтобы заставлять одну машину постоянно увеличивать свои размеры.
  • Более высокая пропускная способность: Операции чтения и записи выполняются параллельно на разных сегментах, поэтому кластер обрабатывает больше запросов в секунду.
  • Увеличенная емкость хранения: Объединенный дисковый объем всех сегментов может вместить наборы данных, значительно превышающие объем данных, хранящихся на одном сервере.
  • Высокая доступность: Когда каждый сегмент развернут как набор реплик, отказ одного узла не приводит к остановке кластера.
  • Сбалансированная нагрузка: MongoDB Балансировщик автоматически перераспределяет фрагменты данных, чтобы предотвратить превращение какого-либо одного сегмента в «горячую точку».

В совокупности эти преимущества делают шардинг стандартным подходом к масштабированию. MongoDB за пределами возможностей одного сервера.

Как реализовать шардинг

Шарды реализуются с помощью кластеров, которые представляют собой не что иное, как группу MongoDB экземпляров.

В состав Shard входят следующие компоненты:

  1. Осколок – Это основная вещь, и это не что иное, как MongoDB экземпляр, который содержит подмножество данных. В производственных средах все сегменты должны быть частью наборов реплик.
  2. Сервер конфигурации - Это MongoDB экземпляр, который содержит метаданные о кластере, в основном информацию о различных MongoDB экземпляры, которые будут хранить данные осколков.
  3. Маршрутизатор - Это 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 Первичные и вторичные члены

Вкратце, шардинг отвечает потребности в масштабируемости, а репликация — потребности в доступности, и надежное развертывание сочетает в себе оба подхода.

Часто задаваемые вопросы (FAQ)

Да. Инструменты искусственного интеллекта могут анализировать шаблоны запросов и кардинальность полей, чтобы предлагать потенциальные ключи для сегментирования и предупреждать о монотонных полях. Поскольку ключ сложно изменить позже, перед его применением следует проверить любую рекомендацию на реальных рабочих нагрузках.

Да. Мониторинг на основе ИИ может tracРост объема данных, загрузка ЦП и задержка запросов позволяют прогнозировать, когда отдельный сервер будет перегружен. Это указывает на подходящий момент для сегментирования, хотя инженерам следует подтвердить планы по распределению ресурсов, прежде чем предпринимать какие-либо действия.

Диапазонное сегментирование разбивает данные на смежные диапазоны значений, что подходит для запросов по диапазонам, но сопряжено с риском неравномерного распределения данных. Хэшированное сегментирование использует хэширование для равномерного распределения операций записи по сегментам, улучшая распределение записи за счет снижения эффективности сканирования диапазонов.

Да. Включите сегментирование базы данных, убедитесь, что индекс существует по выбранному ключу сегментирования, затем выполните sh.shardCollection() для пространства имен. MongoDB Начинает автоматически распределять существующие документы по доступным сегментам, разбивая их на фрагменты.

Подведем итог этой публикации следующим образом: