当前位置: 首页 > news >正文

时代变了,MySQL 早已不是最流行的数据库了

以下文章来源于古时的风筝 ,作者风筝

在StackOverflow 上看到2024年技术趋势,关于数据库的部分,PostgreSQL 是开发人员使用最多的数据库,超过 MySQL 了。虽然在国内好像不是这样。
在这里插入图片描述

PostgreSQL 在 2018 年的开发者调查中首次亮相,当时有 33% 的开发者正在使用它。而当年最受欢迎的还是 MySQL,有 59% 的开发者在使用。而六年后的今天,49% 的开发人员使用 PostgreSQL,连续第二年成为最受欢迎的数据库。

PostgreSQL 是什么

PostgreSQL 的历史可以追溯到加利福尼亚大学伯克利分校的 Ingres 项目。1985年,开始了以 post-Ingres 计划为原型进行研发,也就是 Postgres 的最初是版本。
在这里插入图片描述

其目的是通过增加最少的功能来完全支持所需要的类型。

这些功能包括类型定义和完整描述数据关系的能力。完整描述数据关系的能力之前虽广为使用但却需要由用户来维护。Postgres的数据库能够"理解"关系,并可以使用一定的规则以自然方式在相关的表中检索信息。

直到 1994年,Postgres95 增加了 SQL 语言解释器,后在1996年更名为 PostgreSQL。

PostgreSQL 和 MySQL 一样,也是完全开源的,也是一个关系型数据库。

作为一个优秀的关系型数据库,PostgreSQL 支持这么多特性,怪不得现在使用的人这么多。

  • 支持自定义数据类型和继承,允许用户定义新的类型和基于现有类型的子类型。
  • 支持多种编程语言编写的函数,包括 PL/pgSQL、PL/Perl、PL/Python 等。
  • 提供了自定义索引方法,包括 B树、哈希表和 GiST 索引。
  • 支持多版本并发控制(MVCC),减少了读取锁的依赖,提高了并发性能。
  • 支持规则(RULE),允许查询重写,常用于视图操作。
  • 内置丰富的数据类型,如任意精度数值、无限制长度文本、几何图元、IP地址、数组、JSON数据、枚举类型和 XML 数据。
  • 支持用户定义对象,如索引、操作符、聚合函数、数据域、数据类型转换和会话。
  • 支持继承,允许数据表结构和属性从一个“父”表继承。
  • 支持关系完整性约束、视图、内外部连接、子查询、事务处理等。
  • 支持 SSL 加密连接、二进制/文本大对象存储、在线备份、数据域、表分区、表空间、保存点、时刻点恢复、二阶段提交等。
  • 支持 TOAST 技术,用于存储超大属性。

看上去是完全覆盖 MySQL 的功能的,就比如 PostgreSQL 是直接支持数组类型的,而 MySQL 中你就要转一下。

PostgreSQL和MySQL的区别

这两个数据库接的头两把交椅之间有什么区别呢?

数据一致性和事务处理

PostgreSQL 和MySQL 都实现了完整的ACID特性(原子性、一致性、隔离性、持久性),并且采用了多版本并发控制(MVCC)来管理事务。

MySQL的默认存储引擎MyISAM曾经不支持事务,但是现在InnoDB已经成为MySQL的默认引擎,并且支持事务了。

但是其在处理复杂事务时的性能和一致性仍然不如PostgreSQL稳健。

扩展性和灵活性

PostgreSQL 扩展性和灵活性是非常强大的。开发者可以使用PostgreSQL自定义数据类型、操作符、索引方法,甚至编写存储过程和触发器来扩展数据库的功能。

而MySQL虽然也支持一些扩展功能,但相比之下,它的灵活性较为有限。MySQL的设计更注重易用性和性能优化,但这也使得它在处理复杂数据类型和自定义需求时显得有些捉襟见肘。

性能方面

在性能上,MySQL的优势在于其读写性能,尤其是在处理大量简单查询时,MySQL的速度非常快。这使得MySQL成为了许多Web应用的首选,尤其是那些以读取为主的应用。

而PostgreSQL则在处理复杂查询和大数据集时表现优异。PostgreSQL的查询优化器非常强大,它能够对复杂的SQL查询进行优化,确保在高负载下依然保持出色的性能。对于那些需要执行大量数据分析、数据聚合的应用来说,PostgreSQL无疑是更好的选择。

数据库引擎和存储

