• PostgreSQL与MySQL,谁更胜一筹


    前言

    PostgreSQL与MySQL都是优秀的开源数据库。在日常学习中,新手可能接触最多的是MySql,但是实际工作中,两者的应用场景其实都很广。我之前的做过上网流量销售业务,用的是MySQL,现在接触广告业务,用的是pg数据库,每天广告的pv数据都是在亿级别,下面简单分享一下这两者之间的一些区别吧,不是很全面,但是可以了解一下,说不定后续用的上,至少吹牛逼的时候,你吹的逼格别人高一些。

    性能对比

    数据库版本和环境配置

    MySQLPG
    数据库版本MySQL 8.0Postgres SQL 13
    硬件配置4核心 16GB4核心 16GB

    测试说明

    SELECT 均为SELECT 按照主键查询,UPDATE按照主键进行UPDATE,INSERT则为一次INSERT一行数据。

    小结

    平均耗时

    Postgres SQL优于MySQL不止数倍

    吞吐量

    Postgres SQL 在SELECT性能上优于MySQL一倍, 在INSERT上优于4-5倍, UPDATE 则优5-6倍

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

    使用场景对比

    MySql的适用场景

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

    Postgres SQL适用的场景

    总的来说,Postgre SQL更适合复杂的数据结构、高级应用和大规模数据集,当然如果数据规模比较小,也可以选择Postgres SQL,无论是什么场景,如果你想用Postgres SQL,总可以找到对应的解决方法。有的人说pg没有mysql好用,只是使用的姿势不太正确,用起来还是很香的。

    优劣势对比

    PG的优势

    性能不同: 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 级别就能保证并发更新的正确性, 并且又有乐观锁的性能。这一点真的很不错,日常广告数据因为它有这一点优势,省了很多的麻烦。

    PG相对MySQL的劣势

    (1)Postgre SQL 存在vacuum,需要根据具体使用场景,来调整vacuum的参数。

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

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

    写在最后

    这里仅仅对两者进行一些对比,两者各有千秋,都很优秀。还是那句话,适用于你们业务场景的选择就是最好的选择。后续对Mysql和Pg的一些容易踩坑的点进行汇总再分享出来,工作中经常容易踩坑。

    好了,今天的内容就分享到这里,更多干货持续输出中。分享不易,觉得有点收获的话,帮忙点赞加在看,你的点赞是我们持续输出的动力,下期再见!

  • 相关阅读:
    rabbitmq代码
    WebSocket实现聊天
    百华鞋业董事长牛兴华应邀出席德国前总统武尔夫欢迎宴会
    记录一次接入xxl-job的踩坑记录
    迅为RK3568开发板Scharr滤波器算子边缘检测
    GTS 中testPeakPssOfAllApps fail 详解
    基于JAVA的农产品生鲜销售管理系统【数据库设计、源码、开题报告】
    Qt元对象系统:QMetaMethod
    [AI] 优先级LRTA*搜索算法 Prioritized-LRTA*
    WPF界面设计
  • 原文地址:https://blog.csdn.net/weixin_42329623/article/details/136244137