Code前端首页关于Code前端联系我们

MySQL和PostgreSQL的一些特性对比

terry 2年前 (2023-09-26) 阅读数 54 #数据库

本文介绍MySQL和PostgreSQL的一些特性对比,以便大家了解两者的优缺点,做出更好的选择。目前国内的情况是,越来越多的互联网公司使用MySQL,但是PostgreSQL的使用比例并不高,但我想你看到PG的新特性后一定会爱上它的。当然,MySQL作为最流行的数据库,仍然会吸引大多数人的关注。 PostgreSQL 标榜自己是世界上最先进的开源数据库。就连PG粉丝或者一些PGER都声称可以和Oracle媲美(虽然PG很强大,但是和Oracle还是有差距的,当然PG的优势也很明显),而且没有那么贵和傲慢的客服。当然,PG完整而强大的功能首先从9版本开始,在10版本中迅速发展,增加了很多功能和特性。 PostgreSQL 是一个完全由社区驱动的开源项目。其核心代码由社区维护,商业版本均为基于PG的二次开发。

MySQL 号称是最受欢迎的开源数据。看看目前国内的情况,这是名副其实的。 MySQL经过数次出售后,最终落入Oracle手中。正是因为这个原因,MySQL之父Monty修改了MySQL的源代码,创建了MariaDB分支。

说到这里,当然不得不提另一个重要的分支,来自Percana公司的Percona Server。 Percona更擅长MySQL运维,开发了很多非常实用的运维工具,并且都已经开源并回馈社区,比如XtraBackup和pt-Toolkit的工具。

MySQL和PostgreSQL的简单对比可以看出,MySQL背后有成熟的商业公司(Oracle有自己的MySQL企业版,是付费的,有很多社区版没有的功能),而PostgreSQL背后有是一个庞大的志愿开发团体。相比之下 PostgreSQL 的商业性较差。没有所谓的PostgreSQL企业版,但是有一些基于PG开发的企业级PG数据库。

下面我将从以下几个方面来讲解MySQL和PostgreSQL的异同和优缺点。由于作者水平有限,如有不当之处还请大家批评指正。 1。开源

PostgreSQL:世界上最先进的开源数据库。

开源许可证:PostgreSQL 根据自由 BSD/MIT 许可证获得许可,该许可证允许组织只要提供版权声明即可使用、复制、修改和重新分发代码。

PG的开源协议特别灵活。任何公司或个人都可以将PG作为产品出售,而不必像MySQL一样更改大部分代码,然后就可以作为企业产品使用。

MySQL:世界上最受欢迎的开源数据库。

开源协议:核心代码基于GPL或商业许可证。

MySQL的开源协议是基于GPL协议的。任何公司都可以免费使用它。修改后的代码和衍生代码不得作为商业闭源软件发布和销售。 MySQL的版权在Oracle手里,Oracle可以把它推开。商业闭源版本。 如上图所示,开源软件协议 2. ACID支持

PostgreSQL支持事务的强一致性,良好的事务保证,全面支持ACID功能。

MySQL 仅支持 innodb 引擎中的事务。交易一致性保证可以根据实际需要进行调整。为了最大限度地保护数据,MySQL可以配置双一模式,其对ACID的支持比PG稍弱。 3。 SQL标准支持

PostgreSQL支持几乎所有的SQL标准,支持类型相当丰富。 MySQL只支持部分SQL标准,支持类型比PG稍弱。 4。复制

MySQL复制是基于binlog的逻辑异步复制,无法实现同步复制。

复制模式:

  • 一主一备。
  • 一主,多备。
  • 级联复制。
  • 循环复制。
  • 主到主复制。

数据流转的优点: 通过增量通道数据的订阅和消费,可以将数据同步到kafka,数据流转可以通过kafka进行。

所有MySQL高可用方案都是基于binlog进行同步的,基于MySQL的分布式数据也是基于MySQL binlog来实现的。 Binlog是MySQL生态系统最基本的技术实现。

