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

news2024/11/15 1:38:35

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

在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。

结语

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

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

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

相关文章

极越联手百度这你受得了吗!SU7还能稳坐“7字辈”头把交椅?

文/王俣祺 导语:自从今年上半年小米SU7标榜为“年轻人的第一台纯电轿车”,各家车企全都坐不住了。尤其是与小米“颇有渊源”的吉利,从极氪再到领克,目标已经可以说是路人皆知了。现在极越07也来了,可以看出吉利也是下了…

Python游戏开发中的16个关键概念

大家好!今天我们要聊的是Python游戏开发中的一些关键概念。无论是初学者还是有一定经验的开发者,了解这些概念都将有助于你更好地掌握游戏开发的基础。接下来,我们将从简单的概念入手,逐步过渡到更复杂的技巧。 文末有惊喜福利 1.…

如何选择适合客户运营团队的帮助中心搭建工具?8款工具盘点

在竞争激烈的商业环境中,客户运营团队需要高效、便捷的工具来搭建帮助中心,以提升客户服务质量和用户体验。选择合适的帮助中心搭建工具,不仅能提高团队工作效率,还能增强客户满意度和忠诚度。本文将为您盘点八款适合客户运营团队…

FC优化配置

1.集群扩容CNA时打开bmc 2.给rhel7虚拟机安装tools-需要重启虚拟机 3.FC上创建集群 资源池右击创建集群(物理机大于10台,分业务类型创建集群) (解决集群内主机挂了,动态调整) (解决集群内个别…

vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)

端口 nmap主机发现 nmap -sn 192.168.159.120/24 ​ Nmap scan report for 192.168.159.120 Host is up (0.00020s latency). ​ 120是新出现的机器,他就是靶机 nmap端口扫描 nmap -Pn 192.168.159.120 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nma…

C#为任意组件开发登录功能的记录

非常简单,直接给出代码: 数据库操作类 这个无需多言就是简单的包含了数据操作的内容,允许你在这一个类中写完关于本地数据库或者云数据库操作的逻辑,与登录逻辑分开哦。 注意,如果你的软件要给别人运行使用&#xf…

电脑连接手机热点只能登陆qq和微信 浏览器无法正常上网的原因

电脑连接手机热点只能登陆qq和微信 浏览器无法正常上网的原因 浏览器有报错dns错误 但是火绒无法正常修复 DNS配置异常 chrome报错DNS_PROBE_FINISHED_BAD_CONFIG 错误原因在ipv4dns服务器他的地址,如果是自动获取 是192.168.208.143 和ipv4地址冲突,导致不正常,我查看本机…

【南方科技大学】CS315 Computer Security 【Lab3 Format String Vulnerability】

目录 Lab OverviewLab TasksTask 1: The Vulnerable ProgramTask 2: Understanding the Layout of the StackTask 3: Crash the ProgramTask 4: Print Out the Server Program’s MemoryTask 5: Change the Server Program’s MemoryTask 6: Inject Malicious Code into the Se…

【第十一章:Sentosa_DSML社区版-机器学习分类】

目录 11.1 逻辑回归分类 11.2 决策树分类 11.3 梯度提升决策树分类 11.4 XGBoost分类 11.5 随机森林分类 11.6 朴素贝叶斯分类 11.7 支持向量机分类 11.8 多层感知机分类 11.9 LightGBM分类 11.10 因子分解机分类 11.11 AdaBoost分类 11.12 KNN分类 【第十一章&…

С++第十三节课 string初体验

一、string类的相关函数 string实际上也就是一个管理字符的顺序表! 如果我们需要遍历一个字符串,怎么实现? 我们可以通过下标访问操作符 size实现字符串的遍历! int main() {string s1("hello world");// 遍历一个字…

玩具车检测系统源码分享

玩具车检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

zynq SDK 关于SD卡报错

在修改了BD的部分代码之后,重新综合工程生成bit,之后刷新hdf文件,在SDK端就出现了SD卡相关的函数未定义的报错: Description Resource Path Location Type E:\Work\VivadoPrj\Prj1\project_1\project_1.sdk\Test\Debug/…/src/hel…

arm开发板通信

c语言复习 查询Ubuntu版本(18.04)和内核(5.4) 查询使用软件的版本号 arm开发板通信- 直播视频-- 项目第二天下午 2024-09-20 linux和windows下操作开发板前提是开发板中已经导入系统 以下是具体操作 linux下开发板的操作 li…

Java项目实战II基于Java+Spring Boot+MySQL的读书笔记共享平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在信息爆炸…

无人机黑飞打击技术详解

随着无人机技术的普及,无人机“黑飞”(未经授权或违反规定的飞行)现象日益严重,对公共安全、隐私保护及重要设施安全构成了严重威胁。为有效应对这一挑战,各国政府和安全机构纷纷研发并部署了一系列无人机黑飞打击技术…

龙头名企HR数字创新:超8成参调企业上线电子签

近日,法大大与人力资源智享会(以下简称“智享会”)联合发布了《第七届人力资源共享服务中心研究报告》(点击阅读及下载:最新!《第七届人力资源共享服务中心研究报告》重磅来袭),该报…

反转字符串中的单词--力扣151

反转字符串中的单词 题目思路代码 题目 思路 题目的难点在于首先要清除多余的空格,并且单词之间要留一个空格,首单词前和末尾单词后不能有多余空格。我们使用双指针去除所有的空格,然后在处理完一个单词后手动加一个单词。具体思路是当快指针…

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维

GBDT算法原理及其公式推导过程

GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是一种集成学习方法,主要用于回归和分类任务。它的基本思想是通过迭代地构建一系列弱学习器(通常是决策树),并将这些弱学习器组合成一个强…

C++11 新的类功能

前言 上一期我们对右值引用和完美转发作了介绍,本期我们接着上期继续介绍C11的新的类功能! 目录 前言 • 新的类功能 默认成员函数 类成员变量初始化 强制生成默认函数的关键字default 禁止生成默认成员函数的关键字delete 继承和多态中的final…