Сравнивайте модель данных, запросы, транзакции, масштабирование и эксплуатацию конкретных СУБД, а не только ярлыки SQL/NoSQL. MongoDB поддерживает схему на уровне приложения и валидацию, а также транзакции. Изменение структуры документов, индексов и правил чтения требует управляемой миграции даже без обязательного DDL для каждого поля.
Когда выбирать SQL или NoSQL и нужны ли миграции в MongoDB?
Выбор по модели доступа и требованиям к согласованности; почему гибкая схема MongoDB не отменяет управляемое изменение данных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Реляционная модель часто удобна при развитых связях, ограничениях целостности, соединениях и разнообразных запросах. Документная — когда данные естественно читаются и изменяются агрегатами документов. Key-value, графовые и другие NoSQL-модели решают иные задачи, поэтому объединять их в одно «быстрое бессхемное хранилище» неточно.
Сначала определите характер запросов, границы атомарности, допустимые задержки, объём, рост и требования эксплуатации. SQL не запрещает масштабирование, а NoSQL не означает автоматический отказ от согласованности или транзакций. Например, MongoDB поддерживает multi-document transactions, но их цена и ограничения всё равно требуют оценки.
Миграции MongoDB нужны. Гибкая структура хранения не отменяет ожиданий приложения. Изменение формата даты, разделение поля, добавление обязательного атрибута или индекса должно быть согласовано с читающим и пишущим кодом. Есть и schema validation, правила которой также развиваются.
Безопасный вариант перехода:
- Выпустить код, понимающий старый и новый форматы.
- Настроить запись нового формата.
- Преобразовать старые документы ограниченными повторяемыми партиями.
- Проверить результат и учесть конкурентные изменения.
- Удалить поддержку старого формата после завершения перехода.
Порядок зависит от конкретной миграции; иногда подходит ленивое преобразование при чтении. Нужны журнал версии, наблюдаемость, ограничения нагрузки и план действий при ошибке. Слово NoSQL не делает миграцию менее важной или обязательно менее формальной. Выбирают конкретный продукт и схему, исходя из требований, а не из обещания «в MongoDB миграций нет».