MySQL最大的特点之一是它支持多种存储引擎,如InnoDB、MyISAM。开发者可以根据需求选择最适合的引擎,例如InnoDB提供了事务支持和外键约束,而MyISAM则在读取性能上更具优势。

而PostgreSQL采用统一的存储架构,所有数据都存储在一个共享的存储引擎中。这种设计保证了数据的一致性和完整性,同时也简化了开发和运维的工作。虽然没有MySQL那样多样的选择,但PostgreSQL凭借其强大的功能和灵活性,依然能够满足大多数应用场景的需求。

PostgreSQL 更受欢迎的原因

看过上面,好像也没有看出PostgreSQL 比 MySQL 强在哪里啊,那为什么却超越了MySQL,成为最受欢迎的数据库了呢?

原因是以下几个方面:

数据完整性和可靠性

PostgreSQL在数据完整性和可靠性方面的优势是它获得青睐的重要原因之一。

PostgreSQL的设计理念一直是优先考虑数据的准确性和完整性,而不是牺牲这些特性来换取性能。这一点对于那些需要高数据一致性的应用来说至关重要,比如金融行业、政府机构和医疗领域。

强大的查询能力

在处理复杂查询时,PostgreSQL的表现远超MySQL。

其优化器可以处理非常复杂的SQL查询,包括子查询、联接和窗口函数等。PostgreSQL还支持丰富的索引类型,如B树、哈希、GiST、GIN、BRIN等,这使得它在大数据集上的查询性能非常出色。

对于需要进行复杂数据分析和实时决策支持的企业来说,PostgreSQL是一个理想的选择。

扩展性和自定义能力

PostgreSQL的扩展能力是它能够脱颖而出的另一个关键因素。开发者可以根据业务需求,对PostgreSQL进行深度定制,添加自定义的数据类型、函数、操作符,甚至是索引方式。

这种灵活性使得PostgreSQL能够适应各种复杂的业务场景,从而赢得了众多企业的青睐。

举个例子,许多使用地理信息系统(GIS)的公司都选择PostgreSQL,因为它可以通过PostGIS扩展,提供强大的空间数据处理能力。

类似地,许多大数据处理和分析系统也选择了PostgreSQL,因为它可以通过自定义扩展来优化查询和数据处理流程。

高标准的SQL兼容性

PostgreSQL一直以来都以严格遵循SQL标准而著称,这使得它在需要与其他数据库系统兼容或迁移数据时非常方便。MySQL虽然在功能上也在不断追赶,但在SQL标准的兼容性上,PostgreSQL依然保持领先。

此外,PostgreSQL还支持丰富的数据类型,包括数组、JSON、XML等,甚至可以存储和查询地理空间数据。对于那些需要处理非结构化数据或复杂数据类型的应用来说,PostgreSQL无疑提供了更多的选择和更大的灵活性。

云原生和大数据支持

随着云计算和大数据技术的快速发展,PostgreSQL的高扩展性和分布式处理能力使其在云原生应用中表现出色。许多云服务提供商,如AWS、Google Cloud和Azure,都提供了托管的PostgreSQL服务,这让开发者可以轻松地将PostgreSQL集成到他们的云应用中。

此外,PostgreSQL还支持分布式数据库和并行查询,这使得它在处理大规模数据集和高并发场景时,依然能够保持良好的性能和稳定性。这一点对于那些需要处理海量数据的互联网公司来说尤为重要。

但是国内云平台还是应用 MySQL 的更多一些。

开源精神和社区支持

PostgreSQL的开源精神和强大的社区支持也是它获得广泛认可的重要原因。与某些开源项目不同,PostgreSQL始终坚持完全开源,没有分割成商业版本和开源版本。这种透明和开放的开发模式吸引了全球无数的开发者和企业用户参与到PostgreSQL的社区中来。

PostgreSQL社区非常活跃,经常发布新的版本和功能,不断提升数据库的性能和稳定性。同时,社区中也有大量的教程、文档和工具可以帮助开发者更快地上手和使用PostgreSQL。

结语

如果你觉得文章很棒,可以转发,评论该文章;如果文章有问题,请留言或私信告诉我,我会在第一时间对内容进行调整,这将会帮助每一位想要学习网络基础的小伙伴,感谢!抱拳!

相关文章:

时代变了,MySQL 早已不是最流行的数据库了

以下文章来源于古时的风筝 ,作者风筝 在StackOverflow 上看到2024年技术趋势,关于数据库的部分,PostgreSQL 是开发人员使用最多的数据库,超过 MySQL 了。虽然在国内好像不是这样。 PostgreSQL 在 2018 年的开发者调查中首次亮相…...

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下,有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet...

