写点什么

为什么选择 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:3110346
用户头像

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

关注

评论

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

华为云Toolkit活动:领取云计算8大领域50本干货电子书!

华为云PaaS服务小智

云计算 程序员 开发者 编程数据

JVM垃圾收集器全面剖析:算法、实现和优化

xfgg

Java JVM GC

YB时代,正寻找新的数据支点

脑极体

存储

Zebec生态官宣与BitFlow、Matryx DAO等无关,切勿碰瓷

BlockChain先知

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

西柚子

超融合产品集成 Kata 虚拟化容器技术的方案演进 | 龙蜥技术

OpenAnolis小助手

开源 容器 虚拟化 龙蜥社区 龙蜥大讲堂

inBuilder今日分享丨系统集成系列之背景与方案概述

inBuilder低代码平台

WICC · 出海嘉年华|嘉宾就位、话题揭晓,峰会 & 派对报名倒计时

融云 RongCloud

融云 峰会 泛娱乐 出海 wicc

使用CST电磁仿真之前,如何安装硬件加速卡?【操作流程】

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

Flutter热更新技术探索 | 京东云技术团队

京东科技开发者

flutter ios App an'droid 企业号 5 月 PK 榜

实例讲解Spring boot动态切换数据源

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

易观千帆 | 2023年4月银行APP月活跃用户规模盘点

易观分析

金融 数字经济 手机银行

Nodejs 应用编译构建提速建议 | 京东云技术团队

京东科技开发者

node.js 编译 前端构建 企业号 5 月 PK 榜

手把手教你在昇腾平台上搭建PyTorch训练环境

华为云开发者联盟

人工智能 华为云 昇腾 华为云开发者联盟 企业号 5 月 PK 榜

Solaris Network评述:在DeFi衍生品领域的颠覆者

股市老人

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

股市老人

线程是如何通讯的?

javacn.site

数据可视化:部分整体类可视化图表大全

2D3D前端可视化开发

数据分析 数据可视化 数据可视化工具 可视化图表 数据可视化设计

用eBPF/XDP来替代LVS(三)

九零后程序员

云计算 Linux 云原生 LVS ebpf

AIGC背后的技术分析 | 机器学习?机器如何学习?

TiAmo

机器学习 AIGC julia

音频编辑工具 Celemony Melodyne Studio5激活

真大的脸盆

Mac Mac 软件 音频编辑 音频处理工具 编辑音频

文心一言 VS 讯飞星火 VS chatgpt (22)-- 算法导论4.2 2题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

Django笔记三十六之单元测试汇总介绍

Hunter熊

Python django 单元测试

聊聊「短信」渠道的设计与实现

Java 架构

2023-05-25:给定一个正整数 x,我们将会写出一个形如 x (op1) x (op2) x (op3) x ... 的表达式 其中每个运算符 op1,op2,… 可以是加、减、乘、除之一 例如

福大大架构师每日一题

Go 算法 rust 福大大

iOS MachineLearning 系列(18)—— PoseNet,DeeplabV3与FCRN-DepthPrediction模型

珲少

数智领航营:酒类农牧业数智化转型中的数智化决策实践

博睿数据

可观测性 博睿数据 数智化 数智领航营 酒类农牧业

Kafka实时数据即席查询应用与实践

vivo互联网技术

kafka 实时数仓

【深度剖析】JavaScript中块级作用域与函数作用域

Immerse

JavaScript 闭包 作用域 函数作用域 块级作用域

技术分享| 融合会议协议大解密

anyRTC开发者

音视频 视频会议 快对讲 H.323 融合会议

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