Py学习  »  DATABASE

面试官:如果你是架构师,PostgreSQL 和 MySQL 你选择哪个?

脚本之家 • 6 月前 • 244 次点击  
脚本之家 设为“星标
第一时间收到文章更新
图片
来源 | 君哥聊技术(ID:gh_1f109b82d301)

这两年,PostgreSQL 逐渐超越 MySQL 成为最受欢迎的数据库。那我们技术选型的时候,该选哪一款呢?今天来聊一聊这个话题。

1.比较

1.背景

先说一说两款数据库的背景。

MySQL 最初由 MySQL AB 公司开发,设计理念是“快速、可靠、易用”。现在是 Oracle 旗下产品,由 Oracle 公司主导。包括商业版和社区版。基于 GPL 协议,但归属 Oracle 还是让开发者有所顾忌。

PostgreSQL 是一个关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的 POSTGRES 4.2 版本为基础的关系型数据库管理系统,作为 Ingres 数据库的后继,学院派风格,设计和功能实现更加严谨。POSTGRES 基于 BSD/MIT 许可,企业和个人只要提供版权声明,就可以修改源代码。

2.特性

SQL 兼容性方面,MySQL 遵循标准,但有自己的小部分“方言” ,PostgreSQL 则具有更高的兼容性,更贴近 SQL 标准。

数据类型定义方面,MySQL 主要支持常规类型(比如数值、字符串、时间等)。PostgreSQL 的数据类型更加丰富。支持数组、JSONB(用于存储 JSON 数据的二进制格式)、HSTORE(键值对)、范围类型、自定义类型。这也让 PostgreSQL 能更容易地存储复杂数据。

性能方面,对于 70% 以上的需求,两款数据库都可以满足。MySQL 更适用于简单的 SQL 场景,或者读多写少的场景。PostgreSQL 则在复杂 SQL、读写频繁、高并发场景下更有优势。

扩展性方面,两款数据库都支持分区表。都可以通过 Sharding 来实现分库分表,也可以依赖成熟的中间件(如 Vitess, ProxySQL)。

在全文搜索方面,PostgreSQL 提供 tsvector 和 tsquery 数据类型,专门用于文本搜索,配合全文搜索向量和查询机制,可实现更精准的文本匹配。通过 GIN(Generalized Inverted Index)或 GiST(Generalized Search Tree)索引机制实现全文搜索,能够高效处理地理空间数据和复杂文本查询。MySQL虽支持文本搜索,但比较基础。

在安全性方面,PostgreSQL 具有精细的访问控制(可以精确到行级),统一的权限模型,丰富的认证机制,这些方面优于 MySQL。MySQL 则在企业版上有透明数据加密等优势。

在学习方面,MySQL 文档、教程、社区、管理工具非常丰富,好多问题在网路上能搜到答案。

2.项目维度

读写模式是什么?比如博客网站、内容管理平台,读多写少,使用 MySQL 就够用了。再比如金融核心系统、会存在复杂查询,这类系统使用 PostgreSQL 会更有优势。

在数据模型上,如果都是结构化数据,那两个数据库都可以。如果有非结构化数据,比如数组、JSON、键值对等,那 PostgreSQL 更有优势。

在性能方面,如果并发、延迟都有较高要求,比如核心交易系统,那选择 PostgreSQL 更合适。

受索引结构的影响,索引树层级相同的情况下,PostgreSQL 能够容纳的数据量更大。而深度增加,一次查询就可能多一次磁盘 I/O。

3.团队因素

开发团队对哪一款数据库更熟悉,运维团队对哪一款数据库更有经验。选择其中一款会不会给团队带来很大的学习成本?

会不会因为选择一款数据库而需要招聘新人,增加人力成本。

4.总结

PostgreSQL 确实在多个方面比 MySQL 具有优势,但是大多数的场景,MySQL 也能满足。除了技术方面,也要结合其他非技术的因素综合考虑。

图片

  推荐阅读:
  1. 面试官:MySQL 使用多表 JOIN 有哪些危害?
  2. 学习MySQL绕不开的两个基础概念:聚集索引与非聚集索引
  3. 一篇文章全面重温MySQL的join操作
  4. 面试官:MySQL BETWEEN AND 语句包括边界吗?

  5. MySQL 一个会话占用几十 GB,你敢信?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/188145