PostgreSQL可以实现同步、异步、半同步复制以及基于日志的逻辑复制,并可以实现表级的订阅和发布。

复制模式:

  • 一主一备。
  • 一主,多备。
  • 级联复制。
  • 热备/流式复制。
  • 逻辑复制。

数据流的优点:通过逻辑复制实现消息订阅和消费,数据可以同步到kafka,通过kafka实现数据流。 5。并发控制

PostgreSQL通过MVCC的实现,有效地解决了并发问题,从而实现了非常高的并发。

PG采用基于XID的MVCC机制,新旧数据存储在一起。新旧数据存储在一起,必须定期触发VACUUM,这会造成冗余IO和数据库对象锁定开销,导致数据库整体并发性下降。另外,如果VACUUM不及时清理,可能会导致数据膨胀。

当然,PostgreSQL 还有另一个影响。为了保证事务的强一致性,待处理的事务会影响所有表的DUST SUM,导致表膨胀。

MySQL 仅支持 InnoDB 中的 MVCC。 Innodb的MVCC机制是基于回滚段的,但是MySQL的间隙锁作用更大,锁住的数据更多。 6. 性能1. PostgreSQL

1) PostgreSQL广泛应用于读写速度高、数据一致性高的大型系统中。此外,它还支持各种性能优化,这些性能优化当然只有在商业解决方案中才能实现,例如对地理空间数据的支持、无读锁的并发等等。

2) PostgreSQL 性能最适合需要执行复杂查询的系统。

3)PostgreSQL在OLTP/OLAP系统中在读写速度和大数据分析方面表现良好。基于PG的GP数据库在数据仓库方面表现良好。

4) PostgreSQL 也适用于商业智能应用程序,但更适合需要快速读/写速度的数据仓库和数据分析应用程序。 2。 MySQL

1) MySQL 是一个被广泛选择的基于 Web 的项目,仅需要数据库来进行简单的数据事务。然而,当负载较重或尝试执行复杂查询时,MySQL 的性能通常很差。

2) MySQL 读取速度在 OLTP 系统中表现良好。

3)MySQL + InnoDB 为 OLTP 场景提供了非常好的读写速度。总体来说,MySQL在高并发场景下表现良好。

4) MySQL 非常可靠,并且与商业智能应用程序配合良好,因为商业智能应用程序通常会进行大量读取。 7。实施高可用性技术1。 PostgreSQL

1)基于流复制的异步和同步主从。

2) – 基于流复制的Keepalive。

3) –基于流式复制的repmgr。

4) –基于流复制的patroni+etcd。

5) 共享存储HA(corosync+pacemaker)。

6) Postgres-XC。

7) Postgres-XL。

8)中间件实现:pgpool、pgcluster、slony、plploxy。 2、MySQL

1)主从复制。

2)主要,主要,复杂。

3)MHA。

4) LVS+保持活动。

5)MGR分布式数据库,多点写入【不推荐】,基于paxos协议。

6)PXC分布式数据库,多点写入【不推荐】,基于Token Ring协议。

7)INNODB CLUSTER【8.0新技术,基于MGR实现,上层封装命令】,基于paxos协议。

8)中间件实现:mycat。 8。外部数据源

PostgreSQL FDW – 【foreign datawrapper的缩写,可以称为外部包装。

PostgreSQL 不支持多个数据引擎。但它支持扩展组件的扩展,并使用一种称为FDW的技术来读写Oracle、Hadoop、MongoDB、SQLServer、Excel、CSV文件等作为外部表。因此,它可以在大数据和关系数据库之间提供良好的连接。

MySQL:无。 9。数据存储和数据类型

PG主表存储在堆表中。存储的数据量较大,数据访问方式类似于Oracle的堆表。

