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)
为何选择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高。