DBA 可以按照自己的方式进行设置。通常,我们从一种特定的风味开始,从那一刻到时间结束,它永远是“最好的”。在某些情况下,辩论实际上是基于将用例与适当的技术相匹配(我在看你 SQL 与 NoSQL)。最近,我开始看到许多团队使用同一种通用技术的多种风格工作,这就引出了一个问题:哪种技术“更好”?
本着全面披露的精神,我是那些以一种风格广泛工作的“我行我素”的 DBA 之一。在过去 15 年的大部分时间里,MySQL 一直是我关注的焦点。虽然我的一部分想坐在门廊上,挥舞着我的手杖,并告诉其他口味“离开我的草坪”,但我却以此为契机,以客观的方式真正检查 PostgreSQL 与 MySQL。
这是从 MySQL DBA 的角度探索 PostgreSQL 的系列文章中的第一篇。我将从一个非常高的层次开始——这两种技术是什么,它们有什么相似之处,它们有什么不同等等。在以后的文章中,我将着眼于操作、架构和其他方面,以了解更多关于PostgreSQL。
MySQL
MySQL 是一个 RDBMS(关系数据库管理系统)。这意味着它具有人们期望的所有标准功能——表、视图、外键、存储过程和 ACID 合规性(使用 InnoDB 时)。它适用于大多数 OLTP 工作负载和一些 OLAP 工作负载。
虽然我已经看到一些实现非常复杂和重要的工作负载,但 MySQL 倾向于在标准、关系模式和基于 Web 的工作负载上大放异彩。简单的异步复制允许轻松读取扩展和报告查询卸载。同步复制允许直接的 HA,同时仍保持 ACID 和高吞吐量。
PostgreSQL
PostgreSQL 是一个 ORDBMS(对象关系数据库管理系统)。这采用了所有标准 RDBMS 功能,并添加了对复杂对象、表继承和 JSON 之外的其他数据类型的支持。这似乎是一个很小的差异,但它允许 PostgreSQL 支持更复杂的工作负载和模式设计。
与 MySQL 类似,复制允许团队构建不同的架构。这有助于提高 HA 和读取可扩展性。虽然它绝对可以支持标准的 OLTP/OLAP 工作负载,但广大社区仍在不断开发新的特性和功能。这样可以更轻松地采用更广泛的工作负载。
主要功能差异
两种风格的主要区别在于 PostgreSQL 提供自定义对象定义和表继承。这极大地扩展了标准关系数据库模型并为非常复杂的工作负载提供支持。
其他一些差异包括:
- 与仅支持 JSON 的 MySQL 相比,PostgreSQL 支持更现代的数据类型(JSON、XML 等)
- PostgreSQL 支持物化视图
- PostgreSQL 使用类似于 BSD/MIT 的开源许可证,而 MySQL 使用 GPL 许可证
初步要点
在查看了高层次的差异和相似之处之后,这两种风格肯定在开源数据库生态系统中占有一席之地。虽然这两个选项都适用于基本的关系工作负载,但 MySQL 在基于 Web 的应用程序中表现出色,而 PostgreSQL 在复杂工作负载方面表现出色。这符合我一直看到的一个关键趋势——新的应用程序/微服务倾向于在 MySQL 上启动,因为它们被设计为具有非常基本的数据结构和关系。相比之下,PostgreSQL 通常是从大型企业数据库迁移到开源的目标。
那么哪个“更好”呢?就像每个好的咨询答案一样,这取决于。两者都有优点和缺点,这使得目标应用程序成为关键的决定因素。随着大型企业对应用程序进行现代化改造(也称为重写),同时还将遗留的单体应用程序迁移到开源以避免许可成本,这也导致了更多的混合环境。
文章来源:https://www.percona.com/blog/postgresql-from-the-perspective-of-a-mysql-dba/