代码随想录算法训练营DAY09之动态规划(一)基础题目

理论基础: 如果某一问题有很多重叠子问题,使用动态规划是最有效的。 动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。 例子: 例如&a…...

线性系统分析

一、定义 (1)叠加性 若 且 则称该系统具有叠加性。 叠加性:系统的一个输入不影响系统对其他输入的响应。 (2)均匀性 若 对任意常数a下式都成立 则称该系统具有均匀性。 均匀性:系统能够保持对输入信号的缩放因子不变。 (3)线性系统 若一个系统同时具有叠加性和…...

Ubuntu 20.04 部署 NET8 Web - Systemd 的方式 达到外网访问的目的

1.Ubuntu服务器环境安装 1.1 增加微软包安装源 wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb1.2 Install the .NET SDK # 更新本地软件包列表。原理&am…...

线程池(ThreadPool):使用ExecutorService、ThreadPoolExecutor等线程池管理并发任务以及底层实现原理

线程池(ThreadPool)是一种通过预先创建和维护一组线程的机制,用来高效管理并发任务。线程池不仅能减少创建和销毁线程的开销,还能更好地控制并发任务的执行。Java 中提供了多种方式来管理线程池,其中包括 ExecutorServ…...

人力资源数据集分析(二)_随机森林与逻辑回归

数据入口:人力资源分析数据集 - Heywhale.com 数据说明 字段说明EmpID唯一的员工IDAge年龄AgeGroup年龄组Attrition是否离职BusinessTravel出差:很少、频繁、不出差DailyRate日薪Department任职部门:研发部门、销售部门、人力资源部门Dista…...

【30天玩转python】数据库操作

数据库操作 数据库是应用程序中用于存储和管理数据的核心组件。Python 提供了多种与数据库交互的方式,支持不同类型的数据库,包括关系型数据库(如 MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。在这篇…...

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录 一、导言 二、相关工作 1、基于Transformer的点云配准 2、针对点云的局部注意力 三、PTT 1、KPconv提取特征 2、Tree Transformer Encoder 3、Decoder 4、估计姿态 5、损失函数 四、实验 1、对比不同Backbone 2、运行时间对比 3、对比不同PTT方法下RR指标的…...

C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)

巧用哈希表与前缀和&#xff0c;前缀和差为k的两个序号之间的数组就是满足条件的子数组&#xff0c;用哈希表来存放每个序号的前缀和。 前缀和就是头元素到当前序号子数组元素的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_…...

【读书笔记-《30天自制操作系统》-23】Day24

本篇内容依然比较简单&#xff0c;主要是优化窗口功能以及开发定时器应用程序。首先是优化窗口的切换功能&#xff0c;实现通过键盘和鼠标切换窗口&#xff0c;然后是实现通过鼠标关闭窗口。接着实现不同窗口输入状态的切换&#xff0c;最后是实现定时器的API与应用程序。 1.…...

XML:DOM4j解析XML

XML简介&#xff1a; 什么是XML&#xff1a;XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据&#xff0c;而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情&#xff0c;XML被设计用来结构化、存储以及传输信息。 XML可以发明…...

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用&#xff0c; 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象&#xff1a; Service是一种可以访问 Pod逻辑分组…...

【Docker Nexus3】maven 私库

1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…...

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

MySQL:用户管理

添加用户 create user usernamelocalhost identified by user_password;删除用户 drop user usernamelocalhost;查看所有用户 输入格式 select user,host from mysql.user; 输出 mysql> select user,host from mysql.user; ----------------------------- | user …...

论文《Mixture of Weak Strong Experts on Graphs》笔记

【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构&#xff0c;称为Mixture of weak and strong experts&#xff08;Mowst&#xff09;&#xff0c;通过将轻量级的多层感知机&#xff08;MLP&#xff09;作为弱专家和现成的GNN作为强专家相结合&#xff0c;以处理图中的节…...

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;3&#xff09;】 1、前言说明2、流程说明3、现场提交&#xff08;线下&#xff09;4、网上提交1-起诉书样例2-起诉书编写&#xff08;1&#xff09;原告信息&#xff1a;&…...

数据结构(Day14)

一、学习内容 结构体 概念 引入&#xff1a;定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题&#xff1a;没有学生、雪糕 数据类型 解决&…...

Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?

