博客
PostgreSQL的与MySQL
抽象形状抽象形状
加入27,000多个网络安全通讯订阅者

关系数据模型将数据组织在行和列的表中,并在数据库管理工具中占主导地位。如今,还有其他数据模型,包括NoSQL和NewSQL,但是关系数据库管理系统(RDBMS)仍然在存储和管理数据方面起着主导作用。 

本文比较并对比了两个广泛实施的开源RDBMS:PostgreSQL和MySQL。我们'我们将重点探讨每种数据类型的使用,它们的优缺点以及最佳使用它们的情况。 

PostgreSQL的是一个对象关系数据库管理系统(ORDBMS),重点在于可扩展性和标准合规性。 的MySQL是一个开源关系数据库管理系统(RDBMS)。所有主要云服务提供商(包括Amazon,Google,& Microsoft.

的MySQL被认为要快得多,但功能却更少。 PostgreSQL的被认为具有更深的功能集。一些程序员认为PostgreSQL与Oracle类似,并且它经常被那些了解Oracle产品的人所青睐。

的MySQL具有强大的追随者,喜欢它的速度和快速创建新项目的能力。事实是,这两个产品的当前版本MySQL 8和PostgreSQL 12(取决于发行版)具有足够的速度,功能和动态的新功能。让'仔细看看。

什么是数据库管理系统(DBMS)?

数据库是信息或数据簇的模型。数据库管理系统是与数据库交互的程序。 DBMS控制对数据库的访问,写入数据,运行查询以及执行与数据库管理有关的其他任务。一个普遍的误解是数据库和数据库管理系统是同一件事。 

数据库管理系统和数据库之间的区别如下:

  • 数据库管理系统是与数据库交互的软件。
  • 而数据库是数据的集合,而没有'不一定必须将其存储在计算机上。

数据库系统具有基础模型,这些模型构建了如何存储和访问数据的结构。关系数据库管理系统采用关系数据模型。这意味着数据被组织成表格,正式称为关系。关系是表中的一组元组(行),每个元组共享一组属性(列)。

每个属性(列)都分配有一种数据类型,该数据类型指示该属性中允许的条目类型。不同的RDBMS具有不同的数据类型'始终可互换。

结构化查询语言(SQL)是关系数据库管理和查询其数据的一种流行方法。也就是说,许多RDBMS具有自己的SQL方言,这些方言可能具有某些限制和/或扩展。通常,构建扩展是为了允许用户执行使用标准SQL很难执行的复杂查询。您可能会从编程语言中熟悉的常见数据类型包括日期,字符串,整数和布尔值。

在某些DBMS中,数字数据(如整数)是带符号的,这意味着它们可以表示正数和负数,而其他数据是无符号的,则它们仅表示正数。

什么是数据库约束?

数据库管理员可以限制可以将哪些值输入到属性(列)或整个元组(行)中。常见的SQL约束是:

  • 独特: 列中不能有两个条目相同
  • 不为空: 列不能为空值
  • 首要的关键: 列中的每个条目都不为空,并且是唯一的
  • 外键: 引用另一个表中的主键
  • 检查: 限制可以在列中输入的值的范围
  • 默认: 提供给定列的默认值
  • 指数: 实现更快的数据检索

PostgreSQL的

PostgreSQL的(或Postgres)被认为是最先进的开源关系数据库,由PostgreSQL全球开发小组及其多产社区支持维护。其目标是高度可扩展且符合标准。符合标准可以很容易地将数据库切换到另一种SQL Server。它具有表继承和函数重载等功能,通常与对象数据库相关联。使用PostgreSQL的公司包括Apple,BioPharm,Etsy,IMDB,Macworld,Debian,Fujitsu,Red Hat,Sun Microsystem,Cisco和Skype。

PostgreSQL的开发了强大的功能来提高性能。它们包括:

  • 几种索引功能,包括功能性,仅索引扫描,部分,功能性和多索引计数。
  • 异步提交。
  • 基于成本的优化器。
  • 异步以及同步复制。

最新版本增加了70多个新的性能增强。它们是承诺通过删除可识别的问题区域来提高性能的直接结果。该程序可以在运行时压缩和解压缩信息以优化磁盘空间。最近开发的另一个高级功能是能够为整个系统,每个用户或事务设置异步提交的功能。这使不同种类的事务可以一起运行,而无需事先选择要为每个表使用哪种存储引擎类型。

由于具有多版本并发控制(MVCC),Postgres在并发方面非常高效,并且没有读取锁定,它支持事务的原子性,一致性,隔离性和持久性(符合ACID)。作为PostgreSQL灵活性的一个示例,它支持将键-值数据对存储在单个记录中,该功能可通过其hstore数据类型实现。

PostgreSQL的在编码方面非常严格-MySQL则不那么严格。 PostgreSQL的是作为模仿大型数据库而创建的学术项目而创建的,而MySQL最初是从很小的地方发展到足以容纳大型网站的地方。领先的云供应商在其平台上具有PostgreSQL支持。还有一个Postgres数据库的REST API。

PostgreSQL的支持编程语言,例如C,C ++,Java,JavaScript,.Net,R,Perl,Python,Ruby,Tcl等。它'可以使用后台工作程序在单独的进程中运行用户提供的代码。

PostgreSQL的还基于以下内容执行安全协议: 访问控制 用于用户操作(例如连接和查询)的列表(ACL)。

的MySQL 

的MySQL数据库是世界'最广泛使用的数据库。它易于设置,并且需要进行最少的微调才能达到出色的性能水平。这个名字来自一个女孩'我的名字叫My,是其中一位联合创始人Michael Widenius的女儿。源代码可在GNU GPL(通用公共许可证)下获得。该项目现在由Oracle Corporation拥有和管理。在Oracle之前'在它的参与下,它由一家名为MySQL AB的瑞典公司经营。使用MySQL的公司包括GitHub,美国海军,NASA,特斯拉,Netflix,微信,Facebook,Zendesk,Twitter,Zappos,YouTube和Spotify。 

的MySQL被广泛用作开源程序LAMP(Linux,Apache,MySQL,PHP)堆栈的一部分,这些程序构成Internet上许多网站的骨干,包括:

  • 维基百科
  • Flickr
  • Google(不包括搜索)
  • 的YouTube
  • 推特
  • 脸书

核心MySQL程序没有任何图形用户界面工具来操作软件或创建和维护数据库。有几种前端程序可以使MySQL易于使用。用于此目的的官方程序是MySQL Workbench,它由Oracle拥有和开发,但可供所有人免费使用。

的MySQL可在许多Windows,Linux和Mac平台上运行,包括:

  • 自由BSD
  • 虹膜
  • MAC OS X
  • Novell网络软件
  • 的Solaris
  • SCO Unixware
  • 微软Windows
  • Tru64
  • QNX
  • 萨诺斯
  • 塞班

的MySQL功能包括跨平台支持,可更新的视图, SSL协议  支持,存储过程,信息模式,查询缓存,分区表和通过MyISAM程序的全文本索引。 的MySQL是用C和C ++编写的。 的MySQL支持编程语言,例如C,C ++,Delphi,Perl,Java,Lua,.NET,Node.js,Python,PHP,Lisp,Go,R,D和Erlang。 的MySQL还支持哈希索引,而InnoDB引擎对FULLTEXT索引使用倒排列表。它具有高度的灵活性和合理的灵活性,使其成为Web应用程序的流行选择。

速度和数据安全 

在选择数据库管理系统时,数据安全性考虑因素至关重要,这两个SQL数据库管理系统都具有足够的安全性。开发人员通常认为,SQL注入等数据安全漏洞反映了他们正在使用的数据库软件中的一个弱点,而实际上,这些问题实际上是由于其代码中的技术实施不当所致。无论您的团队是使用MySQL还是PostgreSQL,您都必须实施适当的数据管理,例如对输入进行清理以防止SQL注入和其他安全问题。  

的MySQL提供了诸如用户管理之类的功能来控制用户可以在数据库上运行的查询,这使您可以将特权限制为仅应拥有特权的用户。这是通过MySQL ROLES和PRIVILEGES实现的。您可以为用户设置密码认证,也可以使用MySQL Enterprise中的其他认证方案对用户进行认证。这些方案包括Linux PAM(可插入身份验证模块),本机Windows服务和LDAP(轻型目录访问协议)。

PostgreSQL的具有用于用户和组管理的强大系统,您可以使用GRANT命令将SQL PRIVILEGES分配给ROLES。客户端身份验证是通过pg_hba.conf配置文件控制的,该文件包含一组允许访问的IP地址和用户名。还可以使用基于SSL的连接,以及PAM和Kerberos等外部身份验证系统。

由于PostgreSQL符合SQL标准,因此与MySQL相比,使用PostgreSQL进行性能优化要简单得多。这使编写高效查询变得容易,并且可以使用数据库系统中可用的索引范围,例如位图,B树和全文本。使用MySQL,索引存储在B树中,这允许对数据进行有效的对数时间操作,以进行数据插入,删除和其他操作。 PostgreSQL的支持实例化视图,这有助于加快数据库视图的运行速度,但是MySQL本身不支持。您可以使用SQL查询缓存和全文搜索(FTS)等技术来获得更好的MySQL性能。

复制,群集和可伸缩性 

分布式计算的优势意味着,如果您已经具备了这种能力,那么您的数据库也必须能够支持分布式架构。 PostgreSQL的和MySQL适合于分布式数据库管理系统(DDBMS)。在复制方面,MySQL采用一种主从方式,其中SQL查询用于将数据从一个主服务器复制到数据库集群中的一个或多个从服务器。 的MySQL的体系结构的区别在于,从服务器可以执行数据库写入操作,当主服务器由于任何原因不可用时,这将非常有用。 

PostgreSQL的使用流式WAL(预写日志)文件进行复制,这种文件往往比MySQL的方法更快,更可靠。 PostgreSQL的复制默认是异步的,但是同步复制也是可用的。从版本10开始,PostgreSQL支持逻辑复制,这是一种使用WAL记录在表级别进行复制的方法。  

PostgreSQL的和MySQL均支持分区,以将大型表分解为较小的部分,从而可以更快地处理查询。在PostgreSQL中,有两种分区可用:声明性分区和继承分区。后者使用实现为函数的规则或触发器,而前者则依赖于分区声明,该声明指定分区方法以及用作分区键的列或表达式。通过继承进行分区可以实现更灵活的方法。该方案在MySQL中不可用。 的MySQL仅使用声明性分区,但是即使只有InnoDB和NDB存储引擎也可以使用。凭借其多个索引选项,PostgreSQL随着表段的大小增大,提供了更多选项来调整数据库性能。  

长处和短处 

对于许多应用程序,这两个关系数据库管理系统可以互换使用,但是它们的独特特征和优势却有所不同。 PostgreSQL的与MySQL的第一个最大区别是它对SQL标准的更好支持, PostgreSQL的 12支持179中的至少160 完全符合SQL:2016核心要求的功能。 PostgreSQL的一直致力于开源,这是社区迅速指出Oracle对MySQL的公司所有权的一个领域,尽管这对大多数人而言根本没有问题,但可能会为开源领域的某些人带来改变社区。 的MySQL社区中的一些开发人员已经接受了MySQL的开源分支MariaDB,这是由于人们担心Oracle对MySQL项目的所有权而产生的。 

就是说,PostgreSQL的社区历史上较小,证明了MySQL作为数据库管理系统的流行程度。如果您尝试使用PostgreSQL,则可能无法使用某些适用于MySQL的工具和集成。除了广泛使用和与许多软件工具的兼容性外,MySQL的最大优势还可能是它的易用性,良好的性能和相对的简单性,尤其是在较小的项目上。这种简单性在一定程度上解释了它在整个软件世界中的广泛应用,无论是在开放源代码项目还是在封闭源代码项目中。对于您可能需要全面的SQL支持的情况,以及您大量使用并发读写操作的情况(对于MySQL性能可能存在更多问题),MySQL不太理想。

它们与其他SQL和NoSQL DBMS的比较 

PostgreSQL的和MySQL在包括SQL以及NoSQL系统在内的最佳,使用最广泛的数据库管理系统中继续保持很高的地位。近年来,由于NoSQL系统在建模分层数据(通常以JSON或XML格式实现)以及在存储大型文档(例如大数据)中具有更好的性能,因此NoSQL系统的知名度不断提高。也就是说,像PostgreSQL和MySQL这样的SQL数据库更擅长管理关系数据和涉及事务性,原子性数据的用例。 

在这方面,MySQL可能是所有数据库管理系统中使用最广泛的,并且 ScaleGrid开发人员调查 显示MySQL在开发人员的使用方面处于领先地位,紧随其后的是MongoDB,在开发人员采用率方面领先的NoSQL系统和PostgreSQL:

  • 的MySQL-38.9%的用户份额
  • MongoDB-24.6%
  • PostgreSQL的-17.4%
  • Redis-8.4%
  • 卡桑德拉-3.0%
  • 甲骨文-1.8%

那就是 数据库引擎的排名 对Oracle和Microsoft SQL Server等SQL系统的排名更高。在ScaleGrid调查中可以找到一个指示数据库管理系统快速变化的关键注释,该调查显示超过60%的开发人员使用了一种或另一种SQL数据库。这显示了关系数据库管理系统的持久流行,但也表明NoSQL数据库并不落后。一个人只需要看一下MongoDB及其它的历史 最近几年的NoSQL同行 了解NoSQL解决方案的势头。现实情况是,PostgreSQL和MySQL不再在仅由SQL和关系数据库系统主导的数据库世界中运行。相反,团队现在几乎可以像对待MongoDB这样的NoSQL解决方案,就像他们要接触这两个领先的SQL数据库系统中的一个一样快。

我应该使用MySQL还是PostgreSQL?

对于新项目,请确定以后是否要移植到已关闭的软件。在这种情况下,PostgreSQL更接近Oracle,并且为PostgreSQL创建的任何代码都将轻松移植到Oracle。 的MySQL稍微脱离了SQL标准。 PostgreSQL的更可靠,因为它符合ACID(原子性,一致性,隔离性和耐久性),这意味着查询将保持数据完整性,并返回相同的输出而不会出错。两者都支持多种操作系统,包括Unix和非Unix操作系统。

的MySQL的可靠性较差并且不符合ACID标准.MySQL处理外键引用,审计和事务的方式使其可靠性较差。如果您认为可以使用其他开源项目中的代码,则MySQL是很好的选择。由于它已在较小的网站中广泛使用,因此有大量的插件,插件和模块可以通过流行的软件(如Wordpress,Drupal和Joomla)优化MySQL。

自由

白色UpGuard徽标
可供下载的UpGuard免费资源
学到更多

下载我们的免费电子书和白皮书

关于网络安全和供应商风险管理的见解。
白色UpGuard徽标
电子书,报告& Whitepapers
可供下载的UpGuard免费资源
UpGuard客户支持团队UpGuard客户支持团队UpGuard客户支持团队

观看UpGuard的实际应用

与我们的一位网络安全专家预订免费的个性化入职电话。
抽象形状抽象形状

相关文章

了解有关网络安全的最新问题的更多信息。
传送图标

注册我们的时事通讯

每周在收件箱中获取最新精选的网络安全新闻,漏洞,事件和更新。
抽象形状抽象形状
免费即时安全评分

您的组织有多安全?

索取免费的网络安全报告,以发现您的网站,电子邮件,网络和品牌上的主要风险。
  • 检查图标
    您可以立即采取行动的即时见解
  • 检查图标
    13个风险因素,包括电子邮件安全,SSL,DNS运行状况,开放端口和常见漏洞
网站安全扫描结果网站安全扫描等级抽象形状