“ 开源数据库中有一对冤家,我想大家都知道,那就是 MySQL 与 Postgre SQL。两个派系的恩怨情仇从何而来,今天我们将从非技术的角度来进行分析。 本文仅代表个人观点,如有不同意见欢迎交流。”
说明:本文主要的关注点,是 MySQL 与 PostgreSQL 的非技术比较。
简单评价
MySQL 流行较多,PostgreSQL 功能更全面。其主要原因是,MySQL很早的时候,就支持主从复制,在互联网起步(2000 年后第一次互联网大潮)的时候,被广泛使用。PostgreSQL 到2010 年左右才首次支持主从复制,无法作为互联网类应用的核心,错过了较好的发展机会,在非互联网领域,由于在商业支持以及数据库特性支持方面,无法与商业数据库如 Oracle 等较量,PostgreSQL 始终未能形成潮流,到 Greenplum 出现,才在 OLAP 数据仓库领域得到广泛使用。
核心特点
MySQL
目前最流行的开源数据库。
由于其部署方便,运维简单,被广泛用于互联网的各个领域,目前随着整体 IT 架构的变更,传统的金融,电信业务,也开始逐渐从 Oracle 向 MySQL 迁移。
主打架构为主从异步复制,在 5.5 开始,支持半同步复制,5.7 开始,支持 Group Replication 复制。
PostgreSQL
开源的关系数据库里面,功能最丰富的数据库。
支持到 SQL 标准 2008(MySQL 只支持到 SQL 89 以及 SQL92 的一部分),以及 SQL OLAP 2003 标准(MySQL 基本没有支持)。被广泛用于数据仓库类应用,基于其发展出来的 Greenplum 作为分布式并行计算数据库架构被广泛使用。
数据库的主从复制,支持异步,日志同步,写同步等多种级别。
发展历史
MySQL
- MySQL 最早来源于 MySQL AB 公司前身的 ISAM 与 mSQL 项目(主要用于数据仓库场景),于 1996 年前后发布第一个版本 MYSQL 1.0,当时只支持 SQL 特性,没有事务支持。
- 随后 MySQL 正式发布 3.11.1 版本,是第一个对外提供服务的版本,MySQL 主从复制功能也是从这个时候加入到 MySQL。
- 2000 年前后,InnoDB 引擎出现,并试图加入到 MySQL 中。
- 2003 年 12 月,MySQL 5.0 版本发布,提供了视图、存储过程等功能。
- 2008 年 1 月,MySQL AB 公司被 Sun 公司以 10 亿美金收购,MySQL 数据库进入 Sun时代。在 Sun 时代,Sun 公司对其进行了大量的推广、优化、Bug 修复等工作。
- 2008 年 11 月,MySQL 5.1 发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的 NDB 集群系统,同时修复了大量的 Bug。
- 2009 年 4 月,Oracle 公司以 74 亿美元收购 Sun 公司,自此 MySQL 数据库进入Oracle 时代,而其第三方的存储引擎 InnoDB 早在 2005 年就被 Oracle 公司收购。
- 2010 年 12 月,MySQL 5.5 发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL 的异常处理功能的支持,最重要的是 InnoDB 存储引擎终于变为当前MySQL 的默认存储引擎。MySQL 5.5 不是时隔两年后的一次简单的版本更新,而是加强了 MySQL 各个方面在企业级的特性。Oracle 公司同时也承诺 MySQL 5.5 和未来版本仍是采用 GPL 授权的开源产品。这个版本也是目前已知使用最广泛的 MySQL 版本,并且到目前位置,已知的 MySQL 第三方发行版,基本上都是从这一版本开始做独立分支,由于MySQL 5.5 版本被广泛使用,甚至到目前为止,Oracle 公司仍然对这个版本进行着维护。
- 2011 年 4 月,MySQL 5.6 发布,作为被 Oracle 收购后,第一个正式发布并做了大量变更的版本(5.5 版本主要是对社区开发的功能的集成),对复制模式,优化器等做了大量的变更,其中最重要的主从 GTID 复制模式,大大降低了 MySQL 高可用操作的复杂性,除此之外,由于对源代码进行了大量的调整,到 2013 年,5.6 版本才正式 GA。
- 2013 年 4 月,5.6 版本 GA 后,新特性的变更,开始作为独立的 5.7 分支进行进一步开发,在并行控制,并行复制等方面,进行了大量的优化调整,正式 GA 于 2015 年 10 月份,这个版本也是到目前为止的,最新的稳定版本分支。
- 2016 年 9 月,Oracle 决定跳过 MySQL 5.x 命名系列,并抛弃之前的 MYSQL 6,7 两个分支(从来没有对外发布的两个分支),直接进入 MySQL 8 版本命名,也就是 MySQL 8.0 版本的开发,目前这个版本仍旧处于开发中,新特性尚未稳定。
PostgreSQL
- PostgreSQL 的主要最初来源,是加州大学伯克利分校的教学项目,最早是名为 Ingres 的项目,后来项目进一步变更为 Postgre 项目,用于关系对象数据库课程的教学。
- 1995 年,PostgreSQL 正式发布第一个可用版本 postgres95 版本,其首次集成 SQL 引擎进入 PostgreSQL 项目。
- 随后的 1996 年,为了避免版本号混乱,PostgreSQL 重新发布版本 6.0,并在之后 4 年内,集成新功能并发布了版本 7.0,包括 MVCC 等重要特性都是在是这个时期加入的。
- 2000 年后,7.0 版本到 7.4 版本,主要集中在围绕 SQL 92 标准的集成,以及数据库事务支持的完善上。
- 2005 年,8.0 版本发布,主要变更集中在功能性方面,支持了基于时间点的数据库恢复,外部表空间等特性,随后的 8.x 版本。增加了分布式事务,以及 SQL/XML 标准的支持,窗口函数等 OLAP 特性等,并且支持 windows 平台 vc++ 编译器的编译。
- 2010 年,PostgreSQL9.0 版本发布,正式引入 WAL 流复制(在之前的版本是不支持主从复制结构的),并正式支持 64 位 windows 平台。
- 2011 年,PostgreSQL9.1 版本发布,支持同步复制,以及可串行化隔离级别等。
- 2012 年,PostgreSQL 9.2 版本发布,支持级联复制,并在主从复制的易用性上,进行了大量改进型工作。
- 2013 年,PostgreSQL 9.3 版本发布,支持物化视图,JSON 格式数据操作等。
- 2014 年,PostgreSQL 9.4 版本发布,JSON 原生格式 jsonb 纳入数据类型体系,WAL可以解析为可读信息。
- 2016 年 1 月,PostgreSQL 9.5 发布,安全控制可以到行级别,对排序与多 CPU 架构进行了大量针对性优化。
- 2016 年 9 月,PostgreSQL 9.6 版本发布,新增并行查询,多从库同步复制等特性。
当前主流版本
MYSQL
- MySQL 官方版以及商业版
Oracle 官方承诺支持新版本的开发,目前由 Oracle 官方的 MySQL 开发团队支持,网站站点为 https://www.mysql.com/。
MySQL 商业版相比较开源版本,主要是对安全,审计等方面的增强,如果需要实用,需要支付授权费用。
- Percona Server
目前最活跃的第三方发行版本,由商业公司 Percona 公司支持,目前最大的开源数据库社区会议之一 Poercona Live 就是由 Percona 公司举办,主要是对 MySQL 的官方开源版本,进行功能性以及管理性进行强化,网站 https://www.percona.com/。
- MariaDB
为了避免 Oracle 公司拥有 MySQL 后,停滞对 MySQL 的开发,MySQL 核心研发工程师Monty 与其开发团队在 MySQL 5.5 版本后,独立出 MariaDB 分支,并且随后变更版本号为10.x 系列版本,与 MySQL 官方不再同步代码与特性。其主要在功能性上相比较官方版本做了很多的增强,相当多无法进入官方分支的社区自发性功能性能方面的补丁(来自 google,facebook,阿里巴巴等)被加入到这一分支。
国内包括阿里巴巴,腾讯在内的数据库内核团队,都与 MariaDB 有较为深入的合作,其中来自阿里巴巴的彭立勋(MySQL ACE)目前是 MariaDB 复制功能部分的负责人。
目前,包括 readhat,ubuntu 在内的多个主流 linux 发行版本,内置的数据库版本均为MariaDB,而非 Oracle 公司的 MYSQL 版本。社区版本 http://mariadb.org/
- 中国 MYSQL 第三方发行版
- AliSQL
- 来源为阿里巴巴阿里云 RDS 团队,对复制,安全等多方面都有增强,其主要版本基于 MySQL 5.6 开发,内置 TokuDB 等第三方存储引擎的支持。
- InnoSQL
- 来源为网易杭州研究院,主要作者为姜承尧(MySQL ACE), 对 MySQL 复制等方面有很多的增强实现。
- OneSQL
- 来源为平民软件的楼方鑫 (Oracle ACE),对数据库在高并发场景下的处理进行了很多优化。
- AliSQL
PostgeSQL
PostgeSQL 目前主流为社区支持的官方版本,网站:https://www.postgresql.org/。
商业支持来自 EnterpriseDB 公司,包含一个增强了很多功能的商业版本,https://www.enterprisedb.com/
Pivotal 提供了基于 PostgeSQL 的 MPP 数据库 Greenplum 的支持,https://pivotal.io/
当前国内主要社区
MYSQL
- CMUG
China MySQL User Group(简称 CMUG) 是中国 MySQL 爱好者自发形成的一个组织,为IOUC 官方注册的社区组织。
其主要成员为 MySQL ACE 以及其他 MySQL 社区有较大影响能力的人,主席周彦伟为MySQL ACE,去哪儿 MYSQL 经理,社区主要成员基本上都是来自各大互联网公司(阿里,腾讯,去哪,新浪等)的 MySQL 核心专家,http://acmug.com/acmug-member
有定时组织的全国巡游会议,以及社区群落。
PostgreSQL
- PostgreSQL 中国用户组
来源于国内 PostgreSQL 社区主导的组织,核心成员为 PostgreSQL 的国内主要领袖,主席萧少聪目前为阿里云核心数据库专家。
当前主要使用范围
MySQL
- 社交新闻类
包括腾讯(含微信),新浪,今日头条,陌陌等在内的已知的国内社交领域公司,数据库均是使用 MySQL。
- 电商类
电商领域,阿里巴巴从 2009 年前后开始,逐渐替换原先的 Oracle(IOE)架构为 MySQL 开源架构,并在随后几年,完全替换所有 Oracle 架构。
京东最早为 SQL Server 架构,后续由于性能问题,经历短暂的 Oracle 时期后,目前主体核心均为 MySQL。
苏宁易购,早期为 IBM DB2 架构,后续逐渐替换为 MySQL 架构。
- 互联网金融类
借贷宝:核心使用 MySQL 数据库,外围部分依赖系统使用 Oracle。
- 游戏娱乐类
腾讯游戏:主体使用 MySQL 数据库。
PostgreSQL
- 数据仓库类
由于 PostgreSQL 的第三方版本 Greenplum 在数据仓库的大量应用,目前 Greenplum 已经是实际的 MPP 数据库标准。
德邦快递:数百 TB 的 Greenplum 单个集群。
咪咕游戏:数百 TB 的 Greenplum 单个集群。
- 业务系统类
由于对 SQL 特性的完整支持,对业务开发以及迁移相对友好,有很多地方采用 PostgreSQL 作为业务系统。
浙江移动:采用 PostgreSQL-XC 替换原先的 Oracle 架构。