数据库变更管理
代码化、版本化的数据库变更管理, 是有效管理数据库的利器, 这样的工具一般称为 database migration tool,是DevOps在数据库领域运用之必备工具。
Database Migration Tool的功能
一个好用的Database Migration Tool通常具有以下功能:
- 既支持使用我们拿手的编程语言来编写, 又支持SQL及数据库扩展的SQL语法编写, 还支持将应用开发语言编写的变更翻译成SQL格式的. 从而满足开发, 测试, 运维及数据库管理等多种角色的需要.
- 支持升级(upgrade)和降级(undo, downgrade).
- 既支持命令行执行, 又有API可以集成到自动化流程中.
- 既支持从零开始维护数据库的变更记录, 也支持中途转入使用该工具来管理变更.
- 支持预览模式, 方便变更审核.
本文接下来介绍几种常见的此类工具.
常见的Database Migration Tools
Java - Liquibase
Liquibase网址: http://www.liquibase.org/index.html
Liquibase以XML格式表达ChangeSets, 以XML, JSON, YAML, SQL等格式描述changelog.
Liquibase的商业化版本为Datical, 其团队的重心转到了Datical上, 因此Liquibase的网站看起来也比较陈旧.
Java - Flyway
Flyway网址: https://flywaydb.org/
Flyway是Boxfuse公司开发的, 以SQL或Java表达每次的migration, 以文件名来表达版本及变更类型(do, undo).
Flyway有免费版, 专业版, 和企业版的区别. 对于开发人员, 免费版基本够用, 对于企业生产环境, 企业版能支持更低版本的Java和数据库环境.
其中undo也需要专业版才支持, 主要是因为Flyway的团队以生产环境为基准, 认为undo是需要非常谨慎处理的事情, 他们更推荐的做法是尽量让DB的变更具有兼容性, 即使不回滚数据库变更, 只回滚应用代码, 也能正常兼容运行.
作为一款具有商业化产品的产品, Flyway所支持的关系数据库种类很多, 这对于大中型企业而言, 非常有吸引力, 因为这样的企业中往往有历史悠久的信息系统, 其数据库往往版本较低.
Python - sqlalchemy-migrate
sqlalchemy-migrate 是Python语言第一个影响广泛的此类工具,但后来缺乏维护。特别是当sqlalchemy的作者(Michael Bayer)开发了alembic以后,Python开发者更多转向使用alembic。
Python - alembic
项目地址:https://bitbucket.org/zzzeek/alembic
文档地址:http://alembic.zzzcomputing.com/en/latest/index.html
Alembic依靠SQLAlchemy强大的数据库DDL及DML表达力,能方便地使用Python或SQL来表达数据库变更。
Alembic目前没有商业化产品。
Golang - golang-migrate
项目地址:https://github.com/golang-migrate/migrate
该工具支持以SQL格式(或目标数据库所支持的格式)来写变更,以整数来表达变更顺序。它没有提供自己的专有格式来写变更而是依赖于目标数据库,反而变得更加简单有效,避免了很多问题。
目前该项目没有商业化产品。
商业化版本的特点
- 理念上对DevOps的支持更好,与DevOps工具的集成支持更好。
- 有更好的长期支持, 支持老版本的语言和数据库。
- 有更强的操作风险控制能力,比如支持预览模式。
- 一般有界面可视化管理. 对变更评审, 变更执行监控与审计,运行报表等运维流程的支持更好。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
pandas使用与思考
最近工作中,有一个场景,是从缓存中将数据读取出来,再聚合。 当时想到了三种方案: 使用dict的方式累加 使用数据库的临时表进行数据聚合 使用pandas汇总 方式一、以前使用php写过,考虑过不优雅,就放弃了 方式二、由于数据多,每次处理都要先写入数据库,然后再聚合,有点耗时,这方式也在线上测试了, 时间确实比较久。 所以采用了第三种方案: 我先贴出我的代码: 为了,剔除敏感信息,我做了混淆和简化 def sync_data_to_db(): """ 将缓存中的数据聚合后,持久化到db """ today = datetime.datetime.now().strftime('%Y-%m-%d') resp = data_api.get_data() data_frame = pd.DataFrame([], columns=['uid', 'age', 'country']) for line in resp.iter_lines(): user = json.loads(line.decode('utf-8')) uid = user.get('uid') age = user....
-
下一篇
Python系统学习流程图,教你一步步学习python
对于刚开始接触Python的小伙伴来说,没有思路方法,不知道从何开始学习,把软件环境安装好后就不知所措了!接下来我给大家分享下多位大牛倾力打造的python系统学习流程,一个月才设计完的! Python基础部分: 老话说的好,“万丈高楼平地起!”不管你做什么都一样,何况编程;或许初学的时候很是枯燥乏味,但是都是你之后的项目、案例的核心! 好了,大道理就不多说了,先上基础部分展示给大家。 一、初识Python真面目 Python的安装及配置:到官网上下载Python,然后安装。安装后还要进行PATH变量的配置。同时安装2和3的环境变量配置,在cmd命令行中输入Python对安装的结果进行检验。 二、全面了解Python 对Python有一个整体的认知,知道他能做什么,搞清楚自己想学哪个方向,这里方向我就不多介绍了,大家可以自行百度。 三、操作系统 Python是可以跨平台操作的,Windows、Linux、Mac等等很多系统都可以,流程图上教的是Linux。 四、重中之重的基本数据类型 1、数字 整形 浮点数 定点数 2、字符串 str bytes bytearray string模块 ...
相关文章
文章评论
共有0条评论来说两句吧...