数据库/SQL 版本管理工具选型指北:Flyway、Liquibase、Bytebase、阿里 DMS、Zadig

Flyway、Liquibase、Bytebase、DMS 如何选型? 结合 Zadig 怎么实践?

# 领域背景分析

在研发流程中,数据库开发和运维是一个基础且关键的环节。尽管行业内尚无统一的标准或主流方案,但 Zadig 作为云原生 DevOps 平台,始终致力于提升产品的稳定性和业务交付能力,并对数据库领域的进展保持高度关注。本文将对当前市场上的数据库工具进行初步研究和分析,并探讨如何将这些工具(Flyway、Liquibase、Bytebase、阿里 DMS)与 Zadig 结合使用,以期为读者提供实用的指导。

我们将详细探讨这些工具的使用条件、原理、流程,并进行横向比较,帮助您选择最适合您需求的数据库开发运维工具。以下是对这些工具的主要差异分析:

特性 Flyway Liquibase 阿里云 DMS Zadig Bytebase
公司 Red Gate Liquibase 阿里巴巴 KodeRover Bytebase
第一个版本发布 2010年 2006年 2016年 2018年 2021年
产品版本 开源/商业版 开源/商业版 商用 开源/商业版 开源/商业版
易用性 CLI简单易用 CLI功能全但学习成本高 UI界面功能丰富 UI界面自定义程度高 易用的UI界面
可观测性 通过Schema变更记录查看变更历史 较强的可观测性 基于业务需求的工作流 完备的GUI方式 直观的变更流程和SQL详情
成熟度 成熟 成熟 相对成熟 快速发展 快速发展
功能侧重点 基于 SQL /JAVA 变更数据库变更管理,脚本化的迁移、版本控制、自动执行和回滚、故障处理和可扩展性 具备可移植性、基于脚本的变更管理、版本控制、自动化执行、数据库重构、冲突解决、增量变更和扩展性 基于工单的变更管理,数据资产管理,合规审计友好 面向开发者的全流程 DevOps 平台,支持原生数据库, Flyway、Liquibase、Bytebase、DMS 等工具和平台编排 面向开发者 和 DBA 提供 Schema 及数据变更、版本管理,审核流水线,数据查询一站式数据库开发。

# Flyway

