写点什么

优秀数据库模式迁移工具的发展历程

作者:这我可不懂
  • 2023-10-20
    福建
  • 本文字数:2429 字

    阅读完需:约 8 分钟

数据库模式迁移可能是应用程序开发中风险最大的领域——因为这是一个困难的、有风险的和痛苦的过程。数据库模式迁移工具的存在是为了减轻这种痛苦,并且已经取得了长足的进步:从基本的 CLI 工具到 GUI 工具,从简单的 SQL GUI 客户端到一体化协作数据库平台。

命令行客户端(CLI) - MySQL/PSQL

MySQL 和 PSQL 分别是 MySQL 和 PostgreSQL 的本地 CLI,可以从命令行直接向 MySQL 或 PostgreSQL 服务器发送命令或查询。



尽管 CLI 界面很简单,但有时它会让初学者望而生畏。然而,根据 Timescale 公司的 2022 年 PostgreSQL 状态调查结果,PSQL 是最受欢迎的与 PostgreSQL 交互的工具,超过了 pgAdmin 和 DBeaver 等 GUI 工具。


GUI

1.PHPMyAdmin 和 PGAdmin

PHPMyAdmin 和 PGAdmin 是经典的 SQL 客户端。PHPMyAdmin 已经是一个管理 MySQL 和 MySQL 兼容数据库(例如 MariaDB)的工具,而 PGAdmin 是 PostgreSQL 的对应工具,现在已经发展到 PGAdmin 4。与 CLI 工具相比,PHPMyAdmin 和 PGAdmin 提供了一个用于运行和执行 SQL 查询的用户界面(UI),使它们更加友好。



2.DBeaver

DBeaver 的最初版本发布于 2010 年,这款开源 SQL 客户端支持各种数据库(SQL、NoSQL 和云数据库),并通过整合 OpenAI 公司的 GPT 功能跟上人工智能领域的最新趋势,允许将自然语言转换为 SQL。



3.Navicat

Navicat 于 2001 年首次发布。它当时只支持 MySQL,但后来增加了更多的数据库。虽然 Navicat 的 UI 看起来有点过时,但它具有完整的功能,并且在操作数据库时提供了流畅的整体体验。



基于 GUI 的 SQL 客户端是对基于 CLI 的 SQL 客户端的良好补充。从根本上讲,它们的工作方式是一样的。用户可以快速方便连接到数据库并执行一些 SQL。另一方面,在数据库更改管理和数据安全方面缺乏控制。本文将以 Navicat 为例进行详细介绍。

Gitops /数据库即代码

为了更好地管理和控制数据库模式更改,一些工具在数据库更改中引入了代码更改过程,称为数据库即代码(Database-as-Code)。

1.Liquibase

Liquibase 创建于 2006 年,是一个用于跟踪、管理和应用数据库更改的开源库。一个有趣的事实是:Liquibase 于 2012 年被一家名为 Datical 的公司收购,并更名为 Datica,但随后于 2020 年更名为 Liquibase(这是明智之举,见过有人在论坛上提到过 Datica 吗?)。



Liquibase 的主要产品是基于 Java 的 CLI,它允许开发团队通过 CLI 将数据库模式迁移集成到他们的 CI/CD 工作流中。

2.Flyway

Flyway 与 Liquibase 在很多方面有相似之处:它们都是成立时间较长的数据库,拥有客户群,而且都是开源项目。它的核心产品是 CLI 和 Java 库。

Flyway 背后的商业实体是 Redgate(于 2019 年被收购)。它有 3 个版本:社区、团队和企业。可以看出,他们在开源和商业产品之间划出了一条清晰的界限:Flyway 的网站总体上感觉更随意,而 Redgate 的方式更专业。



Liquibase 和 Flyway 并驾齐驱。两者的主要区别在于各自的定位:Liquibase 更面向企业,而 Flyway 更面向开发者。

3.Sqitch

Sqitch 是一个纯开源项目,自从 2012 年以来一直没有商业产品上市。它是纯粹的 CLI,没有 UI。



