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

news2024/12/26 0:11:37

数据库模式迁移可能是应用程序开发中最具风险的领域,它困难、有风险且令人痛苦。数据库模式迁移工具的存在就是为了减轻这些痛苦,并且已经取得了长足的进步:从基本的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 

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

作者:Mila Wu

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/982419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PROSOFT PTQ-PDPMV1网络接口模块

通信接口:PROSOFT PTQ-PDPMV1 网络接口模块通常配备了多种通信接口,以便与不同类型的设备和网络进行通信。常见的接口包括以太网、串行端口(如RS-232和RS-485)、Profibus、DeviceNet 等。 协议支持:该模块通常支持多种…

《向量数据库指南》——AI原生向量数据库Milvus Cloud 2.3 新功能ScaNN 索引和Iterator

ScaNN 索引 Milvus 目前支持了 Faiss 中的 FastScan 算法,在各项 benchmark 中有着不俗的表现,对比 HNSW 有 20% 左右提升,约为 IVFFlat 的 7 倍,同时构建索引速度更快。ScaNN 在算法上跟 IVFPQ 比较类似,聚类分桶,然后桶里的向量使用 PQ 做量化,区别是 ScaNN 对于量化比…

ATC模型转换动态shape问题案例

ATC(Ascend Tensor Compiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中&a…

【C++】动态内存管理

【C】动态内存管理 new和delete用法内置类型自定义类型抛异常定位new 刨析new和delete的执行与实现逻辑功能执行顺序newdelete 功能实现operator new与operator delete malloc free与new delete的总结 在我们学习C之前 在C语言中常用的动态内存管理的函数为: mallo…

与数据库性能作斗争:间歇性超时问题

今年早些时候,当我们与数据库互动时,我们的应用程序在两周的时间里出现了间歇性的超时问题。 尽管我们尽了最大的努力,但我们不能立即确定一个明确的原因;我们并没有进行任何明显改变数据库使用方式的代码更改,也没有…

SSL证书只有收费的吗?有没有免费使用的?

首先明白SSL证书是什么SSL英文全称:英文全称: Secure Socket Layer Certificate,中文全称:安全套接字层证书。 SSL是一种由数字证书颁发机构(CA) 签发的数字证书。它用于建立安全的加密连接,确保通过网络传输的数据在客户端和服务器之间的安全性和完整性…

不同供电系统下SPD浪涌保护器的用途差异与选择

浪涌保护器(SPD)是一种用于保护电气设备免受电力系统突发的电压浪涌或过电压等干扰的重要装置。在选择浪涌保护器(SPD)时,会有1P、1PN、2P、3P、3PN、4P等不同类型的产品,其中“P”是低压电器的一个专业术语…

新旧混战,内衣竞争终局在哪里?

从2016到2023,内衣混战没有结束,反而愈演愈烈。 近日,包括都市丽人、汇洁股份、爱慕股份、安莉芳等在内的内衣服饰企业发布2023年中期业绩,多数在净利润等关键财务指标上表现亮眼。比如,都市丽人、爱慕股份、汇洁股份…

NOMA学习

NOMA(非正交多址接入技术) NOMA基本概念上行NOMA与下行NOMA上行NOMA(MAC信道)下行NOMA(BC广播信道) SIC解码顺序叠加编码(SC)与串行干扰消除(SIC)叠加编码&am…

TypeScript类型守卫

概念 在语句的块级作用域【if语句内或条目运算符表达式内】缩小变量类型的一种类型推断的行为。 类型守卫可以帮助我们在块级作用域中获得更为需要的精确变量类型,从而减少不必要的类型断言。 类型判断:typeof实例判断:instanceof字面量相等…

手写Spring:第1章-开篇介绍,手写Spring

文章目录 一、手写Spring二、Spring 生命周期 一、手写Spring 💡 目标:我们该对 Spring 学到什么程度?又该怎么学习呢? 手写简化版 Spring 框架,了解 Spring 核心原理,为后续再深入学习 Spring 打下基础。在…

QMS系统在质量管理中的作用

一、QMS系统的定义: 质量管理体系(QMS)系统是一套用于规范和管理企业质量活动的框架和工具。它包括一系列互相关联的流程、程序和记录,旨在确保产品和服务符合质量要求、法规要求和客户期望,并持续改进质量绩效。 二、…

如何准确高效的对电商数据进行分析

体量庞大的电商数据,采集完成后应对数据进行合理利用,才能将采集到的数据数据物尽其用,这里说的利用数据,包含对数据的价格比较,或者分析使用,比较价格可输出低价分析报告,在品牌控价治理环节发…

关系型数据库和非关系型数据库

关系型数据库是以关系(表格)为基础的数据库,它采用了 SQL(Structured Query Language)作为数据操作语言,常见的关系型数据库包括 MySQL、Oracle、SQL Server 等。 非关系型数据库则是基于文档、键值、列族…

第4章 内核模块实验(iTOP-RK3568开发板驱动开发指南 )

在上一章节我们编写了最简单的helloworld驱动程序。有了驱动程序以后,要如何编译并使用驱动呢。编译驱动有俩种方法,分别是将驱动编译成内核和将驱动编译成内核模块。我们先来学习如何将驱动编译成内核模块、 4.1 设置交叉编译器 1 下载网盘资料下的交…

2023年9月软考高级信息系统项目管理师认证报名找弘博创新

信息系统项目管理师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资…

更改注册表exe值后的惨痛经历

装软件时由于执行性文件打不开,搜索教程更改了exefile的值,最后整个电脑崩了,所有EXE都打不开,折腾了5个小时,什么办法都试了,甚至重置电脑都不让,打算拿电脑城修电脑了,突然搜到了一…

文件上传之图片马混淆绕过与条件竞争

一、图片马混淆绕过 1.上传gif imagecreatefromxxxx函数把图片内容打散,,但是不会影响图片正常显示 $is_upload false; $msg null; if (isset($_POST[submit])){// 获得上传文件的基本信息,文件名,类型,大小&…

C++ continue 语句

C 中的 continue 语句有点像 break 语句。但它不是强迫终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。 对于 for 循环,continue 语句会导致执行条件测试和循环增量部分。对于 while 和 do…while 循环,continue 语句…

MySQL聚簇索引与非聚簇索引

分析&回答 当数据库一条记录里包含多个字段时,一棵B树就只能存储主键,如果检索的是非主键字段,则主键索引失去作用,变成顺序查找了。这时应该在第二个要检索的列上建立第二套索引。这个索引由独立的B树来组织。有两种常见的方…