Сегодня мы обсуждали методы развертывания баз данных, у нас было несколько недавних сбоев в нашем текущем процессе и мы видели ситуации, когда мы хотели бы откатить развертывание, но старая версия приложения никогда не тестировалась на соответствие новой версии база данных.
С одной стороны, есть развертывания в стиле миграции, где у вас есть инструкция для версии и инструкция для версии (написаны ли они на SQL или на языке вашего приложения), и ваше приложение знает, к какой версии оно должно добраться.
Это просто, и поскольку мы не будем часто откатываться, разработчики стремятся к простому. Однако при добавлении поля / таблицы возникают риски, и это поле заполняется до отката. Или хуже, когда вы сбрасываете данные, которые были актуальны для предыдущей версии.
С другой стороны, мы можем рассмотреть подход к обновлению, откату, откату, когда откат не так радикальный, как в случае с миграциями. Например, обновление может добавить необнуляемое поле; откат делает его обнуляемым, так что старому приложению все равно; rollforward заполняет пустые поля и делает его снова не обнуляемым.
Он сохраняет данные, но сложен как для кода, так и для тестирования (к сожалению, наших автоматических интеграционных тестов практически не существует, и пока мы исправляем это, у нас пока есть проблема).
Существуют ли безопасные способы смягчения проблем с ними? Есть ли другие варианты, которые я должен рассмотреть? Были ли у вас плохие переживания, которыми вы хотели бы поделиться, которые могут спасти меня от боли позже?