欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

选择 PosgreSQL 的十个理由,和几个 MySQL 胜出的特性

程序员文章站 2022-05-16 10:05:48
...

一、 PostgreSQL 的稳定性极强,的确,MySQL 有多种引擎,也确实 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,但是,很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的……PG数据库15分钟被闪断四次的前D

一、 PostgreSQL 的稳定性极强,的确,MySQL 有多种引擎,也确实 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,但是,很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的……PG数据库15分钟被闪断四次的前DBA毫无压力的含笑而过。


二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,而 MySQL 明显出现一个波峰后下滑。这些曲线在第三方的测试数据中频繁出现,有兴趣的朋友可以 Google 或自己构建一个测试。


三、在欧美 PG 远没有在中国这么非主流,很多优秀的团队都在用, 主流的开发语言几乎都有 PG 的成熟开发接口,这一点不必有顾虑。像 Python 的 dbapi ,还支持 PG 的异步读写,著名的 SQLAlchemy 对PG的一些特有功能也有支持。


四、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,通过 SQLAlchemy 这样的工具,可以大大简化开发人员的工作。

五、PG 的“无锁定”特性非常突出,很多 MySQL 需要锁表(也许是在你没有发现的情况下)的操作,PG都可以平滑处理,甚至包括 vacuum 这样的整理数据空间的操作。这就是PG高并发下优异性能的奥秘。


六、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,而这些功能是经过几十年发展和应用考验的,绝非某个一度反复宣称自己不支持的技术全都是“复杂而无用的”,直到自己支持这些技术为止的数据库产品可以相比的。


七、PG 对于数据分析师有难以抗拒的魅力,它有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,例如 http://t.cn/zOqiVYc 这里的 window 语法。PG 还可以方便的使用 Python、Perl 甚至任何你喜欢的编程语言写函数。


八、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。有年在腾讯广州举办的 barcamp ,我现场演示,一次成功。


九、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。


十、PG是BSD类的授权协议,如果你真的对它有足够的兴趣和动力,可以尽情的阅读代码,修改定制。这是出自伯克利校园,历经数十年锤炼的优秀代码,是巨大的宝藏。


==================================================================

最后说一下我感觉 PG 不如 MySQL 的地方。


第一,MySQL有一些实用的运维支持,如 slow-query.log ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。


第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,


第三是mysql有内存表,这是个被低估的功能。


第四点,MySQL现在允许跳过SQL,在socket上直接调用API,这是个勇敢的尝试,虽然整个社区用的还不多,但是遇到极端场景,需要榨干性能的团队,值得尝试。