首页 > 数据库 >全方位对比 Postgres 和 MySQL (2023 版)

全方位对比 Postgres 和 MySQL (2023 版)

时间:2023-07-14 10:45:45浏览次数:43  
标签:Postgres 数据库 MySQL 支持 CTE Bytebase 2023

全方位对比 Postgres 和 MySQL (2023 版)

原创 Bytebase 昨天 10:36 阅读数 9.4K 本文被收录于专区 数据库 进入专区参与更多专题讨论 

根据 2023 年 Stack Overflow 调研,Postgres 已经取代 MySQL 成为最受敬仰和渴望的数据库。

file

随着 Postgres 的发展势头愈发强劲,在 Postgres 和 MySQL 之间做选择变得更难了。

如果看安装数量,MySQL 可能仍是全球最大的开源数据库。

file

Postgres 则自诩为全球最先进的开源关系型数据库。

file

因为需要与各种数据库及其衍生产品集成,Bytebase 和各种数据库密切合作,而托管 MySQL 和 Postgres 最大的云服务之一 Google Cloud SQL 也是 Bytebase 创始人的杰作之一。

我们对 Postgres 和 MySQL 在以下几个维度进行了比较:

  • 许可证 License
  • 性能 Performance
  • 功能 Features
  • 可扩展性 Extensibility
  • 易用性 Usability
  • 连接模型 Connection Model
  • 生态 Ecosystem
  • 可运维性 Operability

file

除非另有说明,下文基于最新的主要版本 Postgres 15 和 MySQL 8.0 (使用 InnoDB)。在文章中,我们使用 Postgres 而不是 PostgreSQL,尽管 PostgreSQL 才是官方名称,但被认为是一个错误的决定

file

许可证 License

  • MySQL 社区版采用 GPL 许可证。
  • Postgres 发布在 PostgreSQL 许可下,是一种类似于 BSD 或 MIT 的自由开源许可。

即便 MySQL 采用了 GPL,仍有人担心 MySQL 归 Oracle 所有,这也是为什么 MariaDB 从 MySQL 分叉出来。

性能 Performance

对于大多数工作负载来说,Postgres 和 MySQL 的性能相当,最多只有 30% 的差异。无论选择哪个数据库,如果查询缺少索引,则可能导致 x10 ~ x1000 的降级。 话虽如此,在极端的写入密集型工作负载方面,MySQL 确实比 Postgres 更具优势。可以参考下文了解更多:

除非你的业务达到了 Uber 的规模,否则纯粹的数据库性能不是决定因素。像 Instagram, Notion 这样的公司也能够在超大规模下使用 Postgres。

功能 Features

对象层次结构

MySQL 采用了 4 级结构:

  1. 实例
  2. 数据库

Postgres 采用了 5 级结构:

  • 实例(也称为集群)
  • 数据库
  • 模式 Schema

ACID 事务

两个数据库都支持 ACID 事务,Postgres 提供更强大的事务支持。

file

安全性

Postgres 和 MySQL 都支持 RBAC。

Postgres 支持开箱即用的附加行级安全 (RLS),而 MySQL 需要创建额外的视图来模拟此行为。

查询优化器

Postgres 的查询优化器更优秀,详情参考此吐槽

复制

Postgres 的标准复制使用 WAL 进行物理复制。MySQL 的标准复制使用 binlog 进行逻辑复制。

Postgres 也支持通过其发布 / 订阅模式进行逻辑复制。

JSON

Postgres 和 MySQL 都支持 JSON。 Postgres 支持的功能更多:

  • 更多操作符来访问 JSON 功能。
  • 允许在 JSON 字段上创建索引。

CTE (Common Table Expression)

Postgres 对 CTE 的支持更全面:

  • 在 CTE 内进行 SELECT, UPDATE, INSERT, DELETE 操作
  • 在 CTE 之后进行 SELECT, UPDATE, INSERT, DELETE 操作

MySQL 支持:

  • 在 CTE 内进行 SELECT 操作
  • 在 CTE 之后进行 SELECT, UPDATE, DELETE 操作

