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

Примечание

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

Шардирование коллекций имеет смысл, когда распределение по шардам поможет существенно улучшить производительность СУБД или доступность данных. Для повышения доступности каждый шард рекомендуется составлять из 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 } ).