现在互联网公司中一般项目中用的数据库都是MySQL,而一般老的软件公司用的还是Oracle,MySQL有着轻量级,简洁的特点,特别在5.5版本之后性能提升的很大,但随着计算数据量的增大,分析繁琐,一种在国内用的不是很多,但国外有部分人认为的很好用的PostgreSQL在国内开始使用,比如腾讯,数据存储就是在MySQL中的,而数据分析就是用的PostgreSQL,所以看来很有必要研究一下MySQL与PostgreSQL的一些区别,这样在以后项目对数据库的选择上也可以有些帮助。
ps:下面一些观点借鉴了
https://www.cnblogs.com/doit8791/p/8608597.html
https://blog.csdn.net/testcs_dn/article/details/70482421
这两篇博客。第二篇也是转载的不过没找到原文出处,找到的朋友麻烦告知下。
Q:如何选择MySQL还是PostgreSQL?
A:虽然大多用的还是前者,但前者就一定万无一失了吗?当然不是的,但从数据丢失这点,PostgreSQL恢复起来就比MySQL容易,我可能还没有经历过这些事情,这是在第一篇博客中看到的,以后如果有机会遇到的话希望可以做个借鉴(不过我不希望遇到)
那么单单从这一点就能区别开这两种产品吗,
现在看看两者的优缺点:
一、 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的内存表不够实用(因为表锁的原因)
下面是PostgreSQL和MySQL的一些区别对比图:
特征 | PostgreSQL的 | MySQL的 |
开源 | 完全开源 | 开放源代码,但由Oracle拥有并提供商业版本 |
ACID合规性 | 完全符合ACID | 有些版本是兼容的 |
SQL合规性 | 几乎完全符合 | 有些版本是兼容的 |
并发支持 | MVCC实现支持多个请求而不读取锁 | 支持某些版本。 |
安全 | 通过SSL支持从头开始安全 | 某些版本的SSL支持 |
NoSQL / JSON支持 | 多个支持的功能 | 仅支持JSON数据 |
访问方法 | 支持所有标准 | 支持所有标准 |
复制 | 可用多种复制技术:
| 标准主备备份复制:
|
物化视图 | 支持的 | 不支持 |
临时表 | 支持的 | 支持的 |
地理空间数据 | 支持的 | 支持的 |
编程语言 | 支持的 | 不支持 |
可扩展型系统 | 支持的 | 不支持 |
具体细节可以到https://yq.aliyun.com/articles/589953去查看,有些还理解不了,暂时做个记录,20190326 20:37更,待更新。