写点什么

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

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

关注

评论

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

selenium源码通读·4 |webdriver/common分析

Python 源码 测试 自动化测试 selenium

从零学习SDK(5)SDK文档的学习和参考

MobTech袤博科技

深度剖析Redis九种数据结构实现原理

做梦都在改BUG

Java 数据库 redis 缓存

一次goroutine 泄漏排查案例

蓝胖子的编程梦

golang 性能 协程 pprof 线上故障

深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等

汀丶人工智能

人工智能 机器学习 深度学习 激活函数

看了我常用的IDEA插件,同事也开始悄悄安装了

Java你猿哥

Java 程序员 ssm IDEA 架构师

手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

Java你猿哥

spring Spring Cloud ssm 架构师

阿里内部热捧“Spring全线笔记”,不止是全家桶,太完整了

Java你猿哥

spring Spring Cloud Spring Boot Spring MVC

博睿学院 | 本周四:OpenTelemetry技术在数据标准化中应用实践

博睿数据

可观测性 智能运维 博睿数据 前沿技术 博睿学院

PC GWP-ASan方案原理 | 堆破坏问题排查实践

字节跳动终端技术

问题排查 PC

GitHub数据库榜单第一:Redis核心原理实践

做梦都在改BUG

Java 数据库 redis 缓存

火山引擎DataLeap推出全链路智能监控报警平台

字节跳动数据平台

数据中台 SLA 数据监控 企业号 4 月 PK 榜

Spring Cloud微服务网关Zuul过滤链和整合OAuth2+JWT入门实战

做梦都在改BUG

Java Spring Cloud OAuth2 JWT Zuul

selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类分析

Python 源码 测试 自动化测试 selenium

商汤版ChatGPT「商量」来了!开放API,基于千亿参数大模型,体验实录在此

Openlab_cosmoplat

开源社区 ChatGPT

Netty服务开发及性能优化

做梦都在改BUG

Java Netty

软件测试如何自我提升

FunTester

火山引擎数智平台协助洞察美图类APP新增长 付费用户转化超过124%

字节跳动数据平台

大数据 增长 产品增长 企业号 4 月 PK 榜 美图

重磅官宣,OpenHarmony开发者大会来了!

OpenHarmony开发者

OpenHarmony

低代码是什么意思

优秀

低代码

一站式指标平台 Kyligence Zen 功能详解

Kyligence

数据分析 指标平台

数据开发提效有秘诀!离线开发BatchWorks 六大典型场景拆解

袋鼠云数栈

大数据 离线开发

OpenTelemetry 正在改变我们跟踪和设计应用的方式

NGINX开源社区

nginx 云原生

软件测试/测试开发丨Pytest 结合 Allure 生成测试报告

测试人

软件测试 自动化测试 测试开发 pytest Allure

Kubernetes 多集群网络方案系列 1 -- Submariner 介绍

Se7en

Nautilus Chain 上首个 DEX PoseiSwap 通证经济学模型解析

股市老人

阿里独家「操作系统和计算机网络」,GitHub标星超百万

做梦都在改BUG

Java 程序员 计算机网络 操作系统

三维设计新帮手|Blender怎么入门?

Finovy Cloud

blender 3D软件

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