Шардирование коллекций MongoDB

Шардирование в Managed Service for MongoDB доступно для кластеров с версией MongoDB не ниже 4.0. Если ваш кластер развернут с версией 3.6, вы можете обновить его.

Также стоит учесть, что шардирование кластера Managed Service for MongoDB происходит с автоматическим созданием служебных хостов mongos и mongocfg, которые тарифицируются отдельно от основных хостов СУБД.

Предупреждение

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

Шардирование коллекций имеет смысл, когда распределение по шардам поможет существенно улучшить производительность СУБД или доступность данных. Для повышения доступности каждый шард рекомендуется составлять из 3 и более хостов БД.

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

Распределять по шардам стоит:

  • Данные значительного объема: задуматься стоит при объеме коллекции от 200 ГБ.
  • Коллекции с неоднородным содержанием: например, данные можно четко разделить на часто и редко запрашиваемые.
  • Коллекции с высокими требованиями к скорости чтения и записи данных: шардирование поможет распределить нагрузку по хостам, чтобы обойти технические ограничения.

Подробнее о концепции шардирования читайте в разделе Шардирование.

Как включить шардирование коллекций

  1. Перейдите на страницу нужного кластера Managed Service for MongoDB в консоли управления.

  2. Перейдите на вкладку Шарды и нажмите кнопку Включить.

  3. Укажите класс хоста, тип и размер хранилища, а также подсети для хостов шарда (mongocfg и mongos).

  4. Подключитесь к хосту mongos с помощью CLI mongo и включите шардирование:

    sh.enableSharding(<имя базы>)
    
  5. Задайте индекс в шардированной коллекции:

    db.<имя базы>.ensureIndex( { "<индекс>": "hashed" } )
    
  6. Включите шардирование коллекции:

    sh.shardCollection( "<коллекция>", { "<индекс>": "hashed" } )
    

    Подробное описание команды shardCollection см. в документации MongoDB.

  7. Переключите приложения, которые используют вашу базу данных, на использование исключительно хостов mongos.

Документация MongoDB рассказывает о решениях проблем шардирования:

  • О механизме шардирования в общем: Sharding.
  • О выборе ключа шардирования и стратегиях шардирования: Shard Keys.

Пример шардирования

Допустим, у вас уже есть кластер Managed Service for MongoDB с шардами и базой данных billing. Необходимо включить шардирование для коллекций payment и addresses. Для примера в качестве ключа шардирования используется хэш индекса для payment и значение поля addresses.

Последовательность операций:

  1. Подключитесь к базе.

  2. Включите шардирование для базы billing:

    sh.enableSharding("billing")
    
  3. Определите индекс в шардированной коллекции:

    db.payments.ensureIndex( { "_id": "hashed" } )
    
  4. Создайте необходимое количество шардов в консоли управления.

  5. Задайте шардирование для коллекции с учетом ее пространства имен:

    sh.shardCollection( "billing.payments", { "_id": "hashed" } )
    

После этого шардирование будет включено и настроено. Чтобы убедиться в этом, попробуйте вывести список доступных шардов с помощью команды db.adminCommand( { listShards: 1 } ).