今天,我们一直在讨论数据库部署技术,在当前的过程中最近发生了几次失败,并且看到了一些情况,在这些情况下我们希望回滚部署,但是从未对旧版本的应用程序进行过测试。数据库。
一方面,存在迁移样式的部署,其中您具有版本上升指令和版本下降指令(无论是用SQL还是用您的应用程序语言编写的),并且您的应用程序知道需要获取哪个版本。
这些很简单,而且由于我们不会经常回滚,因此开发人员热衷于简单。但是,当您添加字段/表并在回滚之前填充该字段时,存在风险。或更糟糕的是,您删除了与先前版本相关的数据。
另一方面,我们可以考虑使用升级,回滚,前滚方法,其中回滚不像迁移那样剧烈。例如,升级可能会添加一个不可为空的字段;回滚使它可以为空,以便旧应用程序不在乎;前滚会填充空字段,并使它再次不可为空。
这样可以保留数据,但是代码和测试都很复杂(遗憾的是,我们几乎不存在自动集成测试,而在我们进行纠正的同时,我们也遇到了问题)。
有安全的方法来缓解这些问题吗?我还应该考虑其他选择吗?您是否想分享一些不好的经验,这些经验可以在以后帮助我减轻痛苦?