与基于 Java 的 Liquibase 和 Flyway 不同,Sqitch 是使用 Perl 开发的。此外,Sqitch 在如何管理数据库模式更改方面有自己的理念:Liquibase 和 Flyway 都使用文件命名约定来安排模式迁移(约定高于配置)。



而 Sqitch 采用了一种显式的方法,允许用户在 Sqitch 计划中指定顺序。


4.Atlas

Atlas 是一个由 Ariga 构建的开源工具,并推广了“数据库模式即代码”这一术语。

可以看出,他们从 HashiCorp 那里获得了很多灵感,并在首次出现在 Hacker News 上时将自己称为“数据库迁移的 Terraform”。他们还发明了基于 HCL (HashiCorp 配置语言)的 Atlas HCL。

Atlas 使用现代编程语言 Go(与使用 Java 的 Liquibase/Fireway 不同),并以 CLI 为中心(类似于 Liquibase.Fireay/Sqitch),但它也有一个轻量级的 UI。Atlas Cloud 是一个开源版本的商业产品。

一体化:GUI + Gitops / Database-As-Code + Collaboration

1.Prisma

像 Prisma 这样的 ORM 针对的是代码如何与数据交互的领域。虽然这更多的是一个后端主题,但 Prisma 是一个具有前端根的 ORM。前端工程师可能不是最精通 SQL 的。为了降低管理数据库模式的障碍,Prisma 发明了它的 DSL 来定义数据模型。



DSL 是基于状态的(声明性的),它描述了数据库模式的最终状态,而不是增量变化,这与 Liquibase/Flyway/Sqitch 不同。通过这种方式,Prisma 可以在整个应用程序开发周期中提供更全面的数据库管理视图。

Prisma ORM 是开源的,可以免费使用,他们的数据平台提供了一个基于云的协作平台,具有一些高级功能(很明显,他们的目标不仅仅是一个 ORM 和模式迁移工具)。

2.Bytebase

Bytebase 是一个开源数据库 DevOps 工具,涵盖了数据库管理场景,从变更、查询、安全性到基于 Web 的可视化协作工作区的治理。



Bytebase 提供了一个基于 Web 的 UI,开发人员和 DBA 可以通过同一个界面协作处理数据库更改。

3.数据库即代码(Database-As-Code)

为了更好地适应开发人员的工作习惯,Bytebase 已经将功能集成到代码库中,例如 itLab 和 GitHub。通过启用 GitOps 工作流,开发人员可以将数据库更改文件提交到熟悉的代码存储库,一旦审查完成并提交到 repo, Bytebase 将自动触发部署。无需在多个工具之间切换。

4.团队协作与管理

用户可以为两个级别的成员定义不同的角色:工作区和项目。可以为团队成员分配不同的角色,以便他们对不同的项目具有不同的权限;或者为每个项目配置审批工作流,例如指定负责此特定项目的特定 DBA 或 QA。

Prisma 和 Bytebase 的区别在于目标受众。Prisma 主要针对前端/全栈开发人员,而 Bytebase 更专注于后端和 DBA。这两款产品都提供协作功能,Prisma 专注于单个项目中开发人员之间的协作,而 Bytebase 针对整个工程组织,即开发人员和 DBA/平台工程/运营团队。

结语


如果用户以个人身份操作数据库,那么传统的 CLI 或 GUI SQL 客户端(如 Navicat)就足够了。如果更喜欢与代码库集成,有像 Liquebase 和 Flyway 这样的解决方案。然而,对于类似 Jira 或 GitLab 的 GUI 和项目协作功能,可以选择 Prisma 和 Bytebase。Bytebase 是唯一一个提供组织范围管理功能的工具,除了使数据库更改更高效和更安全之外,还可以确保数据安全和治理。

发布于: 刚刚阅读数: 6
用户头像

低代码技术追随者,为全民开发而努力 2023-02-15 加入

大家好,我是老王,专注于分享低代码图文知识,感兴趣的伙伴就请关注我吧!

评论

发布
暂无评论
优秀数据库模式迁移工具的发展历程_数据库_这我可不懂_InfoQ写作社区