Flyway (https://flywaydb.org (opens new window))是一款开源的数据库版本管理工具,Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,无需复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库,支持失败恢复等。

# 支持数据库类型

支持所有关系型数据库:

更多内容参考官方文档:支持的数据类型和版本 (opens new window)

# Flyway 社区版、团队版和企业版差异

# 主要特性

  • 基于 SQL /JAVA 变更
  • 重复变更
  • 撤销变更
  • Callback
  • 批量变更
  • ...

# 工作原理

初始化过程

  1. 使用 flyway 来接管空数据库:flyway 在对应的数据库中创建一个记录 Schema metadata 的表 flyway_schema_history(非空数据库需要使用 baseline 命令进行初始化)

  1. Flyway 开始扫描文件系统或者应用 classpath 里变更,变更可以是 SQL 或者 JAVA 编写的。根据版本号依次执行变更。
  2. flyway_schema_history 记录每个变更 metadata。

变更新版本过程

  1. Flyway 扫描文件系统或者应用 classpath 里的变更,小于等于当前数据库中记录的版本的变更不执行,剩余的版本为可以执行的版本
  2. 根据版本顺序执行
  3. Schema 变更记录表更新

也就是说,每次有变更只需要加一个高版本的变更文件,flyway 就可以执行。

# 结合 Zadig 的实践

  1. SQL 变更文件存放在 Git 代码库
  2. 有新的 SQL 变更提交 PR 到代码库
  3. 自动触发 Zadig 工作流执行 flyway migrate
  4. 不同环境的数据库的变更可以使用不同的 flyway.conf 区分

# Liquibase

Liquibase (https://www.liquibase.org/ (opens new window)) 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog 文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过执行 Schema 类型的文件进行变更。

# 支持数据库类型

更多内容参考官方文档:支持的数据类型和版本 (opens new window)

# Liquibase 社区版和企业版差异

# 主要特性

  • 灵活的 Schema 变更:支持 SQL, XML, JSON, and YAML 语言
  • 自动生成可 review 的 SQL 脚本
  • 支持可重复和不可重复执行的变更
  • 集成和扩展能力
  • 自动或者通过自定义回滚 SQL 撤销数据库的变更
  • 使用上下文和前提条件来微调脚本的执行
  • Liquibase hub 实时监控和可观测能力

# 结合 Zadig 的实践

  1. SQL 变更文件存放在 Git 代码库
  2. 有新的 SQL 变更提交到代码库
  3. 自动触发 Zadig 工作流执行 liquibase update
  4. 不同环境的数据库的变更可以使用不同的 liquibase.properties 区分

# Bytebase

Bytebase(https://www.bytebase.com/ (opens new window))是一款开源的数据库 DevOps 工具,面向应用开发和 DBA,管理 Schema(DDL) 和数据(DML)的全生命周期。

# 支持数据库类型

  • OLTP: MySQL, PostgreSQL, Oracle, SQL Server, MariaDB
  • OLAP: ClickHouse, Snowflake
  • NewSQL: TiDB, OceanBase, Spanner
  • NoSQL: MongoDB, Redis

更多内容参考官方文档:支持的数据类型和版本 (opens new window)

# Bytebase 社区版、团队版和企业版差异

# 主要特性

  • Schema 和数据变更审核流水线
  • SQL 质量检测
  • SQL 编辑器
  • Schema 变更记录、版本控制
  • GitLab 和 GitHub 托管 Schema 变更文件触发变更流水线 (GitOps)
  • 和飞书,钉钉,企微,Slack 等 IM 工具的消息集成
  • 备份与恢复
  • 基于角色的访问控制
  • 多租户多环境统一变更

# 结合 Zadig 的实践

方式一:在 Zadig 中集成 Bytebase bb CLI,可以作为依赖的软件包/打成自定义的构建镜像在 Zadig 中使用

  1. 变更的 SQL 放在 Git 仓库中
  2. 有新的 SQL 变更提交代码库
  3. 自定触发 Zadig 工作流执行 bb migrate
  4. 不同的环境通过给命令行传入不同变量的方式区分

方式二:借助 Zadig 自定义工作流强大的扩展能力开发一个「Bytebase 数据变更」任务,参考文档:自定义工作流任务 | Zadig 文档 (opens new window)

  1. 触发 Zadig 工作流,利用「Bytebase 数据变更」自动创建工单
  2. DBA 在界面上进行工单审批,审批通过并且完成执行
  3. 工作流收到回调信息继续执行业务变更

# 阿里 DMS

DMS(https://www.aliyun.com/product/dms (opens new window)) 是一种集数据管理、结构管理、用户授权、安全审计、数据趋势、数据追踪、BI 图表、性能与优化和服务器管理于一体的数据管理服务。

# 支持数据库类型

  • MySQL
  • SQL Server
  • PostgreSQL
  • MongoDB
  • Redis
  • PolarDB-X(原 DRDS)
  • OceanBase
  • PolarDB
  • AnalyticDB
  • DLA 数据湖分析
  • ClickHouse
  • MariaDB
  • PPAS
  • MaxCompute
  • Cassandra
  • Lindorm
  • GDB

# 主要特性

  • 数据资产统一管理
  • 数据安全(权限管控,敏感信息保护、合规审计支持)
  • 数据库设计与开发
  • 数据传输与加工

# 结合 Zadig 的实践

  1. 在 DMS 上对数据的操作需要通过工单来完成,所以首先借助 Zadig 自定义工作流强大的扩展能力开发一个「DMS 数据变更工单」。参考文档:自定义工作流任务 | Zadig 文档 (opens new window)
  2. 触发 Zadig 工作流,利用「DMS 数据变更工单」自动创建工单
  3. DBA 在 DMS 界面上进行工单审批,审批通过并且完成执行
  4. 工作流收到回调信息继续执行业务变更
Background Image

作为一名软件工程师,我们一直给各行各业写软件提升效率,但是软件工程本身却是非常低效,为什么市面上没有一个工具可以让研发团队不这么累,还能更好、更快地满足大客户的交付需求?我们是否能够打造一个面向开发者的交付平台呢?我们开源打造 Zadig 正是去满足这个愿望。

—— Zadig 创始人 Landy