PostgreSQL 与 MySQL 相比,优势何在?

我只是一个虾纸丫 提交于 2019-12-01 08:46:17

一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
三、 PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。

四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。
五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
六、 PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存 储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是 HADOOP+PGSQL。
七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。
八、 一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
九,对 于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于 binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提 供stream复制。
十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)

最后说一下我感觉 PG 不如 MySQL 的地方。
第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。
第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,
第三点,MySQL的复制可以用多级从库,但是在9.2之前,PGSQL不能用从库带从库。
第四点,从测试结果上看,mysql 5.5的性能提升很大,单机性能强于pgsql,5.6应该会强更多.
第五点,对于web应用来说,mysql 5.6 的内置MC API功能很好用,PGSQL差一些。

另外一些:
pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。
说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。
对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。
另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。
很多pg应用也是24/7的应用,比如skype. 最近几个版本VACUUM基本不影响PGSQL 运行,8.0之后的PGSQL不需要cygwin就可以在windows上运行。
至于说对于事务的支持,mysql和pgsql都没有问题。

原文地址:http://www.zhihu.com/question/20010554 

PostgreSQL运行在CentOS时需要修改的操作系统配置

初识PostgreSQL


MySQL

MySQL是最受欢迎的一个大规模数据库服务器。它是一款功能丰富的开源产品,许多网站和在线应用程序都使用该数据库。MySQL的入门相对比较简单,开发者可以从Internet上获取到大量与该数据库相关的信息。

注意:鉴于该产品的受欢迎程度,使用该数据库可以让我们受益于大量第三方应用程序、工具以及集成类库。

尽管MySQL并没有尝试实现完整的SQL标准,但是它依然为用户提供了大量功能。作为一个独立的数据库服务器,应用程序需要与MySQL守护进程通信才能访问数据库——不同于SQLite。

MySQL支持的数据类型

MySQL 支持的数据类型包括TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、 DOUBLE PRECISION、REAL、DECIMAL、NUMERIC、DATE、DATETIME、TIMESTAMP、TIME、YEAR、CHAR、 VARCHAR、TINYBLOB, TINYTEXT、BLOB, TEXT、MEDIUMBLOB、MEDIUMTEXT、LONGBLOB, LONGTEXT、ENUM、SET。

MySQL的优点
  • 易用

    很容易安装。第三方工具,包括可视化工具,让用户能够很容易入门。

  • 功能丰富

    MySQL支持关系型数据库应该有的大部分功能——或者直接支持、或者间接支持。

  • 安全

    支持很多安全特性,有些非常高级,并且是内置于MySQL中。

  • 可扩展也非常强大

    MySQL能够处理大量数据,并且在需要的时候可以规模化使用。

  • 快速

    放弃某些标准让MySQL能够非常高效、简捷地工作,因而速度更快。

MySQL的缺点
  • 已知限制

    MySQL从一开始就没有打算做所有事情,因而它在功能方面有一定的局限性,并不能满足一些先进应用程序的要求。

  • 可靠性问题

    MySQL对某些功能(例如引用、事务、审计等)的实现方式使得它与其他的关系型数据库相比缺少了一些可靠性。

  • 开发停滞

    尽管MySQL依然是一款开源产品,但是自从它被收购之后人们就对其开发进展有很多抱怨。需要注意的是有一些基于MySQL的、完整集成的数据库在标准的MySQL之上附加了其他价值,例如MariaDB。

何时应该使用MySQL
  • 分布式操作

    如果SQLite不能满足你的需求,那么将MySQL引入到开发栈中,就像任何其他独立的数据库服务器一样,它能够给你带来大量的操作自由度以及一些先进的功能。

  • 高安全性

    MySQL的安全机制通过一种简单的方式为数据的访问和使用提供了可靠的保护。

  • 网站和Web应用

    尽管有一些约束,但是绝大部分网站和Web应用都可以简单地运行在MySQL上。相关的灵活可扩展的工具非常易于使用和管理——事实证明这些工具在长期运行时非常有用。

  • 定制解决方案

    MySQL有丰富的配置项和运行模式,如果你需要一个高度量身定制的解决方案,那么MySQL能够非常容易地尾随并执行你的规则。