我们在使用Mac系统读取U盘的过程中往往会遇到一个问题&#xff0c;那就是U盘插进电脑无法显示&#xff0c;或者只能读取不能编辑。出现这种情况的原因就一般是格式错误。 很多小伙伴在解决这种问题的时候会选择使用U盘读写工具&#xff0c;那么哪一种读写工具比较好呢&#xf…...

面试题杂记

1.问&#xff1a;react的Fabric实现原理答&#xff1a;实际上就是虚拟dom那一套东西&#xff0c;只不过换了个名词2.问&#xff1a;react的fiber架构实现原理答&#xff1a;在react15及以前的协调过程是基于栈&#xff08;stack-based&#xff09;的&#xff0c;缺点是一个组件…...

Qwen3.5-2B模型环境搭建保姆级教程:从Anaconda安装到模型调用

Qwen3.5-2B模型环境搭建保姆级教程&#xff1a;从Anaconda安装到模型调用 1. 开篇&#xff1a;为什么选择这个教程&#xff1f; 如果你刚接触AI大模型&#xff0c;可能会被各种环境配置问题搞得头大。别担心&#xff0c;这篇教程就是为你准备的。我们将从最基础的Anaconda安装…...

RotaryDial库:嵌入式脉冲拨号信号采集与处理

1. RotaryDial 库深度解析&#xff1a;面向嵌入式系统的脉冲拨号信号采集与处理1.1 脉冲拨号技术原理与工程价值脉冲拨号&#xff08;Pulse Dialing&#xff09;&#xff0c;又称环路断续拨号&#xff08;Loop Disconnect Dialing&#xff09;&#xff0c;是模拟电话系统中最早…...

OpenClaw安全实践:用SecGPT-14B自动生成每周漏洞简报

OpenClaw安全实践&#xff1a;用SecGPT-14B自动生成每周漏洞简报 1. 为什么需要自动化漏洞简报 作为安全工程师&#xff0c;每周手动整理CVE漏洞报告已经成为我的例行工作。这个过程通常需要&#xff1a; 从NVD、CVE Details等平台爬取最新漏洞数据人工筛选高风险条目评估影…...

探秘 Awesome Rust:你的Rust学习与实践终极宝典 [特殊字符]

探秘 Awesome Rust&#xff1a;你的Rust学习与实践终极宝典 &#x1f680; Awesome Rust是一个精心策划的Rust代码和资源集合&#xff0c;为开发者提供了完整的Rust生态系统指南。无论你是Rust新手还是经验丰富的开发者&#xff0c;这个项目都能为你节省大量寻找优质工具和库的…...

新疆某工程围岩等级,包含以下7列,均为数值型数据

一、文件结构 文件包含1个工作表&#xff1a;Sheet1仅 Sheet1 包含数据&#xff0c;其余为空表。二、数据列说明 Sheet1 包含以下7列&#xff0c;均为数值型数据&#xff1a;列名&#xff08;英文&#xff09;列名&#xff08;中文推测&#xff09;数据类型说明VPR未知参数1数值…...

代码分享】“基因集单通路的泛癌GSEA富集分析

【代码分享]基因集单通路的泛癌GSEA富集分析#资料 如图最近在整理TCGA多组学数据时&#xff0c;发现不少小伙伴对通路活性评估有需求。今天分享一个快速实现泛癌GSEA分析的方法&#xff0c;特别适合需要观察某个特定通路在多个癌症类型中激活状态的情况。这个方法不需要复杂的编…...

javaweb企业多模块系统 企业门户网站的设计与实现

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点扩展性设计安全防护措施项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户模块 注册与登录&…...

阶跃星辰新版模型上线,Token 消耗最高降 56%

4 月 2 日消息&#xff0c;阶跃星辰新版模型 Step 3.5 Flash 2603 正式上线并向 Step Plan 用户开放。该模型优化升级&#xff0c;带来核心改进&#xff0c;Token 消耗最高降 56%。新版模型正式上线阶跃星辰宣布新版模型 Step 3.5 Flash 2603 上线&#xff0c;向所有 Step Plan…...

自动驾驶控制-PIDLQR控制路径跟踪仿真 Simulink和Carsim联合仿真,横向控制...

自动驾驶控制-PID&LQR控制路径跟踪仿真 Simulink和Carsim联合仿真&#xff0c;横向控制为前馈反馈lqr&#xff0c;纵向为位置-速度双PID控制 对于减小误差&#xff0c;可以联合后轮转向/四轮转向算法&#xff08;小店中有&#xff09; 下图为Simulink模型截图&#xff0c;跟…...