既然MySQL 8和PostgreSQL 10已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的。
在这些版本之前,人们普遍认为,Postgres在功能集表现更出色,也因其“学院派”风格而备受称赞,MySQL则更善长大规模并发读/写。
但是随着它们最新版本的发布,两者之间的差距明显变小了。
特性比较
首先来看看我们都喜欢谈论的“时髦”功能。
phpMyAdmin是个知名MySQL/MariaDB在线管理工具,phpMyAdmin团队在4.7.7版本中修复了一个危害严重的CSRF漏洞(PMASA-2017-9),攻击者可以通过诱导管理员访问恶意页面,悄无声息地执行任意SQL语句。 该篇文章我们将结合VulnSpy的在线phpMyAdmin环境来熟悉该漏洞的利用。 在线 phpMyAdmin CSRF 演练地址:https://www.vulnspy.com/?u=pmasa-2017-9 注:重启演示靶机即可重置靶机 1 在线创建 phpMyAdmin 环境点击 VulnSpy 提供的创建靶机地址(https://www.vsplate.com/?github=vulnspy/PMASA-2017-9) 跳转到 VSPlate 后,直接点击 打开 | MySQL 8 | PostgreSQL 10 |
查询 & 分析 | ||
公用表表达式 (CTEs) | New | |
窗口函数 | New | |
数据类型 | ||
JSON支持 | Improved | |
GIS / SRS | Improved | |
全文检索 | ||
可扩展性 | ||
逻辑复制 | New | |
半同步复制 | New | |
声明式分区 | New |
过去经常会说MySQL最适合在线事务,PostgreSQL最适合分析流程,但现在不是了。
公共表表达式(CTEs)和窗口函数是选择PostgreSQL的主要原因。但是现在,通过引用同一个表中的boss_id来递归地遍历一张雇员表,或者在一个排序的结果中找到一个中值(或50%),这在MySQL上不再是问题。
在PostgreSQL中进行复制缺乏配置灵活性,这就是Uber转向MySQL的原因。但是现在,有了逻辑复制特性,就可以通过创建一个新版本的Postgres并切换到它来实现零停机升级。在一个巨大的时间序列事件表中截断一个陈旧的分区也要容易得多。
就特性而言,这两个数据库现在都是一致的。