我正在为每个客户创建一个数据库架构。因此,每当新客户注册时,我需要在运行时快速创建其架构。
在运行时,使用Liquibase(或等效的)运行所有变更集以生成最新的模式。
缺点:
在每次构建之后,我们使用Liquibase变更集生成临时数据库。然后从数据库中我们基于当前快照创建一个干净的模式创建脚本。然后,当新客户到来时,我们只运行干净的脚本,而不是完整的更改集历史记录。
缺点:
您怎么看?
答案 0 :(得分:1)
我会建议选项#1的一致性。
数据库更新可能很复杂,变异的可能性越小越好。这意味着您应该让开发人员最初创建liquibase changeSets来更新他们的数据库,因为他们正在实现新功能以了解他们正在按预期运行,然后知道这些相同的步骤将在QA中一直运行到生产中。它是一个他们需要处理的额外工具,但它应该很容易以易于使用的方式集成到他们的标准工作流中。
同样,我通常建议在changeLog中保留不相关的历史更改集,因为如果删除它们,则会偏离已知良好的更新路径。数据库在大多数操作中都很快,尤其是在几乎没有数据的系统上。如果您有不再需要的特定更改工具并且由于某种原因而过于昂贵,您可以根据具体情况将其删除,但我建议您很少这样做。
您是正确的,从liquibase脚本创建数据库快照应该与运行changeLog相同 - 只要在快照中包含databasechangelog表即可。但是,坚持使用实际的Liquibase更新一直到生产将允许您使用可能对您的情况有帮助的上下文,前置条件和更改日志参数等功能。
答案 1 :(得分:0)
数据库部署有两种方法:
构建一次部署许多 - 此方法使用与本机代码相同的原则,编译一次并在环境中复制二进制文件。从数据库的角度来看,这种方法意味着部署脚本只生成一次,然后跨环境执行。
Build&按需部署 - 此方法在需要时生成增量脚本,以便处理任何进程外更改。
如果你使用Build&按需部署方法,您可以为整个架构或工作项/变更集生成增量脚本。