共计 3642 个字符,预计需要花费 10 分钟才能阅读完成。
数据库 Schema 迁徙可能是利用开发中危险最大的畛域 – 这个过程充斥了艰难水平、危险和苦楚,明天咱们来盘点一下最佳数据库 Schema 迁徙工具,从最根底的 CLI 到吸纳了绝对较新理念的 GitOps / Database-as-Code(数据库代码化)的工具,看看有什么工具能够缓解苦楚?
命令行客户端 CLI – mysql / psql
mysql 和 psql 是最间接的能够与 MySQL 和 PostgreSQL 交互的工具,你能够从命令行间接向 MySQL 或 PostgreSQL 服务器发送命令或查问。
尽管 CLI 界面简略,对于老手可能也不是很敌对,然而上回看到 Timescale 做的 State of PostgreSQL 2022 调研说 psql 是最风行的与 PostgreSQL 交互的工具,甚至超过了有 GUI 的工具 pgAdmin 和 DBeaver 🤯。
图形用户界面(GUI)
phpMyAdmin, pgAdmin
phpMyAdmin 和 pgAdmin 是十分老牌经典的 SQL 客户端。phpMyAdmin 现已倒退成治理 MySQL 和类 MySQL 数据库(比方 MariaDB)的最次要工具之一,pgAdmin 则是用于治理 PostgreSQL,当初曾经出到了 pgAdmin 4。相比 CLI 工具,phpMyAdmin 和 pgAdmin 提供了可视化的图形界面来运行 SQL 命令和执行 SQL 操作,十分易于应用。
DBeaver
DBeaver 是一款老牌 SQL 客户端,比后面两款工具进阶一些,反对的数据库(SQL 和 NoSQL)品种相当齐全,最近的热点 AI 他们也没落下,DBeaver 曾经反对把自然语言转换成 SQL。
Navicat
Navicat 是一款历史悠久的图形化数据库客户端,第一个版本推出于 2001 年,从一开始只反对 MySQL,起初又陆续加上了更多数据库品种。Navicat 的界面尽管有些古老,然而功能齐全,整体操作数据库体验晦涩。不过如果你还在用 Navicat 连数据库,What are you doing?
GitOps / Database-as-Code
为了更妥善治理和记录数据库 Schema 变更,许多工具把代码变更的流程引入到数据库变更,也就是数据库即代码(Database-as-Code)。
Liquibase
始于 2006 年,Liquibase 能够说是这一畛域中最出名的产品。冷常识:Liquibase 2012 年被一家叫 Datical 的公司收买并且改名了,2022 年又改回了 Liquibase 以坚固品牌形象(理智)。如果有人在 Reddit 或者 Stack Overflow 上求举荐数据库 schema 变更工具,上面的答复大概率会提到 Liquibase 而不是 Datical。
Liquibase 既是一个开源我的项目,也是一个提供其商业产品的公司,它提供开源版、Pro 版和 Enterprise(企业)版。它的次要产品是一个基于 Java 的 CLI,开发团队能够通过 CLI 将数据库 schema 迁徙整合到他们的 CI/CD 工作流中。可能是因为它是 Java 的根基,最罕用的模式是 XML(YAML 和 JSON 的反对是起初加上的),也反对一般 SQL(须要适当正文)。
Flyway
Flyway 在很多方面和 Liquibase 有类似点:他们都历史悠久,有宏大客户群,都是开源我的项目。它的外围产品是一个 CLI 和一个 Java 库。
Flyway 背地的商业实体是 Redgate(2019 年将其收买)。它提供社区(开源)版、Team 版($597 用户 / 年)和 Enterprise(企业)版。能看出他们在开源和商业产品之间设定了一个界线,Flyway 有一种更随性的感觉。
从两个官网看定价计划,高亮的局部也不同
Flyway 的网站尽管不像当初 DevTools 公司那么闪亮夺目,不过他们最近更新了一下文档站,之前的一些根本 UI 问题也失去了解决🙏,尽管内容比外观漂亮更重要,然而看起来舒服的确会让工作幸福感失去极大晋升。
Liquibase 和 Flyway 并驾齐驱,次要的区别在于它们各自的定位。Liquibase 比拟适宜企业用户,而 Flyway 更适宜开发者。
Sqitch
Sqitch 是一个纯开源我的项目,没有商业版本,在市场上有一段时间了(2012 年开源)。Sqitch 是纯 CLI,没有 UI。
与基于 Java 的 Liquibase 和 Flyway 不同,Sqitch 是用 Perl 开发的。此外,Sqitch 在如何治理数据库 schema 变动方面有本人的理念:Liquibase 和 Flyway 都应用文件命名形式来管制 schema 迁徙行为(常规高于配置,Bytebase 也应用这种办法)
而 Sqitch 采取的形式是应用命令来进行 schema 迁徙,这赋予了团队更多的势力,将数据库版本部署接入利用开发周期。
Atlas
Atlas 是一个很摩登(去年才亮相)的数据库 schema 管理工具,它有开源和 cloud 版,由一家叫做 Ariga 的公司保护。
深受 HashiCorp 的影响,它在 HackerNews 上的首次亮相就自称 Terraform for Database Migrations。他们甚至依据 HCL (HashiCorp Configuration Language) 创造了 Atlas DDL(数据定义语言)。
在此基础上,Atlas 以 CLI 为核心(相似 Liquibase / Flyway / Sqitch),不过它也有一个轻量级的 UI。
Altas 的劣势在于用了古代编程语言 Go(而不是 Java),并从 Terraform 和 Prisma 等工具中吸取了不少教训。
GUI + GitOps / Database-as-Code + 团队协同
一个全栈应用程序由三个局部组成:
- 代码(无状态局部)
- 数据(有状态局部)
- 以及代码如何与数据交互
对于想要建设一个可继续的全栈利用的前端工程师来说,TypeScript / Express.js 解决的是代码问题;MongoDB 这样的 NoSQL 数据库解决的是数据问题;Prisma 解决的是最初一个问题,即数据 <> 代码。
Prisma
尽管数据库 schema 迁徙属于后端领域,但 Prisma 是一个具备前端本源的 ORM。对于前端工程师来说,可用性和可拜访性尤其重要,他们可能并不精通 SQL,为了升高治理数据库 schema 的门槛,Prisma 应用 Prisma schema file: schema.prisma 来定义数据模型。
DSL 是基于状态的(申明式),即形容了指标数据库 schema 的预期最终状态,而不是增量变动,这与 Liquibase / Flyway / Sqitch 不同,Prisma 在整个应用程序开发周期中提供了一个更全面的数据库数据和模式治理视图。
Prisma ORM 开源且收费,他们的 Data Platform 提供了一个云上可合作平台,包含了一些进阶性能(看得出他们的野心相对不局限于一个 ORM 和 schema 迁徙工具)。
Bytebase
Bytebase 是一款开源和商业并行的 Database DevOps 平台,可能治理整个数据库的开发生命周期,一站式笼罩各种数据库的变更,查问,平安,治理场景。
可视化的变更审核界面
Bytebase 提供了可视化的变更审核界面,开发者和 DBA 能够在同一个界面上对于数据库变更进行合作。
数据库代码化 Database-as-Code
为了更好兼容开发者的工作习惯,Bytebase 将其能力集成到了代码仓库如 GitLab, GitHub 中,配置好 GitOps 工作流后,开发者能够在相熟的代码仓库中提交数据库的变更文件,在审核实现提交到代码仓库后,会主动触发在 Bytebase 这边的部署流程,防止了在多个工具中切换。
团队合作 & 治理
Bytebase 反对在工作空间(Workspace)和我的项目(Project)两个层级定义成员的不同角色,赋予团队成员在不同我的项目的不同角色和权限,并且基于不同角色配置审批流,比方指定具体该项目标 DBA 或测试负责人。
Prisma 和 Bytebase 之间的区别次要体现在,Prisma 次要是面向前端 / 全栈开发者的,Bytebase 则是更多面向后端和 DBA 的。两个产品都提供了协同能力,Prisma 针对的是单个业务团队内的开发者之间的协同问题,而 Bytebase 针对的是整个企业内的协同 / 数据安全 / 治理,开发者和 DBA / 平台工程 / 运维团队之间的协同问题。
总结一下
如果是集体操作数据库,那么经典的 CLI 或者像应用 Navicat 这样的 GUI SQL 客户端就能满足需要。如果须要和代码库集成,那么像 Liquibase / Flyway 也提供了解决方案。但要提供像相似 Jira, GitLab 这样残缺的 GUI 界面,欠缺的我的项目协同能力,可选的就只有 Prisma 和 Bytebase 了,而其中也只有 Bytebase 能够进一步提供组织层面的治理能力,在让数据库变更变得更加稳固 / 高效的根底之上,也能保障企业中的数据安全和合规问题。
💡 你能够拜访官网 https://www.bytebase.com/,收费注册云账号,立刻体验 Bytebase。