PostgreSQL数据库相比主流开源如MySQL有哪些优势,相比主流闭源如Oracle有哪些优势,能否进行下对比?
问题来自@邓毓 某农信 系统工程师,下文来自twt社区众多同行实践经验分享,欢迎大家参与交流,各抒己见。
@zhuqibs Mcd 软件开发工程师:
每一种数据库都有优点,都有缺点。
1、PostgreSQL完全免费,而且是BSD协议,如果你把PostgreSQL改一改,然后再拿去卖钱,也没有人管你,这一点很重要,这表明了PostgreSQL数据库不会被其它公司控制。oracle数据库不用说了,是商业数据库,不开放。而MySQL数据库虽然是开源的,但现在随着SUN被Oracle公司收购,现在基本上被Oracle公司控制,其实在SUN被收购之前,MySQL中最重要的InnoDB引擎也是被Oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。所以如果MySQL的市场范围与Oracle数据库的市场范围冲突时,Oracle公司必定会牺牲MySQL,这是毫无疑问的。
2、与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。
3、PostgreSQL源代码写的很清晰,易读性比MySQL强太多了,怀疑MySQL的源代码被混淆过。所以很多公司都是基本PostgreSQL做二次开发的。
4、PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL的总体处理性能不如PostgreSQL,原因是MySQL的线程无法充分利用CPU的能力。
5、Postgres数据库曾在insert大赛中独占鳌头,速度最快。
@Amygo 分布式事务数据库管理员:
MySQL/innoDB 是GPLv2协议,且有欧洲银行同甲骨文签署的协议,如违反则MySQL以一欧元卖给欧洲银行。故大家不用担心。另外,甲骨文要是不发展MySQL,则MariaDB随时会吸引社区的人过去壮大起来且做到无缝替换。
以下是几个角度下的比较:
1、业务系统的数据库要是Oracle 被直接替换,单库到单库的模式:肯定换PG更容易,接近98%的相似度;MySQL是85%的相似度。
2、 业务系统的数据库要是Oracle 要被替换成分布式数据库,单体大库到多个小库的模式(也即数据分片):肯定换MySQL之上的分布式数据库更佳,因为换分布式数据库则意味着“存储过程、包、自定义函数、视图、复杂子查询”都没有了。
3、从交易关系型数据库产品的角度:OLTP业务场景 MySQL 比 PG 更适合,因为前者的InnoDB存储引擎要比PG的强大,有完善的MVCC、行锁等机制。
4、从数据分析业务场景的角度,PG 会比MySQL更强,因为PG可以做复杂计算、HASHJOIN等。
5、PG 唯一是理念和新技术方面 比Oracle先进,因为是属于学术派,不注重实战、稳定可靠和性能。PG也是因为强学术派、缺乏MVCC等因素,从而社区人数、行业占有率远低于MySQL和Oracle。
国产数据库厂商中:集中式数据库产品厂商因为PG兼容Oracle的缘故而拿来修改,另外是做关系数据分析的数据仓库之用,也是因GreenPlum开源而被模仿。
@anonym 系统架构师:
PostgreSQL完全免费,而且是BSD协议,如果你能掌控他的源码,可以做很多事情。Oracle数据库是商业数据库,不开放,发现问题解决起来难度非常大,虽然Oracle的售后机制和培训力度都很强,但你如果想使用的如鱼得水,非常难,在重大问题发生的时候,相信除了原厂,业界的大佬也是束手无策。
PostgreSQl很容易做读写分离、负载均衡、数据水平拆分等方案。Oracle的集群架构就不用说了,用的最多的就是RAC,什么读写分离,水平拆分,这在Oracle11G以前是不存在的。MySQL的架构也很多,最成熟的读写分离mycat等中间件,也有很多弊端,有能力的大公司都是自己开发适合自己的中间件,或者修改源码。至于MySQL其他的方案,在5.7引入的mgr,mha等,看起来很强,用起来很麻烦,也不稳定,现在用在生产上的应该比较少,8.0改进了很多,没有具体测试,在这里不做过多的评价。
不过,PG虽好,但是用于生产还需要DBA能力超强,也要慎重选择,或者找一家靠谱的第三方服务商。
@weibo 北京象前行信息科技有限公司 副总经理/副总裁:
两者作为优秀的开源关系数据库,各有优势,完全可以根据自己的需求进行选择。
楼上的回答都能说到两者优劣势的一些点,最近笔者有翻译PG国际专家分享的文章,简单概要阐述PG的主要优势如下:
1.首要的就是PG发扬传递民主自由精神,遵循自由开放的类BSD、MIT协议。近30年的发展国内外拥有众多用户群体。
2.国际社区管理规范有序,技术交流分享活跃,PG版本演进迭代持续、稳定,每年一个主版本,今年将发布13,国际社区维护近五个主要版本,目前pg 10 应用广泛。
3.起源于美国伯克利大学,正宗学院派,代码 (ANSI C) 严谨,注释详细,可读性强。
4.扩展性强,很多代码贡献者可以通过扩展实现性能、管理等方面的功能,譬如扩展分布式citus(微软在极力发展)、扩展FDW(不同种类数据库间的数据库交换)、扩展地图功能PostGis。
5.符合SQL标准化程度高, PG支持SQL : 2016的大部分主要功能。完整的核心一致性需要179个强制性的特性,PostgreSQL至少符合160个。这几乎超过了任何其他数据库引擎。
6.兼容性好,为众多应用开发语言提供友好接口,譬如Python、Java、Tcl、Perl等。
7.索引丰富,根据应用需求可灵活选择索引,提升数据库访问效率,包括 GiST、spi – GiST、KNN GiST、GIN、BRIN和Btree都是可用的。还有很多其他索引可通过扩展实现 ,例如Bloom。
8.安全透明, PostgreSQL有一个安全邮件列表, 这意味着所有已知的***载体一旦公开就会被处理。
9.国内外基于PG有很多优秀的产品,这些商业主体会集成和发扬PG,并反哺社区,让PG更好用。
10.PG发展趋势不断向上,也算是个优势吧。
先总结这么多,我觉着PG就像是一把不错的瑞士军刀。
感兴趣可以阅读指正这边翻译的文章:
https://www.talkwithtrend.com/Article/248417
MySQL 也在互联网公司用过,它的计算引擎很丰富,用户基数比较大,如果吐槽PG MVCC,我个人觉着只是实现思路的不同,定期的做好清理,在使用其它数据库时,也都是需要运维人员发挥作用的。有传言PG后边的版本可能会改造mvcc机制,国际社区有500+Commiter,他们是个智慧群体,如果觉着有必要自然后考虑优化。好的东西都值得推广使用,兼容并蓄,博采众长吧。
@某金融企业 技术经理:
这几种数据库的存在和发展都是因应不同用户的需求,均有其必要性和价值,可以说各有优势,还是要根据需要来比较。
当然,PG的多功能、扩展性和发展势头也是有目共睹。摘录一段上面的一位兄弟“ID:weibo”所翻译文章的内容:“您想使用NoSQL、Riak、REACT、Redis、Mongo等的功能吗?PostgreSQL都具备这种能力。不可否认,不能包括原始产品的所有细节。例如,PostgreSQL不会为您创建新的分片,那仍然是一个手动过程。但总有办法,譬如pg_partman。”