面试官:如果你是架构师,PostgreSQL 和 MySQL 你选择哪个?
大家好,我是君哥。
这两年,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 也能满足。除了技术方面,也要结合其他非技术的因素综合考虑。
从 MySQL 迁移到 GoldenDB,上来就踩了一个坑。
面试官:MySQL Redo Log 和 Undo Log 有什么区别?分别用在什么场景?
感谢阅读,如果对你有帮助,请点赞和在看。欢迎加我微信:zhujinjun86。
号内回复 seata,下载《阿里分布式中间件Seata从入门到精通》
号内回复 beijing,下载我总结的北京上百家知名科技公司
号内回复 aqs,下载《40张图精通Java AQS》