SchemaHero 是一个开源的声明式数据库 schema 迁移的云原生工具,可将 schema 定义转换为可在任何环境中应用的迁移脚本 。作为 CLI 工具和 Kube.NETes Operator 编写的 SchemaHero 消除了创建和管理与运行应用程序的所有环境兼容的顺序迁移脚本的任务 。
文章插图
【云原生声明式数据库结构迁移工具 - SchemaHero】
许多数据库 schema 管理工具创建了一个命令式接口,要求开发人员了解 schema 的当前状态以及将当前 schema(和相关数据)迁移到新的 schema 的相关命令, SchemaHero 提出了一个声明式接口的方式来替换穿透的命令式接口 。
声明式模型以声明式方式管理数据库 schema 有很多好处,包括:
- 遵守变更管理流程的能力
- 可重复部署到新环境
- 兼容新运行时
传统的数据库引擎通过被称为 DDL (数据定义语言)的 SQL 语句子集来接收 schema 变更 。开发人员不需要为他们所针对的每个数据库引擎了解 DDL 之间的差别,根据数据库的能力和状态,从一个统一的声明式模型转换为适当的 DDL 命令可以通过编程方式进行处理 。
当采用声明式模式来定义数据库 schema 管理时,就可以在应用之前根据一组策略来对 schema 进行验证 。这对于只存储迁移脚本的命令式工具来说是不容易实现的 。有了所需要的全部可用状态,就可以根据一组规则评估数据库 schema,以确保策略和最佳实践得以执行 。
数据迁移有两种类型的迁移需要管理和部署 。
- Schema 迁移
- 数据迁移
不太常见的是,开发人员必须将一些数据迁移到数据库中的新格式 。这可能涉及到计算一个新列并将其写入,或者在代码中创建新的值并将其插入它们 。许多传统的数据库管理工具将 shema 迁移和数据迁移的任务融合到一个工具中去了 。
SchemaHero 目前专注于 schema 迁移,并计划在未来支持数据迁移 。
使用接下来我们将来部署 SchemaHero 和一个示例数据库,将为一个虚拟的航空公司预订系统设计一个非常基本的数据库,并将其部署到 PostgreSQL 上去 。
一开始我们将部署一个空数据库,创建一个初始 schema,然后修改该 schema,使其最终得到以下表结构:
文章插图
安装 SchemaHero安装 kubectl 插件SchemaHero 客户端组件被打包成了一个 kubectl 插件,并通过 krew 包管理器发布,所以首先我们需要先安装 krew,安装了 krew 过后,使用下面的命令即可安装 SchemaHero 客户端 。
$ kubectl krew install schemahero
安装后可以通过下面的命令来校验是否安装成功 。$ kubectl schemahero version
正常你会看到安装的 SchemaHero 版本( 0.12.1 或类似版本) 。安装集群内组件一旦安装了 kubectl 插件,我们就可以安装 SchemaHero 在 Kubernetes 集群中的组件了,只需要使用下面的命令即可一键安装:
$ kubectl schemahero install
该命令将创建一个名为 schemahero-system 的命名空间,并部署一个 SchemaHero operator ,可以通过执行以下命令来确认是否已经安装 SchemaHero :$ kubectl get pods -n schemahero-system
正常情况下应该会看到 1 个 pod 正在运行,输出将类似于以下内容:NAMEREADYSTATUSRESTARTSAGE schemahero-01/1Running038s
客户端和集群组件都安装好过后,接下来我们可以去连接数据库 。连接数据库接下来我们需要部署一个 PostgreSQL 实例,然后配置 SchemaHero 来管理该数据库实例 。
推荐阅读
- 在.Net 7原生支持Webp和Heif格式文件生成
- Intel|Intel全新加速显卡Arctic Sound-M出货:8路4K云游戏无压力
- 奇瑞风云二的车到底好不好 奇瑞风云2怎么样
- 江波|精选诗词|?一路须随云露冷,只身欲返月明空
- 岳云鹏数30数字游戏 数30怎么玩必赢
- 名将赵云之死 赵云怎么死的
- 新手如何看大盘? 如何看大盘
- 云吞馅的做法和配料
- 为什么紫云英成为了矿工 为什么紫云英成为了“矿工”
- 印度法院传唤马云,究竟发生了什么事情? 马云近几天出什么事了