写点什么

为什么选择 PostgreSQL 而不是 MySQL

  • 2015-03-26
  • 本文字数:1178 字

    阅读完需:约 4 分钟

David Bolton 是一名独立开发者,他使用 PostgreSQL 和 MySQL 都已有超过十年的时间。近日,他撰文阐述了选择PostgreSQL 而不是MySQL 的理由。他认为,MySQL 之所以仍然如此流行是因为每个Linux Web 托管软件包中都包含它。但随着Oracle 将其收购,MySQL 的开源程度大不如前。而PostgreSQL 不仅发展更快,还加入了JSON 支持,成为少数几个支持NoSQL 的关系型数据库之一。

MySQL/MariaDB 的当前版本是 5.7.6(MariaDB 为 MySQL 创建者 Monty Widenius 创建的一个 MySQL 分支),PostgreSQL 的版本是 9.4.1。Bolton 从以下几个方面对比了两者的最新版本:

  • ANSI 标准兼容性:与先前的版本相比,MySQL 已经有了长足的进步,但 MySQL 背后的哲学是,如果客户喜欢,他们就会支持非标准扩展,而 PostgreSQL 从开始就将标准构建到平台里。不过,二者殊途同归,差别不大;
  • ACID 遵从性:PostgreSQL 有一个存储引擎,而 MySQL 有 9 个,但只有 MyIsam 和 InnoDB 与大部分用户有关,其中,后者为默认存储引擎。InnoDB 和 PostgreSQL 都完全遵循 ACID,差别不大;
  • 无锁表修改:MyIsam 使用表级锁来提升速度,这会导致写互斥。但 PostgreSQL 和 InnoDB 均使用行级锁,差别不大;
  • 子查询:长期以来,这一直是 MySQL 的一个弱点,虽然 5.6.5 作了重大改进,但 PostgreSQL 对表连接支持得更好,尤其是 MySQL 不支持全外连接,因此,这方面 PostgreSQL 胜过 MySQL;
  • JSON 支持和 NoSQL:PostgreSQL 最近增加了 JSON 支持,与传统的关系型数据库相比,它提供了更大的数据存储灵活性,因此,这方面 PostgreSQL 胜过 MySQL。

此外,Bolton 指出,选择 PostgreSQL 还有如下理由:

  • 更好的许可:PostgreSQL 采用类似 MIT 的许可协议,允许开发人员做任何事情,包括在开源或闭源产品中商用,而 MySQL 的客户端遵循 GPL 许可协议,所以开发人员必须向 Oracle 付费或者将自己的应用程序开源;
  • 更好的数据一致性: PostgreSQL 会在数据插入和更新之前进行严格的验证,确保数据合法才会进行相应的操作,但在 MySQL 中,开发人员需要将服务器设定为严格 SQL 模式才能达到同样的目的,否则可能会产生不规范数据;
  • 服务器扩展:MySQL 提供了插件程序 API ,支持 C/C++ 或任何兼容 C 的语言,而且从 5.7.3 版本开始支持全文搜索,PostgreSQL 有一个类似的系统但支持的语言更多,包括 C/C++、Java、.Net、Perl、 Python、Ruby、Tcl、ODBC 等,它甚至可以在单独的进程中运行用户提供的代码;除了所有关系型数据库都包含的有关数据库、表和列的一般信息外,PostgreSQL 系统目录中还可以包含关于数据类型、函数和存取方法的信息,开发人员可以通过修改这些信息实现扩展。

感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

2015-03-26 00:319925
用户头像

发布了 1008 篇内容, 共 372.4 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

Oracle 数据恢复一例

wong

oracle windows dbf

谁能让你安稳

Neco.W

工作 稳定性 努力工作

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

MyBatis支持的jdbcType 枚举类型

Kevin Liao

部门最漂亮的妹子离职了

无箭的丘比特

团队管理 生涯规划 企业文化 职场

520 我用算法帮女朋友的闺蜜选男友

cherubines

Python 算法 数据分析 蒙特卡洛 最优解

2020年5月19日 Java并发编程专题

瑞克与莫迪

Java

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

看得懂的区块链及智能合约概念

石君

区块链 智能合约

奇怪知识点系列:Office 365 CDN 揭秘

手艺人杨柳

Office 365 Microsoft 365 SharePoint Online

「Postman教程 」接口测试-2

Megatron7

测试 Postman

SQL 生成斐波那契数列

zero

sql 斐波那契 MySQ

程序员的晚餐 | 5 月 19 日 蒜香鸡腿,味道令人惊讶

清远

美食

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

《零基础学 Java》 FAQ 之 9-Java里的各种数据类型占用多少内存空间

臧萌

Java

Android | Tangram动态页面之路(四)vlayout原理

哈利迪

android

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

实现一个比LongAdder更高性能的计数器有多难?

捉虫大师

Java jdk LongAdder

关于键盘的一些事

BabyKing

vim 缓存 键盘 快捷键 karabiner

你的c++团队还在禁用异常处理吗?

泰伦卢

c c++ C#

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

linux文件系统-inode学习整理

戈坞昂

Linux inode

生活就是这么讽刺,有时候你嘲笑他,有时候你想成为他......

代码诗人

中年危机 文艺 短片小说

比特币是新生事物吗?

Haiyung

比特币

如何设计一款“高可用高性能”的发号器?

捉虫大师

Java 高可用 发号器 高性能 raft

回“疫”录(21):你这样做的样子真丑

小天同学

疫情 心理 回忆录 现实纪录 纪实

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

Kubernetes时代的云容器平台:各家云产品模式逐渐丰富

韩超

腾讯云 阿里云 Kubernetes IaaS PaaS

看完这篇 HTTPS,和面试官扯皮就没问题了

cxuan

https

「Postman教程 」功能介绍-1

Megatron7

测试 Postman

从Deepl说起,聊一聊未来的“安全职业”

孤岛旭日

程序员 AI 职业

为什么选择PostgreSQL而不是MySQL_数据库_谢丽_InfoQ精选文章