一、 数据库简介 TLDR
1.1 MySQL
1.2 PostgreSQL
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不止数倍,ChatGPT中文网站:https://aigc.cxyquan.com -
尤其从热点行更新上看出,MySQL性能仅为Postgres SQL的,1/8左右,耗时也增加了7倍
三、适用场景,如何选择?
相对于Postgres MySQL更简单, 所以有着更高的流行度, 在技术资料,以及技术组件支持上,支持的也更完善一些, 但不意味着它并不是不能替代的,于笔者而言, MYSQL更像用于中小企业、个人的一款数据库工具, 因为会的人多,文档资料比较完善,所以入手难度低。
但这些并不意味着MYSQL是最好的。
从上图来看Postgres SQL的发展势头非常迅猛,目前已经隐隐有追上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的参数
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88724.html