数据库模式迁移可能是应用程序开发中最具风险的领域,它困难、有风险且令人痛苦。数据库模式迁移工具的存在就是为了减轻这些痛苦,并且已经取得了长足的进步:从基本的CLI工具到GUI工具,从简单的SQL GUI客户端到集成式协作数据库平台。
MySQL和psql分别是MySQL和PostgreSQL的原生CLI。您可以直接从命令行向MySQL或PostgreSQL服务器发送命令或查询。
尽管CLI界面简单,但有时对初学者来说可能会感到有些吓人。然而,根据Timescale的《2022 PostgreSQL状况报告》的调查结果,PSQL是与PostgreSQL互动的最受欢迎的工具,超过了像pgAdmin和DBeaver这样的GUI工具。
【squids.cn】 目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等
phpMyAdmin和pgAdmin都是经典的SQL客户端。phpMyAdmin已经是一个成熟的管理MySQL及与MySQL兼容的数据库(例如MariaDB)的工具,而pgAdmin是PostgreSQL的对应工具,现在已经演变到pgAdmin 4。与CLI工具相比,phpMyAdmin和pgAdmin为运行和执行SQL查询提供了一个用户界面,使它们更加用户友好。
DBeaver首次发布是在2010年,这个开源的SQL客户端支持了一整套的数据库(SQL,NoSQL和云数据库),并且跟上了AI领域的最新趋势,通过整合OpenAI的GPT能力,允许自然语言转化为SQL。
Navicat首次发布是在2001年。当时它只支持MySQL,但后来增加了更多的数据库。尽管Navicat的用户界面看起来有点过时,但它功能齐全,并在操作数据库时提供了流畅的整体体验。
基于GUI的SQL客户端是基于CLI的SQL客户端的良好补充。从根本上讲,它们的工作方式是相同的。你连接到数据库并执行一些SQL。快速且方便,但另一方面,它们在数据库变更管理和数据安全性方面都缺乏控制。这篇文章将更详细地以Navicat为例进行讲解。
为了更好地管理和源代码控制数据库模式的变化,一些工具引入了代码更改过程到数据库更改中,这被称为“数据库即代码”。
Liquibase始于2006年,是一个用于跟踪、管理和应用数据库更改的开源库。有趣的是:Liquibase在2012年被一个名为Datical的公司收购并更名为Datical,但在2020年又将其名称改回Liquibase(明智之举,你有在论坛上看到有人提到Datical吗?)。
Liquibase的主产品是基于Java的CLI,允许开发团队通过CLI将数据库模式迁移集成到他们的CI/CD工作流中。
Flyway在很多方面与Liquibase相似:它们都有悠久的历史、拥有大量客户基础,并且都是开源项目。其核心产品是一个CLI和一个Java库。
支持Flyway的商业实体是Redgate(于2019年收购)。它有3个版本:社区版、团队版和企业版。从它们的网站上就可以看出,它们在开源和商业产品之间划清了界限:Flyway的网站整体感觉更加随意,而Redgate则显得更加专业。
和Flyway实力相当。他们之间的主要区别在于各自的定位:Liquibase更倾向于企业,而Flyway则更倾向于开发者。
Sqitch是一个纯粹的开源项目,自2012年以来一直在市场上,没有任何商业产品。它是纯CLI,没有用户界面。
与基于Java的Liquibase和Flyway不同,Sqitch是使用Perl开发的。此外,Sqitch在如何管理数据库模式更改上有其自己的哲学:Liquibase和Flyway都使用文件命名规则来排序模式迁移(约定优于配置)。
而Sqitch采用了明确的方法,允许用户在Sqitch计划中指定顺序。
Atlas是Ariga构建的开源工具,它提出了“数据库模式即代码”的概念。
从其在Hacker News上的首次亮相中,你可以看出他们从HashiCorp那里获得了大量灵感,并自称为“Terraform for Database Migrations”。他们还基于HCL(HashiCorp Configuration Language)创造了Atlas HCL。
Atlas使用现代编程语言Go(不同于使用Java的Liquibase/Flyway),并围绕CLI构建(与Liquibase/Flyway/Sqitch相似),但它也有一个轻量级的UI。Atlas Cloud是开源版本的商业产品。
像Prisma这样的ORM专注于代码如何与数据交互的领域。尽管这更像是一个后端话题,但Prisma是一个具有前端根源的ORM。前端工程师可能在SQL方面不是最精通的。为了降低管理数据库模式的门槛,Prisma发明了其DSL来定义数据模型。
DSL是基于状态的(声明性的),它描述的是数据库模式的最终状态,而不是增量更改,这与Liquibase/Flyway/Sqitch不同。这样,Prisma可以在整个应用程序开发周期中提供更全面的数据库管理视图。
Prisma ORM是开源的,免费使用,他们的Data Platform提供了一个基于云的协作平台,并带有一些高级功能(很明显,他们的野心不仅仅是一个ORM和模式迁移工具)。
Bytebase是一个开源的数据库DevOps工具,涵盖从更改、查询和安全到管理的数据库管理场景,具有基于网络的视觉协作工作空间。
可视化更改工作流
Bytebase提供一个基于Web的UI,开发者和DBA可以通过同一界面合作处理数据库更改。
数据库即代码
为了更好地适应开发者的工作习惯,Bytebase已经将功能集成到诸如GitLab和GitHub这样的代码仓库中。有了GitOps工作流,开发者可以将数据库更改文件提交给熟悉的代码仓库,一旦审查完成并提交给仓库,部署将由Bytebase自动触发。无需在多个工具之间切换!
团队合作与管理
您可以为两个级别的成员定义不同的角色:工作空间和项目。您可以为团队成员分配不同的角色,以便他们对不同的项目具有不同的权限;或为每个项目配置审批工作流,例如指定某个特定项目的DBA或QA。
Prisma和Bytebase之间的区别在于目标受众。Prisma主要针对前端/全栈开发者,而Bytebase更关注后端和DBA。两个产品都提供合作功能,Prisma关注单个项目中的开发者之间的合作,而Bytebase则针对整个工程组织,即开发者和DBA/平台工程/Ops团队。
如果您作为个人操作数据库,像Navicat这样的经典CLI或GUI SQL客户端就足够了。如果您更喜欢与代码仓库的集成,可以选择像Liquibase和Flyway这样的解决方案。但是,对于类似于Jira或GitLab的GUI和项目协作功能,您的选择是Prisma和Bytebase。Bytebase是唯一提供全公司管理功能的工具,除了使数据库更改更高效和安全外,还确保了数据安全和治理。
作者:Mila Wu
更多技术干货请关注公众号“云原生数据库”