MySQL与Postgres的比较

MySQL是一个广受欢迎和使用的RDBMS,它的名字来源于创始人Michael Widenius女儿的名字My. MySQL源码基于GNU GPL协议开源,该项目现在由Oracle公司维护。它是一个主要在关系数据库模型上工作的RDBMS (Relational Database Management System),它使得数据库管理更容易、更灵活。

Postgre是一个对象-关系数据库管理系统(ORDBMS),它是在加利福尼亚大学计算机科学系开发的,它开创了许多概念。Postgre是一个企业级的关系数据库,很容易安装和设置,它同时支持SQL和NoSQL。Postgre有一个很好的社区,很乐意在你使用PostgreSQL时遇到问题时为你提供支持。

MySQL发展史

  • MySQL最初由Swedish公司在1995开发,称之为MySQL AB
  • Sun公司在2008年以10亿美元收购MySQL AB
  • Oracle在2010年全资收购Sun,MySQL也随之归到Oracle门下
  • 2012年,Monty Program Ab创始人同时也是MySQL创始人Michael Widenius维护了一个新的MySQL分支即是后来的MariaDB
  • MariaDB在2013年取代了大多数发行版的MySQL
  • 2013年Monty Program Ab与SkySQL合并
  • 2014年SkySQL Ab更名为MariaDB Corporation

PostgreSQL发展史

  • 1977年INGRES被开发出来
  • 1986年Michael Stonebraker和他的同事开发了Postgres
  • 1990年Postgres支持真正的ACID和PL/pgSQL
  • 1995年发布Postgres95
  • 1996年重新发布Postgres95为Postgres 6.0
  • 1998~2001年,添加了MVCC,GUC,联接语法控件和过程语言加载器
  • 2002~2006年,7.2版至8.2版:包含了新的功能如Schema支持,非阻塞VACUUM,角色(Roles)和dblink
  • 2009年,发布Postgres 8.4
  • 2010年,发布Postgres 9.0
  • 2013年,NYCPUG(纽约市PostgreSQL用户组)加入PgUS(美国PostgreSQL协会)
  • 2014年,PGconf组织成立

MySQL对比PostgreSQL

MySQL与PostgreSQL的关键不同

  • PostgreSQL是一个对象关系数据库管理系统(ORDBMS),而MySQL是一个社区驱动的DBMS系统
  • PostgreSQL支持JSON,XML等现代应用程序功能,而MySQL仅支持JSON
  • 执行复杂查询时,PostgreSQL的性能很好,而MySQL在OLAP和OLTP系统中的性能很好
  • PostgreSQL完全符合ACID,而MySQL仅与InnoDB和NDB一起使用时才符合ACID
  • PostgreSQL支持物化视图(Materialized Views),而MySQL不支持物化视图(Materialized Views)

谷歌网页搜索对比

StackOverflow问题百分比

为何选择MySQL?

选择使用MySQL的一些主要理由:

  • 支持主从复制(Master-Slave Replication),横向扩展(Scale-Out)等功能
  • 它支持卸载报告(Offload Reporting),地理数据分发(Geographic Data Distribution)等
  • 当用于大多数场景只读的应用程序时,MyISAM存储引擎的开销非常低
  • 支持常用表的内存存储引擎
  • 重复使用的语句支持查询缓存
  • 文档丰富、社区活跃,可从博客、白皮书和书籍等不同来源轻松学习MySQL并对其进行故障排除

为何选择PostgreSQL?

选择使用Postgre的一些主要理由:

  • 提供很有用的功能,例如表分区,时间点恢复,事务性DDL等
  • 能够在完整的PKI基础架构中利用第三方密钥库
  • 开发人员可以修改BSD许可的开放源代码,而无需提供任何回馈增强功能
  • 独立软件供应商可以重新分发它,而不必担心被开源许可证“感染”
  • 可以为用户和角色分配对象级别特权
  • 支持AES,3DES和其他数据加密算法

