通常,在迁移时,我们会参考数据库迁移,而大多数工具都是围绕这个想法设计的。使用这种方法,迁移仅包含直接更改数据库模式和可能数据的SQL代码。
但是,对于复杂的企业应用程序,有时SQL不足以将应用程序从以前的版本迁移到新版本。
考虑一个示例,其中应用程序中的每个用户都有一个评级,并且它是在应用程序的先前版本中使用算法A 计算的,但现在应该通过更新的算法计算乙。因此,为了从旧版本的应用程序迁移到新版本,我们必须调用服务层以重新计算每个用户的评级(这不可能仅由SQL完成,因为它需要更多复杂逻辑,包含在应用程序的服务层中)。考虑到,这是版本之间的唯一变化,我们甚至不需要更改架构或直接运行任何SQL。
那么,您如何处理此类应用程序迁移?业界以自动和确定的方式发布新版本应用程序的标准方法是什么?
正如我所提到的,当前的迁移工具不太适合运行除SQL之外的任何复杂代码。我正在考虑创建一个自定义工具,它既可以处理SQL查询,也可以从迁移中调用应用程序的服务层。这是一个好方法吗?
如果是这样,我应该将此工具设计为集成到应用程序上下文并能够在内部自由调用任何服务,还是应该从我的应用程序中公开一些命令并通过迁移的外部请求运行它们(例如通过shell )?
我希望我的应用能够完全支持使用自动迁移进行持续部署。
答案 0 :(得分:0)
我将尝试在此提供我自己的研究结果和最佳实践,我将尝试提出有关此事的内容。我会定期更新此答案,但您可以随意添加自己的答案和/或评论。