做者:方圆
连接:https://www.zhihu.com/question/20010554/answer/15863274
来源:知乎
著做权归做者全部,转载请联系做者得到受权。 mysql
1、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而不少 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
2、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍能够维持双曲线甚至对数曲线,到顶峰以后再也不降低,而 MySQL 明显出现一个波峰后下滑(5.5版本以后,在企业级版本中有个插件能够改善不少,不过须要付费)。
3、PG 多年来在 GIS 领域处于优点地位,由于它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差不少,instagram就是由于PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
4、PG 的“无锁定”特性很是突出,甚至包括 vacuum 这样的整理数据空间的操做,这个和PGSQL的MVCC实现有关系。
5、PG 的可使用函数和条件索引,这使得PG数据库的调优很是灵活,mysql就没有这个功能,条件索引在web应用中很重要。
6、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有很是丰富的统计函数和统计语法支持,好比分析函数(ORACLE的叫法,PG里叫window函数),还能够用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,不少分析功能都不支持,腾讯内部数据存储主要是MYSQL,可是数据分析主要是HADOOP+PGSQL(听李元佳说过,可是没有验证过)。
7、PG 的有多种集群架构能够选择,plproxy 能够支持语句级的镜像或分片,slony 能够进行字段级的同步设置,standby 能够构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操做很是简单。
8、通常关系型数据库的字符串有限定长度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都没有问题。 git
MySQL 处理树状回复的设计会很复杂, 并且须要写不少代码, 而 Pg 能够高效处理树结构: http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures github
它能够高效处理图结构, 轻松实现 "朋友的朋友的朋友" 这种功能: web
FDW--它能够把 70 种外部数据源 (包括 Mysql, Oracle, CSV, hadoop ...) 当成本身数据库中的表来查询: https://wiki.postgresql.org/wiki/FDW?nocache=1 正则表达式
postgres数据库 性能测试:http://blog.csdn.net/bigbigtreewhu/article/details/51545288 sql
postrgres数据库 高可用性,负载均衡,复制与集群方案介绍 : https://my.oschina.net/liuyuanyuangogo/blog/497746 数据库
阿里SQL介绍: http://www.infoq.com/cn/news/2016/09/AliSQL-ali-cloud-AliSQL编程
TokuDB的特色验证 : http://www.tuicool.com/articles/vAbIFjbwindows
阿里SQL测试报告样例 : https://github.com/alibaba/AliSQL/wiki/AliSQL-Performance-benchmark数组
阿里SQL秒杀场景测试报告样例: https://github.com/alibaba/AliSQL/wiki/AliSQL-Performance-benchmark-for-inventory