MySQL的功能

  • MySQL是社区驱动的DBMS系统
  • 与使用所有主要语言和中间件的各种平台兼容
  • 它支持多版本并发控制
  • 符合ANSI SQL标准
  • 允许基于日志和基于触发器的复制SSL
  • 面向对象且与ANSI-SQL2008兼容
  • 具有独立模块的多层设计
  • 完全多线程,使用内核线程
  • 可以用于嵌入式数据库或客户端服务器模型
  • 提供用于查询分析和空间分析的内置工具
  • 它可以处理任何数量的数据,多达5000万行或更多
  • MySQL可在许多种类的UNIX以及Windows和OS / 2等其他非UNIX系统上运行

PostgreSQL的功能

  • 拥有一个活跃的社区,正在加速其发展
  • 是Oracle,DB2和SQL Server的最常见替代方案
  • 可在所有主要OS平台上运行
  • MVCC支持大量并发用户
  • 广泛的索引以实现高性能报告
  • 支持现代应用程序(XML和JSON)
  • 对可移植技能/代码的ANSI SQL支持
  • 外键支持有效存储数据
  • 表联接和视图可进行灵活的数据检索
  • 复杂程序和交易的触发器/存储过程
  • 复制以进行数据备份和读取可扩展性

MySQL与PostgreSQL区别

对比项 MYSQL PostgreSQL
开源许可 GNU GPL开源许可 类似BSD & MIT的PostgreSQL许可
符合ACID 仅在InnoDB和NDB中支持ACID 完全支持ACID
SQL兼容 部分兼容SQL(如不支持check检查约束) 很大程度上符合SQL
社区支持 拥有大量的贡献者社区,他们主要关注于维护现有功能,偶尔会出现新功能 活跃社区会不断完善现有功能,而创新社区会努力确保它保持最先进的数据库。 定期发布新的尖端功能和安全性增强功能
性能 它主要用于需要数据库进行直接数据交易的基于Web的项目 它在读取和写入速度非常重要的大型系统中得到高度使用
最佳套装 当仅关心读取速度时,MySQL在OLAP&OLTP系统中表现良好 执行复杂查询时,PostgreSQL性能良好
JSON支持 支持JSON数据类型,但不支持任何其他NoSQL功能 支持JSON和其他NoSQL功能,例如XML支持;它还允许索引JSON数据,以加快访问速度
物化视图支持 支持实例化视图和临时表 支持临时表,但不提供实例化视图
生态系统 MySQL具有一个动态的生态系统,其变体包括MariaDB,Percona,Galera等 Postgres的高端选择有限。 但是,它随着最新版本中引入的新功能而改变
默认值 可以在会话级别和语句级别覆盖默认值 默认值只能在系统级别更改
B树索引 适当时可以使用两个或多个B树索引 在运行时合并并评估的B树索引是动态转换的谓词
对象统计 相当好的对象统计 很好的对象统计
StackOverflow 相关问题数量 532K 89.3K
联合查询能力 有限的联合查询能力 很好的联合查询能力
GitHub Stars 3.34k 5.6k
GitHubForks 1.6k 2.4k
使用该产品的知名公司 Airbnb, Uber, Twitter Netflix, Instagram, Groupon

MySQL的缺点

  • 与系统目录相关的事务不符合ACID
  • 有时服务器崩溃可能会损坏系统目录
  • 没有可插拔的身份验证模块,无法集中管理帐户
  • 不支持角色,因此很难为许多用户维护特权
  • 存储过程不可缓存
  • 用于过程或触发器的表总是预先锁定的

PostgreSQL的缺点

  • 当前的外部解决方案需要较高的学习曲线
  • 没有针对主要版本的升级功能
  • 数据需要导出或复制到新版本
  • 升级过程中需要双重存储
  • 索引不能用于直接返回查询结果
  • 查询执行计划未缓存
  • 批量加载操作可能会限制CPU
  • 稀疏独立软件供应商支持

哪个更好?

比较了两者之后,我们可以说MySQL在改进自身以保持相关性方面做得很出色,但另一方面,对于PostgreSQL,不需要任何许可;它还提供表继承,规则系统,自定义数据类型和数据库事件。 因此可以说,PostgreSQL的边界肯定比MySQL高。

参考文档

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×