数据库/SQL 版本管理工具选型指北
数据库开发运维作为研发流程上的刚需场景,目前在行业内还尚未形成标准或者主流方案。 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
- 批量变更
- ...
工作原理
初始化过程
- 使用 flyway 来接管空数据库:flyway 在对应的数据库中创建一个记录 Schema metadata 的表 flyway_schema_history(非空数据库需要使用 baseline 命令进行初始化)
- Flyway 开始扫描文件系统或者应用 classpath 里变更,变更可以是 SQL 或者 JAVA 编写的。根据版本号依次执行变更。
- flyway_schema_history 记录每个变更 metadata。
变更新版本过程
- Flyway 扫描文件系统或者应用 classpath 里的变更,小于等于当前数据库中记录的版本的变更不执行,剩余的版本为可以执行的版本
- 根据版本顺序执行
- Schema 变更记录表更新 也就是说,每次有变更只需要加一个高版本的变更文件,flyway 就可以执行。
结合 Zadig 的实践
- SQL 变更文件存放在 Git 代码库
- 有新的 SQL 变更提交 PR 到代码库
- 自动触发 Zadig 工作流执行 flyway migrate
- 不同环境的数据库的变更可以使用不同的 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 的实践
- SQL 变更文件存放在 Git 代码库
- 有新的 SQL 变更提交到代码库
- 自动触发 Zadig 工作流执行 liquibase update
- 不同环境的数据库的变更可以使用不同的 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 中使用
- 变更的 SQL 放在 Git 仓库中
- 有新的 SQL 变更提交代码库
- 自定触发 Zadig 工作流执行 bb migrate
- 不同的环境通过给命令行传入不同变量的方式区分
方式二:借助 Zadig 自定义工作流强大的扩展能力开发一个「Bytebase 数据变更」任务,参考文档:工作流任务 | Zadig 文档
- 触发 Zadig 工作流,利用「Bytebase 数据变更」自动创建工单
- DBA 在界面上进行工单审批,审批通过并且完成执行
- 工作流收到回调信息继续执行业务变更
阿里 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 的实践
- 在 DMS 上对数据的操作需要通过工单来完成,所以首先借助 Zadig 自定义工作流强大的扩展能力开发一个「DMS 数据变更工单」。参考文档:工作流任务 | Zadig 文档
- 触发 Zadig 工作流,利用「DMS 数据变更工单」自动创建工单
- DBA 在 DMS 界面上进行工单审批,审批通过并且完成执行
- 工作流收到回调信息继续执行业务变更
主要差异
文中所列 Flyway、Liquibase、Bytebase、阿里 DMS 的相关差异对比见下图:
Zadig,让工程师更专注创造。欢迎加入 开源吐槽群🔥

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
不惧繁杂背景,视频编辑服务一键实现人像抠图
最近,“你这背景太假了”席卷全网。由于身后风景太优美,被网友质疑背景太假,某主播为了自证,直接把手里的桶扔进了背后的水里。短短几天时间播放量几十亿,引发了全网P图狂潮,网友在短视频App里将其人像抠出来,替换了不同的背景,各类创意视频很快冲上热搜。 现如今,视频人像抠图有着广泛应用。在直播App里可以为人像增加各种背景特效、贴纸道具等,提供更加丰富的娱乐氛围;会议App里可以替换背景,保护用户隐私;教育类App中可以将背景替换为课件等内容;而在短视频App里人像抠图能给用户更多发挥空间,无需绿幕拍摄和后期制作也可以轻松拍摄穿越时空的震撼大片。 那么,App如何实现一键提取人像功能呢?HMS Core视频编辑服务提供人像和头部分割能力,支持对输入的视频或图片进行人像或头部分割,生成分割后的视频、图片或贴纸。 开发步骤 1. 开发准备 详细准备步骤可参考华为开发者联盟官网。 2. 编辑工程集成 2.1 设置应用的鉴权信息 可以通过api_key或者Access Token来设置应用鉴权信息。 通过setAccessToken方法设置Access Token,在应用启动时初始化设置一次即可,...
- 下一篇
神奇的 Zadig 工作流:以链接广大开发者为使命
Zadig 工作流有别于其他 CI/CD 的流水线,它主要面向微服务架构设计的产品级工作流,可以支持并行构建、并行部署、并行自动化测试和分发。自 Zadig v1.13.0 推出了更为强大的自定义工作流,迄今已迭代两个大版本,很多小伙伴相继用上了。今天我们就来介绍一下它! 为什么设计新的工作流? 根据社区小伙伴的反馈,当前工作流在交付多个微服务能力已经能满足 90% 的能力,但仍然有一些场景无法支持,出于以下因素,设计了自定义工作流: 满足复杂场景下任务顺序自由编排能力,诸如审核、多任务组装 通过工作流更灵活的释放 Zadig 环境管理能力,比如多环境协同、多角色协作 提供更强的开放性和系统扩展性,广泛的链接合作伙伴和企业内部系统 同时保留产品工作流类型,它仍然作为较为易用的方式,让企业和开发者低门槛的走向云原生交付之路。 自定义工作流核心概念 自定义工作流依旧采用 K8s 任务 类型资源为底层设计,以 工作流、阶段、任务 的组织结构,包含以下核心概念: 工作流: 一组有序的 阶段。 阶段:一组有序的 任务 ,可以配置 任务 并行执行或者串行执行。 任务:表示执行命令的一系列有序的步骤...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G