导读:2023 年 MySQL 与 PostgreSQL 之最新对比。
PostgreSQL 和 MySQL 都是可靠、安全且可扩展的数据库系统,已经存在并发展多年。它们都有独特的优点,也有独特的缺点,只是哪种更适合特定的用户需求。
本文将对它们进行比较,以帮助各位开发者在 2023 年做项目开发时做出明智的决定。
背景
关于选择关系数据库管理系统 (RDBMS),两个流行的选择是 PostgreSQL 和 MySQL。两者都已经存在了几十年,并被实践证明都是高度可靠、安全和可扩展的系统。
但是,它们具有不同的优点与缺点,需要根据实际用例进行选择。本文将比较 PostgreSQL 和 MySQL,以帮助各位在 2023 年项目开发时做出明智的决策。
历史与发展
PostgreSQL 是加州大学计算机科学系开发的 ORDBMS(对象关系数据库管理系统)。
PostgreSQL 于 1996 年首次发布,现已成为一种广泛使用的开源 RDBMS。它以严格遵守 SQL 标准、有着强大的功能集以及对数据完整性和安全性的苛刻而闻名于世。
另一个产品,MySQL 于 1995 年首次发布。它的名字来源于两个首字母缩写词,“My 和 SQL”。“My”是联合创始人女儿的名字,而 SQL 是一种编程语言。
由于其高性能和易用性而被广泛用于基于 Web 的应用程序。随着时间的推移,Oracle 收购了这个开源数据库管理系统 MySQL,并将其变成了商业化产品。
以下我们整理了两个数据库的沿革与发展:
PostgreSQL 历史
INGRES于1977年开发
之后的 PostgreSQL 由 Stonebraker Michael 与他的同事于 1986 年继续开发
1990 年 Postgres 支持真正的 pgSQL/PL 和 ACID
1995 年,它作为 Postgres95 版本发布
Postgres95 于 1996 年重新发布为 PostgreSQL 6.0
1998 年到 2001 年间,GUC、MVCC、过程语言加载器和连接语法控件被并入 PostgreSQL
从 2002 年到 2006 年,PostgreSQL 的 7.2 到 8.2 版本,开始包括角色和 dblink、非阻塞 VACUUM 和模式支持等新功能
2009年发布PostgreSQL8.4,2010年发布PostgreSQL9.0
MySQL 历史
MySQL 于 1995 年由瑞典公司 MySQL AB 创建
2008年MySQL AB被Sun以10亿美元收购
2010 年,Sun 被Oracle收购,Oracle后来收购了 MySQL
MySQL 于 2012 年由其创始人 Widenius Michael 在 Monty Program Ab 下创建了 新分支 MariaDB
2013 年,很多 MySQL 发行版被 MariaDB 取代
2013 年 SkySQL 与 Monty Program Ab 合并
2014年SkySQL Ab更名为MariaDB公司
两个数据库系统的特性
PostgreSQL 和 MySQL 都提供了广泛的关系数据库管理系统功能,但两者之间存在一些关键性差异:
数据类型:PostgreSQL 支持更广泛的高级数据类型,包括数组、hstore(键值存储)和JSONB(二进制 JSON),它们提供更灵活和高效的数据存储选项。另一方面,MySQL 具有更精简的数据类型集,适用于 Web 应用程序。
地理空间支持:PostgreSQL 支持地理空间数据非常好,它包括一组丰富的数据类型、函数和用于处理地理数据的运算符。MySQL,虽然它有一些地理空间支持,但在这个领域可能PostgreSQL更强大。
索引:在 MySQL 中,默认索引类型是 B 树,它非常适合大多数数据库用例。PostgreSQL 拥有比 MySQL 更完善的索引系统,包括支持 B-tree、GiST(Generalized Search Tree)和 GIN(Generalized Inverted Index)索引,这些技术为优化查询性能和数据检索提供了更多选项。
复制:PostgreSQL 和 MySQL 均支持数据库复制,但复制的方法与选项则不相同。PostgreSQL支持多主复制,而MySQL主要支持主从复制。MySQL 最近引入了一种名为Group Replication 的新复制模型,但它仍然是相对较新的特性,还存在着一些局限性。
事务:PostgreSQL 和MySQL InnoDB 利用 MVCC(多版本并发控制)来处理并发数据访问。但是 PostgreSQL 提供了改进的事务管理功能,例如事务隔离级别、原子事务和保存点。相比之下,MySQL 的事务管理选项比较有限。PostgreSQL 可能更适合需要高并发或复杂事务逻辑的应用程序。
存储过程:PostgreSQL 和MySQL 都支持存储过程,但存储过程的语言和功能不同。PostgreSQL 支持用各种语言编写的存储过程,包括 PL/pgSQL、PL/Tcl、PL/Perl 等。而 MySQL 主要支持用 SQL 编写的存储过程。
扩展:PostgreSQL 具有强大的扩展框架,允许开发人员添加自定义功能并扩展数据库的核心功能。MySQL 对扩展有一些支持,但 MySQL 的可扩展性级别与 PostgreSQL 相比并不在一个层别。
更改数据捕获能力
在变更数据捕获(CDC)方面,MySQL 二进制日志和 PostgreSQL 预写日志 (WAL) 都可以捕获对数据库所做的更改。但是,两者的具体功能和用途有所不同。
表现
MySQL以其高性能和处理大数据的能力而闻名。它已针对读取繁重的工作负载进行了优化,并具有有助于提高查询性能的快速索引系统。但是MySQL结合写操作会出现表级锁定争用等并发问题,导致自己的性能下降。
InnoDB 存储引擎用于解决表级锁定问题。它是 MySQL 生态系统中最受欢迎和使用最广泛的存储引擎之一。InnoDB 支持行级锁定,能够提高混合工作负载的并发性。
此外,最近开发的高性能存储引擎 MyRocks 进一步提高了 MySQL 处理写入密集型工作负载的能力。
而 PostgreSQL被设计为更通用,它可以处理读取密集型和写入密集型工作负载,但性能略低于 MySQL,后者针对读取密集型工作负载进行了优化。PostgreSQL 在最近的版本中提高了性能,尤其是在复杂查询和数据处理方面。
此外与 MySQL 相比,PostgreSQL 具有更高级的索引系统,可以提高复杂查询的性能。PostgreSQL 还支持高级数据类型,例如数组和 JSONB,这可以提高数据存储和检索的效率。
最后的结果,PostgreSQL 和 MySQL 的性能仍取决于各种因素,例如硬件、数据的大小以及查询复杂性。
在两者之间进行选择时,请考虑自己的应用程序的具体需求,并对自己的数据和工作负载进行性能测试,以确定最合适的系统。
可扩展性
MySQL 和 PostgreSQL 都可以扩展,但在可扩展性方面它们各有优缺点。
MySQL 通常因其水平可伸缩性而受到青睐,这意味着它可以通过向数据库集群添加更多节点来进行横向扩展。它非常适合需要处理大量并发连接的 Web 应用程序。
另一方面,PostgreSQL 以其垂直可扩展性着称,这意味着它可以通过向单个节点添加更多资源(如内存和 CPU)来处理大量数据和处理能力。它还通过分片等技术支持水平扩展,允许将大型数据集拆分到多个节点。PostgreSQL 是需要复杂查询和交易的应用程序以及数据仓库和商业智能工作负载的首选。
在可扩展性方面,请考虑您的应用程序的特定要求。如果需要处理大量的并发连接,需要横向扩展,MySQL 可能是更好的选择。但是,如果您需要复杂的事务和查询,PostgreSQL 可能会更好。
成本
时间已经到了 2023 年,PostgreSQL 仍然是完全开源和社区驱动的,而 MySQL 在许可证方面的历史则颇为复杂。MySQL 最初是由 MySQL AB 作为商业产品开发的,提供免费和付费两个版本。2010 年Oracle收购 MySQL AB 引起了开发人员对其开源状态未来的一些担忧。然后,原始 MySQL 的几个开源分支(包括 MariaDB 和 Percona)走出去,帮助开发者们缓解了这些担忧。
什么时候使用 MySQL?
虽然 PostgreSQL 具有许多高级特性,并且通常被认为是比 MySQL 更先进、更复杂的数据库管理系统,但它也有一些缺点。
PostgreSQL 的一些常见缺点包括:
尽管具有先进的特性和功能,PostgreSQL 尚未达到 MySQL 的普及与广泛使用水平。这导致 PostgreSQL 生态系统中的第三方工具数量减少,经验丰富的开发人员或数据库管理员数量也不多。
由于其功能先进,PostgreSQL 的设置和管理比 MySQL 更复杂,因此更适合经验丰富的数据库管理员与开发人员。
由于其更复杂的体系结构和功能,PostgreSQL 在某些用例中可能比 MySQL 要慢。
PostgreSQL 可能需要比 MySQL 消耗更多的资源,尤其是在内存和 CPU 使用方面。
虽然 PostgreSQL 是开源的,但由于其高级功能和增加的资源需求,实施与维护成本仍然很高。
PostgreSQL 为每个新的客户端连接创建一个新进程,这需要分配大量内存,通常每个连接大约 10 MB。此架构旨在提供不同客户端之间更高的安全性和隔离性,通常被认为是更好的性能、可靠性和可扩展性的折衷型方案。
PostgreSQL 旨在优先考虑可扩展性、标准合规性、可伸缩性与数据完整性。有时,与 MySQL 相比,这些功能会降低性能,尤其是在简单的读取密集型工作负载里。但确切的性能差异取决于各种因素,例如数据大小、查询的复杂性以及所使用的硬件性能。
哪种迁移更常见:MySQL 到 PostgreSQL 还是 PostgreSQL 到 MySQL?
MySQL 和 PostgreSQL 之间的迁移频率各不相同,取决于各个组织的需要和要求。
一些组织可能会从 MySQL 迁移到 PostgreSQL,以利用后者的高级功能、更好的 SQL 合规性和开源兼容性。PostgreSQL 在特定行业也更为普遍,例如金融服务、政府和数据仓库,在这些行业中,性能、可扩展性和安全性是必不可少的考虑因素。
另一方面,其他公司可能会从 PostgreSQL 迁移到 MySQL,因为后者的简单性、广泛的支持社区和较低的实施成本。
根据各种指标,迁移趋势是从 MySQL 迁移到 PostgreSQL的事例较多。
迁移工具的可用性:许多开源和商业迁移工具可用于协助将数据从 MySQL 迁移到 PostgreSQL。而将数据从 PostgreSQL 迁移到 MySQL 的工具则越来越少。
在线资源:与其他方式相比,有关从 MySQL 迁移到 PostgreSQL 的在线教程和资源的可用性变得更高。
社区增长:PostgreSQL 社区的增长速度一直快于 MySQL 社区,这表明人们对使用 PostgreSQL 的兴趣更大,而不再是 MySQL 。
开源贡献:对 PostgreSQL 的开源贡献数量正在增加,这表明越来越多的人正在为这项技术投入时间和资源,并发现它对人们的需求更有用。
企业采用:一些世界上最大和数据最密集的组织,如Cisco、富士通和美国联邦航空管理局 (FAA),已公开表示他们已从 MySQL 成功迁移到了 PostgreSQL。
用户调查:行业分析师与数据库专家的调查数据表明,越来越多的人正在考虑或计划从 MySQL 迁移到 PostgreSQL。
这些事实仅表明,从 MySQL 到 PostgreSQL 的迁移发生的次数多于从其他方式发生的迁移,但这可能仅在某些情况下是正确的。
结论
PostgreSQL 和 MySQL 是强大的关系数据库管理系统,有着自己独特的功能,也有自己的局限性。
开发者应根据项目的具体要求决定使用其一,例如数据的性质与数量、查询的复杂性以及性能和可扩展性等需求。
由于 PostgreSQL 和 MySQL 都会在 2023 年取得进一步的进步,因此开发者了解它们的最新发展是非常必要的。
我们希望本文能帮助各位开发者区分这两个开源数据库管理系统。感谢大家的阅读,如果您喜欢这篇文章,请点赞转发。有什么补充的,欢迎在评论区发表大作!
作者:洛逸
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。