优秀数据库模式迁移工具的发展历程
数据库模式迁移可能是应用程序开发中风险最大的领域——因为这是一个困难的、有风险的和痛苦的过程。数据库模式迁移工具的存在是为了减轻这种痛苦,并且已经取得了长足的进步:从基本的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是唯一一个提供组织范围管理功能的工具,除了使数据库更改更高效和更安全之外,还可以确保数据安全和治理。
相关文章:

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

【深度学习】数据集最常见的问题及其解决方案
简介 如果您还没有听过,请告诉您一个事实,作为一名数据科学家,您应该始终站在一个角落跟你说:“你的结果与你的数据一样好。” 尝试通过提高模型能力来弥补糟糕的数据是许多人会犯的错误。这相当于你因为原来的汽车使用了劣质汽…...

Excel文件带有密码的只读模式,如何设置?
Excel带有密码的除了打开密码和工作表保护以外,其实还有一种可以设置密码的方法,今天给大家分享如何设置带有密码的只读模式。 打开excel文件,将文件进行【另存为】设置,然后停留在保存路径的界面中,我们点击下面的工…...
【Qt之json文件】json文件介绍及相关读写类介绍、示例
JSON介绍 JSON(JavaScript Object Notation)是一种源自Javascript的编码对象数据的轻量级的数据交换格式,易于理解和编写,JSON但现在已广泛用作互联网上的数据交换格式。 Qt提供了处理JSON数据的支持。Qt中的JSON支持提供了一个易…...
arp 隔离
目录 问题查找解决方式参考 问题 linux 在使用双网卡系统时,当这两个不同网段的网口接到同一个交换机上,会出现 eth0 的 arp 请求,会在 eth1 上收到并回复,相当于自己检测到了自己的 ip。 查找 linux 的底层,默认情…...
数据结构与算法(文章链接汇总)
数据结构与算法(一):概述与复杂度分析 数据结构与算法(二):数组与链表 数据结构与算法(三):栈与队列 数据结构与算法(四):哈希表 数据…...

代码随想录算法训练营第五十九天 | 647. 回文子串、516.最长回文子序列
647. 回文子串 链接: 代码随想录 (1)代码 516.最长回文子序列 链接: 代码随想录 (1)代码...

非关系型数据库-Redis
一、缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存…...
HTML基本讲解与使用
目录 html的由来: 什么是HTML: HTML的主要特点: HTML文档结构: HTML元素: HTML元素属性: 文本和格式化: 链接和图像: 列表: 表格: 表单: 嵌套和结构: HTML注释: 样式…...
linux uname详解 -s -r -a 查看内核版本
简介 uname命令用于显示操作系统信息,例如内核版本、主机名、处理器类型等 uname常用的有-a,-r,-rs 参数 --help 显示帮助。-a 或--all 显示全部信息,包括内核名、主机名、内核版本、处理器类型和硬件架构等…...

Linux常用命令——cmp命令
在线Linux命令查询工具 cmp 比较两个文件是否有差异 补充说明 cmp命令用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是…...

C语言之排序
1.冒泡排序 冒泡排序就不多说了,只需要两层循环嵌套,两两比较确定相对正确的顺序即可。 2.插入排序 插入排序的思想就是每一次向后寻找一个再将其与前面有序的部分进行对比,寻找合适位置插入。 这里关键要避免让前移超出目前读取的数字&…...

GitHub-使用 Git工具 创建密钥id_rsa.pub
快速导航 步骤1 打开Git Bash步骤2 输入指令【ssh-keygen】步骤3 打开创建的公钥文件步骤4 复制其中所有内容步骤5 打开GitHub中的Setting界面步骤6 添加SSH keys 步骤1 打开Git Bash 打开Git Bash 工具 步骤2 输入指令【ssh-keygen】 输入指令【ssh-keygen】,并…...

C++多重、多层、分层继承
在本文中,您将学习C 编程中的不同继承模型:带有示例的多继承,多层和分层继承。 继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类(现有类)的功能。C 编程中有多种…...
ThingsBoard的数据分析-自定义节点来订阅kafka stream的消息
1、概述 在ThingsBoard官方文档中有说明:ThingsBoard 规则引擎支持对传入遥测数据的基本分析,例如阈值交叉。规则引擎背后的想法是提供基于设备属性或数据本身将数据从物联网设备路由到不同插件的功能。 然而,大多数现实生活中的用例也需要高级分析的支持:机器学习、预测分…...
Python WSGI HTTP Server - Gunicorn
基本概念 Gunicorn,也称为“Green Unicorn”,是一个Python WSGI HTTP Server,用于运行Python Web应用程序。WSGI(Web Server Gateway Interface)是Python应用程序和Web服务器之间的一个接口,允许应用程序和…...
[论文笔记]GPT-2
引言 今天继续GPT系列论文, 这次是Language Models are Unsupervised Multitask Learners,即GPT-2,中文题目的意思是 语言模型是无监督多任务学习器。 自然语言任务,比如问答、机器翻译、阅读理解和摘要,是在任务相关数据集上利用监督学习的典型方法。作者展示了语言模型…...
第十三届蓝桥杯模拟赛第三期
A.填空题 问题描述 请问十六进制数 2021ABCD 对应的十进制是多少? 参考答案 539077581 import java.math.*; public class Main {public static void main(String[] args) {String strnew BigInteger("2021ABCD",16).toString(10);System.out.printl…...
代碼隨想錄算法訓練營|第四十四天|01背包问题 二维、01背包问题 一维、416. 分割等和子集。刷题心得(c++)
目录 01背包問題 - DP二維數組 01 背包問題描述 暴力解 動態規劃 確認DP數組以及下標的含意 確定遞推公式 01背包问题 一维 一维DP 数組(滾動数組) 動態規劃五部曲 定義DP数組以及其下標含意 遞推公式 初始化 遍歷順序 讀題 416. 分割等和子集 自己看到题目的第…...

【算法训练-回溯算法 零】回溯算法解题框架
抽象地说,解决一个回溯问题,实际上就是遍历一棵决策树的过程,树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍,把叶子节点上的答案都收集起来,就能得到所有的合法答案。站在回溯树的一个节点上,你…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...