Overview
В ранних версиях MongoDB shard key был навсегда зафиксирован после установки — не было поддерживаемого способа изменить его без удаления и пересоздания коллекции.
Современный подход (MongoDB 5.0+)
Начиная с MongoDB 5.0, доступны два варианта:
- Resharding — позволяет назначить совершенно новый shard key существующей коллекции
- Refining the shard key — позволяет добавить дополнительные поля к существующему shard key для лучшей гранулярности (доступно с MongoDB 4.4)
Нюансы resharding
Resharding — это мощная, но ресурсоёмкая операция. Ключевые моменты, которые стоит учитывать:
- Она перераспределяет все документы по шардам на основе нового ключа
- Она потребляет значительные объёмы CPU, памяти и сетевого I/O
- Коллекция остаётся доступной во время процесса, но производительность может снизиться
- Это нужно тщательно спланировать и протестировать перед выкаткой в продакшен
Лучшие практики
Поскольку resharding требует больших ресурсов, настоятельно рекомендуется:
- Тщательно выбрать shard key с самого начала — исходя из паттернов запросов и распределения данных
- Избегать ключей, которые создают hotspots (например, монотонно возрастающие значения)
- Использовать ключ с высокой кардинальностью и равномерным распределением, чтобы минимизировать необходимость будущих изменений