翻译来源:https://www.2ndquadrant.com/en/postgresql/postgresql-vs-mysql/
PostgreSQL和MySQL 之间有着根本的区别。在评估两个系统之间的差异和折衷之后,必须做出明智的决定。
我们已经提供了 PostgreSQL和MySQL之间最常被评估的特性和功能的相似之处和不同 之处:
虽然两个数据库之间存在许多相似性和重叠,但也有非常明显的差异。我们试图为您提供两者之间公平和准确的比较,但最终有必要评估您的独特场景,并确定哪种数据库最适合您的特定场景。
开源
开源软件具有独特的优势 - 成本,灵活性,自由性,安全性和责任性 - 这是专有软件解决方案无法企及的。开放源代码软件可以免费获得,并且可以被任何人重新分配和修改。开源软件具有长期可行性,始终处于技术前沿。它由一个由全球组织和个人开发者组成的全球社区创建和支持,其中许多人也靠开源合作和志愿服务等方式生活。
PostgreSQL的 |
MySQL的 |
PostgreSQL由PostgreSQL全球开发组开发,PostgreSQL全球开发组由多家公司和个人贡献者组成。
|
MySQL开发项目已经根据GNU通用公共许可证条款提供了其源代码以及各种专有协议。
它现在由Oracle公司拥有,并提供多个专有用途的付费版本。 |
ACID合规性
ACID(Atomicity,Consistency,Isolation,Durability)是一组数据库事务的属性。ACID合规性确保即使在单个事务中发生多个更改时也不会在系统发生故障时丢失数据或错误传达数据。
PostgreSQL的 |
MySQL的 |
PostgreSQL完全符合ACID标准,并确保满足所有要求。 |
使用InnoDB和NDB集群存储引擎时,MySQL仅符合ACID标准。 |
SQL合规性
SQL合规性是数据库必须满足并实现所有结构化查询语言准则和标准的标准。当公司想要为应用程序使用异构数据库时,这一点非常重要。
具有SQL合规性使得将数据从一个SQL兼容数据库移动到另一个(例如Oracle到PostgreSQL或SQL Server)非常容易。
PostgreSQL的 |
MySQL的 |
PostgreSQL在很大程度上是SQL兼容的。每个功能的一致性水平在手册的附录D中已清楚地列出,并且任何偏差都清楚地记录在PostgreSQL手册的“参考”部分。
PostgreSQL支持SQL:2011的大部分主要功能。在满足核心一致性所需的179个必需功能中,PostgreSQL至少符合160个。此外,还有一大串支持的可选功能。值得注意的是,在撰写本文时,没有任何数据库管理系统的当前版本声明完全符合Core SQL:2011。 |
MySQL在部分版本上部分兼容(例如,不支持CHECK约束)。 我们的产品主要目标之一是继续致力于遵守SQL标准,但不会牺牲速度或可靠性。我们不害怕添加SQL扩展或支持非SQL功能,如果这大大增加了我们用户群中大部分用户的MySQL服务器的可用性。 |
复制
数据库复制是将数据从一台计算机或服务器中的数据频繁地电子复制到另一台数据库中的数据库,以便所有用户共享相同级别的信息。其结果是一个分布式数据库,用户可以在其中访问与其任务相关的数据,而不会干扰他人的工作。
PostgreSQL的 |
MySQL的 |
PostgreSQL支持Master-Standby复制,并引入了重要的增强功能,从而产生极其快速的WAL处理,为备用服务器提供近乎实时的复制和热备份功能。 PostgreSQL提供的复本:
|
MySQL支持主备备份。 MySQL提供的复制:
|
性能
性能是一个只能通过评估潜在情景的指标来衡量的领域,因为它取决于特定用户的纯粹要求和应用程序的性质。
PostgreSQL的 |
MySQL的 |
PostgreSQL广泛应用于读写速度至关重要且需要验证数据的大型系统中。此外,它还支持各种性能优化,这些优化仅在商业解决方案(如地理空间数据支持,不带读锁的并发性等)(如Oracle,SQL Server)等商业解决方案中可用。
|
MySQL是一种广泛选择的基于Web的项目,只需简单地为简单的数据交易提供数据库。然而,通常情况下,当MySQL因重负载或尝试完成复杂查询而表现不佳时,表现不佳。
当只需要读取速度时,MySQL在OLAP / OLTP系统中表现良好。
MySQL + InnoDB为OLTP场景提供了非常好的读/写速度。总体而言,MySQL在高并发情况下表现良好。
由于商业智能应用程序通常是重读的,因此MySQL是可靠的,并且与商业智能应用程序配合良好。 |
安全
数据库安全性是指用于保护和保护数据库或DBM免遭非法使用,恶意威胁和攻击的集体措施。它是一个广泛的术语,包括确保数据库环境内安全的多种过程,工具和方法。
PostgreSQL的 |
MySQL的 |
PostgreSQL具有角色并继承角色来设置和维护权限。PostgreSQL具有本地SSL支持连接来加密客户端/服务器通信。它还具有行级安全性。
除此之外,PostgreSQL还附带了一个名为SE-PostgreSQL的内置增强功能,可以根据SELinux安全策略提供额外的访问控制。 |
MySQL根据访问控制列表(ACL)为所有连接,查询和用户可能尝试执行的其他操作实现安全性。还有一些支持MySQL客户端和服务器之间的SSL加密连接。 |
云托管
随着越来越多的企业选择将数据转移到云中,寻找支持数据库的云提供商的能力变得越来越重要。云主机允许服务器具有弹性,使您可以快速扩展或收缩其容量。它还可以减少潜在的停机时间,同时轻松管理高峰负载。
PostgreSQL的 |
MySQL的 |
受到所有主要云服务提供商的支持,包括阿里巴巴,亚马逊,谷歌和微软。 |
受到所有主要云服务提供商的支持,包括阿里巴巴,亚马逊,谷歌和微软。 |
社区支持
PostgreSQL的 |
MySQL的 |
PostgreSQL拥有一个非常强大和活跃的社区,不断改进现有功能,同时其创新的提交者努力确保它仍然是具有最新尖端功能和安全性的最先进数据库。 |
MySQL拥有大量的贡献者社区,尤其是在Oracle收购之后,他们主要关注于偶尔出现的一些新功能来维护现有功能。 |
并发支持
并发意味着多个用户可以同时访问数据。这是开发一个需要多个用户同时访问数据的系统时考虑的核心功能之一,因为它增强了许多人同时在多个位置访问和使用数据库的能力。
PostgreSQL的 |
MySQL的 |
PostgreSQL通过其MVCC实现有效地解决了并发问题,实现了非常高水平的并发性。 |
MySQL只在InnoDB中支持MVCC。 |
NoSQL特性/ JSON支持
NoSQL和JSON都非常流行,NoSQL数据库变得越来越普遍。JSON是一种简单的数据格式,它允许程序员存储和传递跨系统的值,列表和键值映射集。
PostgreSQL的 |
MySQL的 |
PostgreSQL支持JSON和其他NoSQL特性,如本机XML支持和HSTORE的键值对。它还支持索引JSON数据以加快访问速度。 |
MySQL具有JSON数据类型支持,但没有其他NoSQL功能。它不支持JSON索引。 |
物化视图/临时表
物化视图是一个数据库对象,它包含查询结果,可根据需要从原始基表中更新查询结果。它可以被认为是数据库的“缓存”。
临时表存储的数据不需要在创建它的会话生命周期之后持续存在。与物化视图不同的主要方式是后者提供定期更新数据的能力,从而为该用例提供更高的效率。
PostgreSQL的 |
MySQL的 |
支持物化视图和临时表。 |
支持临时表,但不支持物化视图。 |
地理空间数据支持
地理空间数据是数据库保存并可用于分析的所有地理数据点。它是关于物理对象的信息,可以用地理坐标系中的数值表示。
PostgreSQL的 |
MySQL的 |
PostgreSQL通过PostGIS扩展支持地理空间数据。地理空间数据有专门的类型和功能,可直接在数据库级别使用,使开发人员可以更轻松地进行分析和编码。 |
内置地理空间数据支持。 |
编程语言支持
编程语言支持可帮助广泛的开发人员以他们最熟练的语言执行多项任务。开发人员可以根据具体情况自由决定是在服务器还是在客户端执行给定的过程,因为服务器支持各种不同的数据库功能的编程语言。编程语言倾向于给开发者更多的权力。
PostgreSQL的 |
MySQL的 |
PostgreSQL支持各种编程语言,包括:C / C ++,Java,JavaScript,.Net,R,Perl,Python,Ruby,Tcl等等; 甚至可以在单独的进程中运行用户提供的代码(即作为后台工作人员运行)。 |
一些支持服务器端编程的单一语言是不可扩展的。 |
可扩展型系统
支持可扩展类型系统的数据库可以通过多种方式进行扩展,如添加新的数据类型,函数,运算符,聚集函数,索引方法和过程语言。
PostgreSQL的 |
MySQL的 |
PostgreSQL有几个专用于扩展性的功能。可以添加新的类型,新的功能,新的索引类型等。 |
不支持可扩展性。 |
比较总结
以下是PostgreSQL与MySQL的对比图:
特征 |
PostgreSQL的 |
MySQL的 |
开源 |
完全开源 |
开放源代码,但由Oracle拥有并提供商业版本 |
ACID合规性 |
完全符合ACID |
有些版本是兼容的 |
SQL合规性 |
几乎完全符合 |
有些版本是兼容的 |
并发支持 |
MVCC实现支持多个请求而不读取锁 |
支持某些版本。 |
安全 |
通过SSL支持从头开始安全 |
某些版本的SSL支持 |
NoSQL / JSON支持 |
多个支持的功能 |
仅支持JSON数据 |
访问方法 |
支持所有标准 |
支持所有标准 |
复制 |
可用多种复制技术:
|
标准主备备份复制:
|
物化视图 |
支持的 |
不支持 |
临时表 |
支持的 |
支持的 |
地理空间数据 |
支持的 |
支持的 |
编程语言 |
支持的 |
不支持 |
可扩展型系统 |
支持的 |
不支持 |