为什么高性能场景选用PostgreSQL而不是MySQL?

指尖上的架构 2024-02-26 19:09:56

一、 数据库简介(TL;DR)

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的开发,受到了广大使用者的批评。

2.PostgreSQL

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

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

Note:

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

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

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

二、性能对比

测试环境:

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

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

在吞吐量上而言,PostgreSQL 在SELECT性能上优于MySQL一倍, 在INSERT上优于4-5倍, UPDATE 则优5-6倍。从平均耗时上来看,PostgreSQL优于MySQL不止数倍。尤其从热点行更新上看出,MySQL性能仅为PostgreSQL的1/8左右,耗时也增加了7倍。

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

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

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

1.MySQL适用的场景

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

2.PostgreSQL适用的场景

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

四、总结

1.PostgreSQL相对于MySQL的优势

PostgreSQL在性能上远远好于MYSQL,通过上面的压测数据即可体现,无论是在耗时,还是在整体吞吐量上,有显著优势。PostgreSQL在单行更新上有明显优势,尤其是启用了HOT UPDATE后,性能比MYSQL高了一个数量级。在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨,比较学院化。PostgreSQL主表采用堆表存放,MySQL采用索引组织表,能够支持比MySQL更大的数据量。PostgreSQL的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小。MySQL 的事务隔离级别 repeatable read 并不能阻止常见的并发更新,得加锁才可以,但悲观锁会影响性能,手动实现乐观锁又复杂。而 Postgre SQL 的列里有隐藏的乐观锁 version 字段,默认的 repeatable read 级别就能保证并发更新的正确性,并且又有乐观锁的性能。

2.PostgreSQL之于MySQL相对劣势

PostgreSQL系统表设计相对复杂, 在进行一些系统表的统计、操作等方面比较复杂。PostgreSQL 的索引选择方面,选错的概率稍高一些(实测),而且不能跟mysql 一样方便地使用force_index。PostgreSQL 存在vacuum,需要结合具体使用场景,来调整vacuum的参数。

作者丨winjeg

来源丨稀土掘金:juejin.cn/post/7324362442229891124

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

6 阅读:2819
评论列表
  • 2024-02-27 20:32

    在oracle面前,都是小弟

    用户90xxx29 回复:
    垃圾oracle

指尖上的架构

简介:感谢大家的关注