数据库模式迁移工具的演进:CLI,GUI,集成式协作数据库平台

数据库模式迁移可能是应用程序开发中最具风险的领域,它困难、有风险且令人痛苦。数据库模式迁移工具的存在就是为了减轻这些痛苦,并且已经取得了长足的进步:从基本的CLI工具到GUI工具,从简单的SQL GUI客户端到集成式协作数据库平台。

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

MySQL和psql分别是MySQL和PostgreSQL的原生CLI。您可以直接从命令行向MySQL或PostgreSQL服务器发送命令或查询。

尽管CLI界面简单,但有时对初学者来说可能会感到有些吓人。然而,根据Timescale的《2022 PostgreSQL状况报告》的调查结果,PSQL是与PostgreSQL互动的最受欢迎的工具,超过了像pgAdmin和DBeaver这样的GUI工具。

squids.cn 目前可体验全网zui低价RDS,免费的迁移工具DBMotion、SQL开发工具等

GUI 图形用户界面

PHPMyAdmin、PGAdmin

phpMyAdmin和pgAdmin都是经典的SQL客户端。phpMyAdmin已经是一个成熟的管理MySQL及与MySQL兼容的数据库(例如MariaDB)的工具,而pgAdmin是PostgreSQL的对应工具,现在已经演变到pgAdmin 4。与CLI工具相比,phpMyAdmin和pgAdmin为运行和执行SQL查询提供了一个用户界面,使它们更加用户友好。

DBeaver

DBeaver首次发布是在2010年,这个开源的SQL客户端支持了一整套的数据库(SQL,NoSQL和云数据库),并且跟上了AI领域的最新趋势,通过整合OpenAI的GPT能力,允许自然语言转化为SQL。

Navicat首次发布是在2001年。当时它只支持MySQL,但后来增加了更多的数据库。尽管Navicat的用户界面看起来有点过时,但它功能齐全,并在操作数据库时提供了流畅的整体体验。

基于GUI的SQL客户端是基于CLI的SQL客户端的良好补充。从根本上讲,它们的工作方式是相同的。你连接到数据库并执行一些SQL。快速且方便,但另一方面,它们在数据库变更管理和数据安全性方面都缺乏控制。这篇文章将更详细地以Navicat为例进行讲解。

Gitops / 数据库即代码

为了更好地管理和源代码控制数据库模式的变化,一些工具引入了代码更改过程到数据库更改中,这被称为"数据库即代码"。

Liquibase

Liquibase始于2006年,是一个用于跟踪、管理和应用数据库更改的开源库。有趣的是:Liquibase在2012年被一个名为Datical的公司收购并更名为Datical,但在2020年又将其名称改回Liquibase(明智之举,你有在论坛上看到有人提到Datical吗?)。

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

Flyway

Flyway在很多方面与Liquibase相似:它们都有悠久的历史、拥有大量客户基础,并且都是开源项目。其核心产品是一个CLI和一个Java库。

支持Flyway的商业实体是Redgate(于2019年收购)。它有3个版本:社区版、团队版和企业版。从它们的网站上就可以看出,它们在开源和商业产品之间划清了界限:Flyway的网站整体感觉更加随意,而Redgate则显得更加专业。

和Flyway实力相当。他们之间的主要区别在于各自的定位:Liquibase更倾向于企业,而Flyway则更倾向于开发者。

Sqitch

Sqitch是一个纯粹的开源项目,自2012年以来一直在市场上,没有任何商业产品。它是纯CLI,没有用户界面。

编辑

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

而Sqitch采用了明确的方法,允许用户在Sqitch计划中指定顺序。

Atlas

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是开源版本的商业产品。

全能:GUI + Gitops / 数据库即代码 + 合作

Prisma

像Prisma这样的ORM专注于代码如何与数据交互的领域。尽管这更像是一个后端话题,但Prisma是一个具有前端根源的ORM。前端工程师可能在SQL方面不是最精通的。为了降低管理数据库模式的门槛,Prisma发明了其DSL来定义数据模型。

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

Prisma ORM是开源的,免费使用,他们的Data Platform提供了一个基于云的协作平台,并带有一些高级功能(很明显,他们的野心不仅仅是一个ORM和模式迁移工具)。

Bytebase

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是唯一提供全公司管理功能的工具,除了使数据库更改更高效和安全外,还确保了数据安全和治理。

更多技术干货请关注公众号 "云原生数据库"

相关推荐
学编程的小程29 分钟前
从“单模冲锋”到“多模共生”——2026 国产时序数据库新物种进化图谱
数据库·时序数据库
卓怡学长29 分钟前
m111基于MVC的舞蹈网站的设计与实现
java·前端·数据库·spring boot·spring·mvc
存在的五月雨35 分钟前
Redis的一些使用
java·数据库·redis
小冷coding8 小时前
【MySQL】MySQL 插入一条数据的完整流程(InnoDB 引擎)
数据库·mysql
鲨莎分不晴8 小时前
Redis 基本指令与命令详解
数据库·redis·缓存
专注echarts研发20年9 小时前
工业级 Qt 业务窗体标杆实现・ResearchForm 类深度解析
数据库·qt·系统架构
晚风吹长发10 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法
周杰伦的稻香11 小时前
MySQL中常见的慢查询与优化
android·数据库·mysql
冉冰学姐11 小时前
SSM学生社团管理系统jcjyw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·学生社团管理系统·多角色管理
梁下轻语的秋缘12 小时前
ESP32-WROOM-32E存储全解析:RAM/Flash/SD卡读写与速度对比
java·后端·spring