日期:2014-05-16  浏览次数:20441 次

玩玩儿Flyway:数据库迁移

数据库迁移

在软件开发中,我们有svn、git这样的版本管理器帮我们管理源代码,我们可以很容的查看我们当前代码的版本,更新新版本代码、回滚到旧版本等等操作。如果我们不使用版本管理器进行源代码管理,维护代码将是一项十分痛苦的工作。

开发过程中,改变的可能不仅仅是代码本身,随着业务需求的改变、技术设计的改变,我们数据库的schema也可能发生改变,数据库表中的某些值也可能发生改变。如果数据库相关的信息没有“版本管理”会出现什么问题呢?


假设我们项目中,有多个dev同时进行开发,在Build Pipeline上,有分为了Dev、CI、Test、Production这么几个不同的环境:


当我们需要在修改数据库schema时,我们不得不手动的在每台机器上去做这样的修改。这样很容易导致环境不一致的问题。


所以,RoR原生的支持了数据库迁移的功能。在Java中,我们也有一些可选的工具。Flyway就是其中挺不错的一个http://flywaydb.org/


类似Flyway这样的工具基本原理都非常简单,数据库版本的升级都是通过SQL或者Java代码来完成。

每执行一次升级或者更新,数据库中就会把这个操作的版本号记录下来。这样就可以非常容易的判断出,当前数据库处于哪个版本。


使用Flyway

Flyway的官方文档已经做得比较详细了,大家照着做做,一下就明白了。

Flyway First Step: http://flywaydb.org/getstarted/firststeps/api.html






for Java