您的位置:  首页 > 技术杂谈 > 正文

数据库/SQL 版本管理工具选型指北

2022-09-15 10:00 https://my.oschina.net/koderover/blog/5577782 Zadig云原生交付 次阅读 条评论

数据库开发运维作为研发流程上的刚需场景,目前在行业内还尚未形成标准或者主流方案。 Zadig 作为云原生持续交付平台,我们关注最终产品的稳定性和业务交付能力,势必对该领域也抱有持续的关注度。我们有观察到在该领域有国内外大厂发力同样也有后起之秀,今天就这一领域的工具现状做初步的研究和分析,并对这些工具(Flyway、Liquibase、Bytebase、阿里 DMS)如何结合 Zadig 做了一些简要设计 ,希望能够帮助到大家。

Flyway

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

支持数据库类型

支持所有关系型数据库:

  • Oracle
  • SQL Server (including Amazon RDS and Azure SQL Database)
  • Azure Synapse (Formerly Data Warehouse)
  • DB2
  • MySQL (including Amazon RDS, Azure Database & Google Cloud SQL)
  • Aurora MySQL
  • MariaDB
  • Percona XtraDB Cluster
  • TestContainers
  • PostgreSQL (including Amazon RDS, Azure Database, Google Cloud SQL, TimescaleDB, YugabyteDB & Heroku)
  • Aurora PostgreSQL
  • Redshift
  • CockroachDB, SAP HANA, Sybase ASE, Informix, H2, HSQLDB, Derby, Snowflake, SQLite and Firebird.
  • 不支持 NoSQL 数据库,比如 mongodb

Flyway 社区版和企业版差异

主要特性

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

工作原理

初始化过程

  1. 使用 flyway 来接管空数据库:flyway 在对应的数据库中创建一个记录 Schema metadata 的表 flyway_schema_history(非空数据库需要使用 baseline 命令进行初始化)
  2. Flyway 开始扫描文件系统或者应用 classpath 里变更,变更可以是 SQL 或者 JAVA 编写的。根据版本号依次执行变更。
  3. 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/) 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 changelog 文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过执行 Schema 类型的文件进行变更。

支持数据库类型

  • Amazon Redshift
  • Apache Derby
  • BigQuery
  • Cassandra on Datastax Astra
  • Cloud Spanner
  • COCKROACHDB Cloud
  • Cosmos DB
  • DB2 on z/OS
  • EnterpriseDB
  • Firebird
  • H2
  • Hibernate
  • Hive
  • HSQLDB
  • IBM DB2 LUW
  • IBM DB2 on Z
  • Impala/Hive
  • Informix
  • Interbase
  • MariaDB, skySQL, or MariaDB AWS RDS
  • MongoDB
  • MSSQL
  • MySQL
  • Oracle
  • Oracle ATP & ADW
  • Postgres
  • SAP HANA
  • Snowflake
  • SQLite
  • Sybase
  • Teradata
  • Vertica File
  • VoltDB
  • YugabyteDB

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/)是一款开源的数据库 DevOps 工具,面向应用开发和 DBA,管理 Schema(DDL) 和数据(DML)的全生命周期。

支持数据库类型

  • MySQL
  • PostgreSQL
  • ClickHouse
  • TiDB
  • Snowflake.

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 文档

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

阿里 DMS

DMS(https://www.aliyun.com/product/dms) 是一种集数据管理、结构管理、用户授权、安全审计、数据趋势、数据追踪、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 文档
  2. 触发 Zadig 工作流,利用「DMS 数据变更工单」自动创建工单
  3. DBA 在 DMS 界面上进行工单审批,审批通过并且完成执行
  4. 工作流收到回调信息继续执行业务变更

主要差异

文中所列 Flyway、Liquibase、Bytebase、阿里 DMS 的相关差异对比见下图:

Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥

Zadig on Github
Zadig on Gitee

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接