窗口函数 (Window Functions)

窗口帧类型:MySQL 仅支持 Row Frame 类型,允许定义由固定数量行组成的帧;而 Postgres 同时支持 Row Frame 和范围帧类型。

范围单位:MySQL 仅支持 UNBOUNDED PRECEDING 和 CURRENT ROW 这两种范围单位;而 Postgres 支持更多范围单位,包括 UNBOUNDED FOLLOWING 和 BETWEEN 等。

性能:一般来说,Postgres 实现的 Window Functions 比 MySQL 实现更高效且性能更好。

高级函数:Postgres 还支持更多高级 Window Functions,例如 LAG (), LEAD (), FIRST_VALUE (), and LAST_VALUE ()。

可扩展性 Extensibility

Postgres 支持多种扩展。最出色的是 PostGIS,它为 Postgres 带来了地理空间能力。此外,还有 Foreign Data Wrapper (FDW),支持查询其他数据系统,pg_stat_statements 用于跟踪规划和执行统计信息,pgvector 用于进行 AI 应用的向量搜索。

MySQL 具有可插拔的存储引擎架构,并诞生了 InnoDB。但如今,在 MySQL 中,InnoDB 已成为主导存储引擎,因此可插拔架构只作为 API 边界使用,而不是用于扩展目的。

在认证方面,Postgres 和 MySQL 都支持可插拔认证模块 (PAM)。

易用性 Usability

Postgres 更加严格,而 MySQL 更加宽容:

  • MySQL 允许在使用 GROUP BY 子句的 SELECT 语句中包含非聚合列;而 Postgres 则不允许。
  • MySQL 默认情况下是大小写不敏感的;而 Postgres 默认情况下是大小写敏感的。
  • MySQL 允许 JOIN 来自不同数据库的表;而 Postgres 只能连接单个数据库内部的表,除非使用 FDW 扩展。

连接模型 Connection Model

Postgres 采用在每个连接上生成一个新进程的方式工作。而 MySQL 则在每个连接上生成一个新线程。因此,Postgres 提供了更好的隔离性,例如,一个无效的内存访问错误只会导致单个进程崩溃,而不是整个数据库服务器。另一方面,进程模型消耗更多资源。因此,在部署 Postgres 时建议通过连接池(如 PgBouncer 或 pgcat)代理连接。

生态 Ecosystem

常见的 SQL 工具都能很好地支持 Postgres 和 MySQL。由于 Postgres 的可扩展架构,并且仍被社区拥有,近年来 Postgres 生态系统更加繁荣。对于提供托管数据库服务的应用平台,每个都选择了 Postgres。从早期的 Heroku 到更新的 Supabase, render 和 Fly.io。

可运维性 Operability

由于底层存储引擎设计问题,在高负载下,Postgres 存在臭名昭著的 XID wraparound 问题。

对于 MySQL,在 Google Cloud 运营大规模 MySQL 集群时,我们遇到过一些复制错误。

这些问题只会在极端负载下发生。对于正常工作负载而言,无论是 Postgres 还是 MySQL 都是成熟且可靠的。数据库托管平台也提供集成备份 / 恢复和监控功能。

Postgres 还是 MySQL

2023 年了,在 Postgres 和 MySQL 之间做选择仍然很困难,并且经常引起激烈讨论

file

file

总的来说,Postgres 有更多功能、更繁荣的社区和生态;而 MySQL 则更易学习并且拥有庞大的用户群体。 我们观察到与 Stack Overflow 结果相同的行业趋势,即 Postgres 在开发者中变得越来越受欢迎。但根据我们的实际体验,精密的 Postgres 牺牲了一些便利性。如果你对 Postgres 不太熟悉,最好从云服务提供商那里启动一个实例,并运行几个查询来上手。有时候,这些额外好处可能并不值得,选择 MySQL 会更容易一些。

同时,在一个组织内部共存 Postgres 和 MySQL 也是很常见的情况。如果需要同时管理 Postgres 和 MySQL 的开发生命周期,可以来了解一下 Bytebase。

