Deployment 数据库迁移:使用构建脚本管理还是应用程序启动时自动管理?
我正在为一个新的web应用开发一个部署系统,我想知道在这个过程中管理数据库迁移的最佳点在哪里(如何进行迁移的问题完全是另一个问题) 看来有两条路要走:Deployment 数据库迁移:使用构建脚本管理还是应用程序启动时自动管理?,deployment,build-process,database-migration,Deployment,Build Process,Database Migration,我正在为一个新的web应用开发一个部署系统,我想知道在这个过程中管理数据库迁移的最佳点在哪里(如何进行迁移的问题完全是另一个问题) 看来有两条路要走: 使用可以 可以从命令手动运行 线路或作为自动控制系统的一部分 部署/构建过程 当应用程序启动时运行迁移 启动(我正在使用ASP.NET,所以 可以很容易地做到没有 导致长时间运行的用户请求) 是否有人对这些方法有任何建议/见解/经验?还有其他建议吗 我可以理解为什么#1可能更吸引人——它让我完全控制数据库何时更新。但是,我非常喜欢#2,因为它允许
我可以理解为什么#1可能更吸引人——它让我完全控制数据库何时更新。但是,我非常喜欢#2,因为它允许我在部署之间快速迭代并减少手动过程#2也可以在我的开发机器上使用,以允许更快的迭代。嗯,我开始觉得两者兼有可能是件好事……我更喜欢选项1,因为它看起来更灵活。我想我应该验证数据库模式(版本号?)是否与代码匹配,而不是在每个应用程序启动时实际执行迁移,如果不匹配,则抛出关于数据库模式不匹配的警告或错误。我们有一个销售人员系统,约有100个客户端,我们正在应用程序启动时更新数据库(没错,我们的应用程序是桌面应用程序。)我喜欢这种方法,如果我们有不确定的startpoint(客户端数据库是新的还是只更新到verison x.y.z?),它是安全的、迭代的 但在服务器端,我更喜欢您的#1选项:我们在虚拟机上创建一个SQL查询文件(基于原始数据库的副本),并针对实际服务器运行此查询 因此,伊姆霍:
- 断开连接的客户端:启动,迭代脚本
- 服务器:基于实际数据库和真实数据库在VM上创建的查询
如果您正在寻找迁移框架,请看一看。如果应用程序必须在客户的机器上运行,那么在启动时迁移可以避免大量支持调用—假设您可以在无需用户干预的情况下进行无缝迁移(我希望您在正常运行web应用时没有修改数据库的权限) 如果应用程序总是在您的控制下运行,那么自动迁移就不是一个问题,但仍然是一个很好的功能,特别是如果您希望最小化停机时间和手动部署步骤的话