MySQL 使用索引来组织表。 MySQL必须有一个主键索引。所有数据访问都是通过主键实现的。访问二级索引时,需要扫描两次索引(主键和二级索引)。 10。 PostgreSQL 和 MySQL 优缺点比较1. PostgreSQL相对于MySQL的优势

1)SQL的默认实现比MySQL更好,函数实现更严格。

2)存储过程的特性支持比MySQL更好,并且具有在本地缓存执行计划的能力。

3)对表连接的支持比较完善,优化功能比较完善,支持多种索引类型,复杂查询能力较强。

4)PG主表存储在堆表中,而MySQL使用索引来组织表,可以支持比MySQL更大的数据量。

5)PG的主从复制都是物理复制。相比MySQL基于binlog的逻辑复制,数据一致性更可靠,​​复制性能更高,对主机性能影响更小。

6)MySQL的存储引擎插件机制存在复杂的锁定机制影响并发的问题,但PG不存在。

7)PG可以实现对外部数据源的查询,支持的数据源类型丰富。

8)PG原生的逻辑复制可以实现表级别的订阅和发布,并且可以通过kafka实现数据流转,无需其他组件。

9)PG支持三种表连接方式,嵌套循环,哈希连接,排序合并,而MySQL只支持嵌套循环。

10)PostgreSQL源码写得很清楚,比MySQL容易阅读得多。

11) PostgreSQL 通过 PostGIS 扩展支持地理空间数据。地理空间数据具有直接在数据库级别可用的专用类型和函数,使开发人员更容易分析和编码。

12) 具有丰富可扩展组件的扩展系统,以贡献者身份发布。

13) PostgreSQL 支持 JSON 和其他 NoSQL 功能,例如本机 XML 支持和使用 HSTORE 的键值对。它还支持对 JSON 数据建立索引以加快访问速度,尤其是版本 10 JSONB 更是强大。

14) PostgreSQL 完全免费,并且遵循 BSD 协议。如果你修改 PostgreSQL 然后把它卖钱,没有人会关心你。这个非常重要。这表明PostgreSQL数据库不会被其他公司使用。管理。相反,MySQL现在主要由Oracle公司控制。 2。 MySQL相对于PG的优势

1)Innodb基于回滚段的MVCC机制优于PG新旧数据存储在一起的基于XID的MVCC机制。新旧数据存储在一起,必须定期触发VACUUM,这会造成冗余IO和数据库对象锁定开销,导致数据库整体并发性下降。另外,如果VACUUM不及时清理,可能会导致数据膨胀。

2) MySQL 使用索引来组织表。这种存储方式非常适合基于主键匹配的查询和删除操作,但在表结构设计上存在局限性。

3)MySQL的优化器比较简单,系统表、运算符、数据类型的实现都非常精简,非常适合简单的查询操作。

4)MySQL在中国比PG更流行,但是PG在中国显得有点孤独。

5)MySQL的存储引擎插件机制使其应用场景更加全面。例如,除了innodb适合事务处理场景外,myisam还适合静态数据查询场景。 总结

总的来说,开源数据库还不是很完善,商业数据库Oracle在架构和功能上还是完善得多。从应用场景来看,PG更适合严格的企业应用场景(如金融、电信、ERP、CRM),但又不仅限于此。 PostgreSQL的json、jsonb、hstore等数据格式特别适合一些大数据格式。分析; MySQL更适合业务逻辑相对简单、数据可靠性要求不高的互联网场景(如Google、Facebook、阿里巴巴)。当然,MySQL现在正在开发innodb引擎,并且其功能运行良好。

MySQL 和 PostgreSQL 是复杂的开源关系数据库。本文只是作者根据自己的经验对PG和MySQL的理解。难免有不合适的事情。如果有不合适的地方请指正。

MySQL在国内的发展已经非常成熟,但是如果转向PostgreSQL,你会发现另一个世界。学院派的风格和丰富的特色一定会给你带来各种惊喜。

作者:郭庆辉

来源:东方龙马(ID:OLM-FWH)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门