何时不应该使用MySQL
  • SQL遵从性

    因为MySQL并没有打算实现完整的SQL标准,所以它并不完全符合SQL。如果你可能需要与这样的关系型数据库集成,那么从MySQL切换过去可能并不容易。

  • 并发性

    尽管MySQL和一些其他的存储引擎能够非常好地执行读操作,但是并发读写可能会有问题。

  • 缺少功能

    MySQL缺少某些功能,例如全文本搜索。

PostgreSQL

PostgreSQL是一款先进的、开源的对象关系型数据库管理系统,它的主要目标是遵从标准和可扩展。PostgreSQL,或者说Postgres,试图将ANSI/ISO SQL标准及其修正结合起来。

与其他关系型数据库相比,PostgreSQL独特的地方是它支持高度需要的、完整的面向对象以及关系型数据库的功能,例如完全支持可靠性事务。

由于其强大的底层技术,PostgreSQL能够非常高效地处理很多任务。得益于多版本并发控制(MVCC),它能够在没有读锁的情况下实现并发并保证ACID。

PostgreSQL是高度可编程的,因此扩展性非常好,它支持称为“存储过程”的自定义程序。用户可以创建这种函数简化重复的、复杂的以及经常需要的数据库操作的执行。

尽管该数据库非常强大,但是它却没有像MySQL那么流行,即便如此依然有很多优秀的第三方工具和类库可以让我们更容易地使用它。

PostgreSQL支持的数据类型

PostgreSQL 支持的数据类型包括:bigint、bigserial、bit [(n)]、bit varying [(n)]、boolean、box、bytea、character varying [(n)]、character [(n)]、cidr、circle、date、double precision、inet、integer、interval [fields] [(p)]、line、lseg、macaddr、money、numeric [(p,s)]、path、point、polygon、real、smallint、serial、text、time、timestamp、 tsquery、tsvector、txid_snapshot、uuid、xml

PostgreSQL的优点
  • 开源且遵从SQL标准

    PostgreSQL是一款开源的、免费的、功能非常强大的关系型数据库。

  • 强大的社区

    由一个忠实的、经验丰富的社区支持,用户可以通过知识库和Q&A网站获得全天候的免费服务。

  • 强有力的第三方支持

    除了非常先进的特性之外,PostgreSQL还有很多优秀的、开源的第三方工具可以辅助系统的设计、管理和使用。

  • 可扩展

    可以通过存储过程扩展PostgreSQL的功能。

  • 面向对象

    PostgreSQL不仅是一个关系型数据库,它还是一个面向对象的数据库——支持嵌套等功能。

PostgreSQL的缺点
  • 性能:

    对于简单繁重的读取操作,使用PostgreSQL可能有点小题大做,同时性能也比MySQL这样的同类产品要差。

  • 流行程度

    尽管有大量的部署,但是鉴于该数据库的性质,它的受欢迎程序并不高。

  • 托管

    由于上面提到的几点,很难找到提供托管PostgreSQL实例的主机或者服务提供商。

何时应该使用PostgreSQL
  • 数据完整性

    当绝对需要可靠性和数据完整性的时候,PostgreSQL是更好的选择。

  • 复杂的定制程序

    如果需要数据库执行定制程序,那么可扩展的PostgreSQL是更好的选择。

  • 集成:

    如果将来可能需要将整个数据库迁移到其他合适的解决方案上(例如Oracle),那么PostgreSQL可能兼容性最好也更容易切换。

  • 复杂的设计

    与其他开源且免费的数据库相比,对于复杂的数据库设计PostgreSQL在功能方面最全面,潜力最大,不需要你放弃其他有价值的资产。

何时不应该使用PostgreSQL
  • 速度

    如果你只需要快速读取操作,那么PostgreSQL并不合适。

  • 简单

    除非你需要绝对的数据完整性,ACID遵从性或者设计复杂,否则PostgreSQL对于简单的场景而言有点多余。

  • 复制

    对于缺少数据库和系统管理经验的人而言使用MySQL实现复制要更简单,除非你愿意花费时间、精力和资源。




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!