PostgreSQL和MySQL

  1. 云栖社区>
  2. 博客>
  3. 正文

PostgreSQL和MySQL

悟道之客 2018-05-04 10:49:45 浏览8746 评论0

摘要: 翻译来源:https://www.2ndquadrant.com/en/postgresql/postgresql-vs-mysql/ PostgreSQL和MySQL 之间有着根本的区别。

翻译来源:https://www.2ndquadrant.com/en/postgresql/postgresql-vs-mysql/

2ndquadrant_postgresqlvmysql_display.png

PostgreSQL和MySQL 之间有着根本的区别在评估两个系统之间的差异和折衷之后,必须做出明智的决定。

我们已经提供了 PostgreSQL和MySQL之间最常被评估的特性和功能的相似之处和不同  处:


虽然两个数据库之间存在许多相似性和重叠,但也有非常明显的差异。
我们试图为您提供两者之间公平和准确的比较,但最终有必要评估您的独特场景,并确定哪种数据库最适合您的特定场景。 


开源 

开源软件具有独特的优势 - 成本,灵活性,自由性,安全性和责任性 - 这是专有软件解决方案无法企及的。开放源代码软件可以免费获得,并且可以被任何人重新分配和修改。开源软件具有长期可行性,始终处于技术前沿它由一个由全球组织和个人开发者组成的全球社区创建和支持,其中许多人也靠开源合作和志愿服务等方式生活。

PostgreSQL的

MySQL的

PostgreSQL由PostgreSQL全球开发组开发,PostgreSQL全球开发组由多家公司和个人贡献者组成。


它是免费的开源软件。PostgreSQL是在PostgreSQL许可证下发布的,这是一种自由开源许可证,类似于BSD或MIT许可证。

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提供的复制:

  • 单主机到一个待机

  • 单主到多备用

  • 单个主站到一个备用站到一个或多个备用站

  • 循环复制(A到B到C并返回到A)

  • 掌握掌握


性能

性能是一个只能通过评估潜在情景的指标来衡量的领域,因为它取决于特定用户的纯粹要求和应用程序的性质。

PostgreSQL的

MySQL的

PostgreSQL广泛应用于读写速度至关重要且需要验证数据的大型系统中。此外,它还支持各种性能优化,这些优化仅在商业解决方案(如地理空间数据支持,不带读锁的并发性等)(如Oracle,SQL Server)等商业解决方案中可用。


总体而言,PostgreSQL性能在需要执行复杂查询的系统中得到了最佳利用。


PostgreSQL在OLTP / OLAP系统中表现良好,当需要读/写速度并需要广泛的数据分析时。


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

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数据

访问方法

支持所有标准

支持所有标准

复制

可用多种复制技术:

 
  • 单主机到一个待机

  • 单主到多备用

  • 热备份/流式复制

  • 双向复制

  • 逻辑日志流式复制

标准主备备份复制:

 
  • 单主机到一个待机

  • 单主到多备用

  • 单个主站到一个备用站到一个或多个备用站

  • 循环复制(A到B到C并返回到A)

  • 掌握掌握

物化视图

支持的

不支持

临时表

支持的

支持的

地理空间数据

支持的

支持的

编程语言

支持的

不支持

可扩展型系统

支持的

不支持
【云栖快讯】阿里巴巴小程序繁星计划,20亿补贴第一弹云应用免费申请,限量从速!  详情请点击

网友评论