MySQL
MySQL是一个RDBMS,这意味着它具有人们期望的所有标准功能——表、视图、外键、存储过程和 ACID兼容性(使用 InnoDB 时)。它适用于大多数OLTP工作负载和一些OLAP工作负载。
虽然我已经看到一些实现非常复杂和重要的工作负载,但MySQL倾向于在标准、关系模式和基于Web的工作负载上大放异彩。简单的异步复制允许读取扩展和报表分离。同步复制支持HA,同时仍保持ACID和高吞吐量。
PostgreSQL
PostgreSQL是一个ORDBMS(对象关系数据库管理系统)。采用了所有标准 RDBMS功能,并添加了对复杂对象、表继承和JSON之外的其他数据类型的支持。这似乎是一个很小的差异,但它允许PostgreSQL支持更复杂的工作负载和模式设计。
与MySQL类似,复制允许团队构建不同的架构。这有助于提高HA和读取扩展性。虽然它绝对可以支持标准的OLTP/OLAP工作负载,但社区仍在不断开发新的特性和功能。这样可以更轻松地适用于更广泛的工作负载。
MySQL和PostgreSQL关键性差异
二者主要区别在于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/