社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

为什么高性能场景选用 Postgres SQL 而不推荐使用 MySQL?

Java架构师技术 • 6 月前 • 173 次点击  
以下文章来源Java架构师技术,回复”Spring“获惊喜礼包

责编:架构君,来源:Java1234

上一篇推文:无需魔法,国内可直接使用官方ChatGPT-4!

大家好,我是Java架构师


一、 数据库简介 TLDR;

1.1 MySQL

MySQL声称自己是最流行的开源数据库,它属于最流行的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。LAMP中的M指的就是MySQL。构建在LAMP上的应用都会使用MySQL。

MySQL最初是由MySQL AB开发的,然后在2008年以10亿美金的价格卖给了Sun公司,Sun公司又在2010年被Oracle收购。Oracle收购导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发,受到了广大使用者的批评。

1.2 PostgreSQL

PostgreSQL标榜自己是世界上最先进的开源数据库,属于关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统,最初是1985年在加利福尼亚大学伯克利分校开发的,作为Ingres数据库的后继。PostgreSQL是完全由社区驱动的开源项目。

它提供了单个完整功能的版本,而不像MySQL那样提供了多个不同的社区版、商业版与企业版。PostgreSQL基于自由的BSD/MIT许可,组织可以使用、复制、修改和重新分发代码,只需要提供一个版权声明即可。

Note:

MySQL的层级关系:实例 -> 数据库 -> 表

Postgres 的层级关系:实例 -> 数据库 -> Schema -> 表

schema 可以理解为命名空间,不影响使用

二、性能对比

测试环境

MySQL:

  • 硬件配置:4核心 16GB内存
  • 版本:MySQL 8.0

Postgres SQL:

  • 硬件配置:4核心 16GB内存
  • 版本:Postgres SQL 13

此次压测数据, SELECT 均为SELECT 按照主键查询,UPDATE按照主键进行UPDATE,INSERT则为一次INSERT一行数据。从压测数据上来看,我们可以得出以下几个结论:

  • 在吞吐量上而言,Postgres SQL 在SELECT性能上优于MySQL一倍, 在INSERT上优于4-5倍, UPDATE 则优5-6倍

  • 从平均耗时上来看, Postgres SQL优于MySQL不止数倍

  • 尤其从热点行更新上看出,MySQL性能仅为Postgres SQL的,1/8左右,耗时也增加了7倍

三、适用场景,如何选择?

相对于Postgres MySQL更简单, 所以有着更高的流行度, 在技术资料,以及技术组件支持上,支持的也更完善一些, 但不意味着它并不是不能替代的,于笔者而言, MYSQL更像用于中小企业、个人的一款数据库工具, 因为会的人多,文档资料比较完善,所以入手难度低。

但这些并不意味着MYSQL是最好的。

从上图来看Postgres SQL的发展势头非常迅猛,目前已经隐隐有追上MySQL的趋势, 而MySQL相对而言,使用情况受欢迎度一直呈现下降趋势。

MySQL适用的场景

MySQL适用于简单的应用场景,如电子商务、博客、网站等, 大中小型系统均可以使用MySQL,它最高支持千万级别到数亿级别的数据量,但是在高性能要求的情况下,比如较快的响应和较高的吞吐量的时候,MYSQL的性能稍微捉襟见肘,另外,在查询条件比较复杂、业务吞吐量要求不高,响应时长无要求,的时候,可以选择MYSQL。

Postgres SQL适用的场景

总的来说,Postgre SQL更适合复杂的数据结构、高级应用和大规模数据集,当然如果数据规模比较小,也可以选择Postgres SQL,无论是什么场景,如果你想用Postgres SQL,总可以找到对应的解决方法,有且仅有,在查询条件比较复杂,的时候不太适用,因为根据我们实际线上的业务表现是 Postgre SQL可能会选错索引。

四、总结

PostgreSQL相对于MySQL的优势:

  • Postgre SQL在性能上远远好于MYSQL, 通过上面的压测数据即可体现,无论是在耗时,还是在整体吞吐量上,有显著优势

  • Postgre SQL在单行更新上有明显优势,尤其是启用了HOT UPDATE后, 性能比MYSQL高了一个数量级

  • 在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨,比较学院化;

  • Postgre SQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。

  • Postgre SQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。

  • MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新, 得加锁才可以, 但悲观锁会影响性能, 手动实现乐观锁又复杂. 而 Postgre SQL 的列里有隐藏的乐观锁 version 字段, 默认的 repeatable read 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。

Postgre SQL之于MySQL相对劣势:

  • Postgre SQL系统表设计相对复杂, 在进行一些系统表的统计、操作等方面比较复杂

  • Postgre SQL 的索引选择方面,选错的概率稍高一些(实测), 而且不能跟mysql 一样方便的使用force_index

  • Postgre SQL 存在vacuum,需要结合具体使用场景,来调整vacuum的参数


欢迎有需要的同学试试,如果本文对您有帮助,也请帮忙点个 赞 + 在看 啦!❤️



    

在 GitHub猿 还有更多优质项目系统学习资源,欢迎分享给其他同学吧!

最后,再次推荐下我们的AI星

为了跟上AI时代我干了一件事儿,我创建了一个知识星球社群:ChartGPT与副业。想带着大家一起探索ChatGPT和新的AI时代


有很多小伙伴搞不定ChatGPT账号,于是我们决定,凡是这四天之内加入ChatPGT的小伙伴,我们直接送一个正常可用的永久ChatGPT独立账户。


不光是增长速度最快,我们的星球品质也绝对经得起考验,短短一个月时间,我们的课程团队发布了8个专栏、18个副业项目:


简单说下这个星球能给大家提供什么:


1、不断分享如何使用ChatGPT来完成各种任务,让你更高效地使用ChatGPT,以及副业思考、变现思路、创业案例、落地案例分享。

2、分享ChatGPT的使用方法、最新资讯、商业价值。

3、探讨未来关于ChatGPT的机遇,共同成长。

4、帮助大家解决ChatGPT遇到的问题。

5、提供一整年的售后服务,一起搞副业


星球福利:


1、加入星球4天后,就送ChatGPT独立账号。

2、邀请你加入ChatGPT会员交流群。

3、赠送一份完整的ChatGPT手册和66个ChatGPT副业赚钱手册。


其它福利还在筹划中... 不过,我给你大家保证,加入星球后,收获的价值会远远大于今天加入的门票费用 !


本星球第一期原价399,目前属于试运营,早鸟价169,每超过50人涨价10元,星球马上要来一波大的涨价,如果你还在犹豫,可能最后就要以更高价格加入了。。


早就是优势。建议大家尽早以便宜的价格加入!

最后,整理了500多套项目,赠送读者。扫码下方二维码,后台回复赚钱即可获取。

--END--

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

往期惊喜:

牛逼啊!接私活必备的 400 个开源项目!赶快收藏吧(附源码合集)!

何谓架构?

一个很酷的后台权限管理系统

一个很酷的博客系统

ChatGPT 4.0 国内直接用 !

如何做到无感刷新Token?
一款SpringBoot+Vue3快速开发平台、自研工作流引擎!
你用过Mybatis的动态SQL后,就知道写SQL有多爽了!
服务老是被攻击?教你设计一套安全的接口访问策略,非常稳健!


扫码关注我们的Java架构师技术

带你全面深入Java

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/192613