file


标签:Postgres,数据库,MySQL,支持,CTE,Bytebase,2023
From: https://www.cnblogs.com/sexintercourse/p/17553091.html

相关文章

  • Day08(2023.07.13)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  学习《网络安全等级测评师培训教材》11:30--13:00   吃饭休息13:00 到达久事公交大厦(徐汇区吴中东路南555号)16:30      下班  系统管理软......
  • 2023年度最佳开发工具-Eolink Apikit
    6月30日,「2023掘金技术引力榜」颁奖典礼隆重举行,EolinkApikit荣获「年度最佳开发工具」!开发工具是每个开发者每天都会使用的产品,深度影响着开发者的工作效率和生产力。稀土掘金技术社区汇集了大批优秀的开发者,一起探索和发现产业中最具价值的新技术,找到行业里的引领人物、优秀......
  • 随笔(二十三)『docker MySql 主从复制』
    1、准备好带docker的虚拟机2、拉取mysql5.7镜像dockerpullmysql:5.73、创建主服务的映射mkdir-p/mydata/mysql_master/logmkdir-p/mydata/mysql_master/datamkdir-p/mydata/mysql_master/conftouch/mydata/mysql_master/conf/my.cnf4、创建从服务的映射mkdir......
  • windows Mysql 压缩包版本 安装
    Mysql现如今的版本都有安装版,但是我需要老的Mysql版本(5.7),恰好下载的是压缩版本,这里记录下过程安装Mysql压缩包版本,解压后得到一个文件夹,我是x64的,我放在了C:\ProgramFiles下然后将C:\ProgramFiles\mysql\bin放进系统环境变量,这样就可以在cmd窗口使用msql的命令了管理员......
  • Linux安装MySQL 5.7
    Linux安装MySQL5.71、上传到/usr/local,解压并重命名为mysqltar-zxvfmysql-5.7.26-linux-glibc2.12-x86_64.tar.gz​mvmysql-5.7.26-linux-glibc2.12-x86_64mysql2、创建mysql用户,并授予权限addusermysql​chownmysql:mysql-R/usr/local/mysql......
  • MySQL数据库迁移(直接复制文件)
    MySQL数据库迁移(直接复制文件)-简书(jianshu.com)看了几种方法:1、修改注册表的windows下迁移mysql数据-程序员丁先生-博客园(cnblogs.com)2、mysqldump指令将数据库表/数据保存成xx.sql文件存到本地的(157条消息)如何简单实现mysql数据库迁移_岁月呀的博客-CSDN博客......
  • 20230718 苏州无人车国赛游寄
    7.14早上4:30起床,5:00打车去机场,5:20左右到机场。弄完机票、安检,突然来短信说飞机时间变了,六点半的飞机改到九点半,在机场一直等着。机场空调有点冷( 8:55发现有人登机了,就跟在队伍后面。9:00准时登机,飞机的颜色蛮漂亮的。......
  • mysql进阶
    mysql高级1.存储引擎1.mysql体系结构 2.存储引擎简介a.存储引擎就是存储数据,建立索引,更新查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型3.存储引擎的特点a.InnoDB:是一种兼顾高可靠性能的通用......
  • 方芳:2023-2024年上学期《农业概述》学习笔记黑板报(一)
        《农业概述》武汉市江夏路桥工程有限公司中央财经大学 经济管理学院    方   芳    15927602711第一篇自然-社会大系统中的农业第一-章农业的起源与发展农业在人类历史发展中的作用:(--)农业在原始社会的作用1.大大增加了食物的供应,从而......
  • 2023大数据面试总结
    先说些废话作为一个全栈开发工作者,曾经对公司专职的大数据开发有着浓厚的兴趣,所以尝试学习大数据开发所需要的各种技术栈。本文就是我在学习过程中记录下,所遇到的一些大数据面试的提问,仅供参考。当然,因为时间精力有限,并非所有的问题我都去记录了答案,如果您不了解某些问题或者不......