MySQL vs PostgreSQL: 5個你最關注的非技術維度的區(qū)別
“ 開源數(shù)據(jù)庫中有一對冤家,我想大家都知道,那就是 MySQL 與 Postgre SQL。兩個派系的恩怨情仇從何而來,今天我們將從非技術的角度來進行分析。 本文僅代表個人觀點,如有不同意見歡迎交流。”
說明:本文主要的關注點,是 MySQL 與 PostgreSQL 的非技術比較。
簡單評價
MySQL 流行較多,PostgreSQL 功能更全面。其主要原因是,MySQL很早的時候,就支持主從復制,在互聯(lián)網起步(2000 年后第一次互聯(lián)網大潮)的時候,被廣泛使用。PostgreSQL 到2010 年左右才首次支持主從復制,無法作為互聯(lián)網類應用的核心,錯過了較好的發(fā)展機會,在非互聯(lián)網領域,由于在商業(yè)支持以及數(shù)據(jù)庫特性支持方面,無法與商業(yè)數(shù)據(jù)庫如 Oracle 等較量,PostgreSQL 始終未能形成潮流,到 Greenplum 出現(xiàn),才在 OLAP 數(shù)據(jù)倉庫領域得到廣泛使用。
核心特點
MySQL
目前最流行的開源數(shù)據(jù)庫。
由于其部署方便,運維簡單,被廣泛用于互聯(lián)網的各個領域,目前隨著整體 IT 架構的變更,傳統(tǒng)的金融,電信業(yè)務,也開始逐漸從 Oracle 向 MySQL 遷移。
主打架構為主從異步復制,在 5.5 開始,支持半同步復制,5.7 開始,支持 Group Replication 復制。
PostgreSQL
開源的關系數(shù)據(jù)庫里面,功能最豐富的數(shù)據(jù)庫。
支持到 SQL 標準 2008(MySQL 只支持到 SQL 89 以及 SQL92 的一部分),以及 SQL OLAP 2003 標準(MySQL 基本沒有支持)。被廣泛用于數(shù)據(jù)倉庫類應用,基于其發(fā)展出來的 Greenplum 作為分布式并行計算數(shù)據(jù)庫架構被廣泛使用。
數(shù)據(jù)庫的主從復制,支持異步,日志同步,寫同步等多種級別。
發(fā)展歷史
MySQL
- MySQL 最早來源于 MySQL AB 公司前身的 ISAM 與 mSQL 項目(主要用于數(shù)據(jù)倉庫場景),于 1996 年前后發(fā)布第一個版本 MYSQL 1.0,當時只支持 SQL 特性,沒有事務支持。
- 隨后 MySQL 正式發(fā)布 3.11.1 版本,是第一個對外提供服務的版本,MySQL 主從復制功能也是從這個時候加入到 MySQL。
- 2000 年前后,InnoDB 引擎出現(xiàn),并試圖加入到 MySQL 中。
- 2003 年 12 月,MySQL 5.0 版本發(fā)布,提供了視圖、存儲過程等功能。
- 2008 年 1 月,MySQL AB 公司被 Sun 公司以 10 億美金收購,MySQL 數(shù)據(jù)庫進入 Sun時代。在 Sun 時代,Sun 公司對其進行了大量的推廣、優(yōu)化、Bug 修復等工作。
- 2008 年 11 月,MySQL 5.1 發(fā)布,它提供了分區(qū)、事件管理,以及基于行的復制和基于磁盤的 NDB 集群系統(tǒng),同時修復了大量的 Bug。
- 2009 年 4 月,Oracle 公司以 74 億美元收購 Sun 公司,自此 MySQL 數(shù)據(jù)庫進入Oracle 時代,而其第三方的存儲引擎 InnoDB 早在 2005 年就被 Oracle 公司收購。
- 2010 年 12 月,MySQL 5.5 發(fā)布,其主要新特性包括半同步的復制及對SIGNAL/RESIGNAL 的異常處理功能的支持,最重要的是 InnoDB 存儲引擎終于變?yōu)楫斍癕ySQL 的默認存儲引擎。MySQL 5.5 不是時隔兩年后的一次簡單的版本更新,而是加強了 MySQL 各個方面在企業(yè)級的特性。Oracle 公司同時也承諾 MySQL 5.5 和未來版本仍是采用 GPL 授權的開源產品。這個版本也是目前已知使用最廣泛的 MySQL 版本,并且到目前位置,已知的 MySQL 第三方發(fā)行版,基本上都是從這一版本開始做獨立分支,由于MySQL 5.5 版本被廣泛使用,甚至到目前為止,Oracle 公司仍然對這個版本進行著維護。
- 2011 年 4 月,MySQL 5.6 發(fā)布,作為被 Oracle 收購后,第一個正式發(fā)布并做了大量變更的版本(5.5 版本主要是對社區(qū)開發(fā)的功能的集成),對復制模式,優(yōu)化器等做了大量的變更,其中最重要的主從 GTID 復制模式,大大降低了 MySQL 高可用操作的復雜性,除此之外,由于對源代碼進行了大量的調整,到 2013 年,5.6 版本才正式 GA。
- 2013 年 4 月,5.6 版本 GA 后,新特性的變更,開始作為獨立的 5.7 分支進行進一步開發(fā),在并行控制,并行復制等方面,進行了大量的優(yōu)化調整,正式 GA 于 2015 年 10 月份,這個版本也是到目前為止的,最新的穩(wěn)定版本分支。
- 2016 年 9 月,Oracle 決定跳過 MySQL 5.x 命名系列,并拋棄之前的 MYSQL 6,7 兩個分支(從來沒有對外發(fā)布的兩個分支),直接進入 MySQL 8 版本命名,也就是 MySQL 8.0 版本的開發(fā),目前這個版本仍舊處于開發(fā)中,新特性尚未穩(wěn)定。
PostgreSQL
- PostgreSQL 的主要最初來源,是加州大學伯克利分校的教學項目,最早是名為 Ingres 的項目,后來項目進一步變更為 Postgre 項目,用于關系對象數(shù)據(jù)庫課程的教學。
- 1995 年,PostgreSQL 正式發(fā)布第一個可用版本 postgres95 版本,其首次集成 SQL 引擎進入 PostgreSQL 項目。
- 隨后的 1996 年,為了避免版本號混亂,PostgreSQL 重新發(fā)布版本 6.0,并在之后 4 年內,集成新功能并發(fā)布了版本 7.0,包括 MVCC 等重要特性都是在是這個時期加入的。
- 2000 年后,7.0 版本到 7.4 版本,主要集中在圍繞 SQL 92 標準的集成,以及數(shù)據(jù)庫事務支持的完善上。
- 2005 年,8.0 版本發(fā)布,主要變更集中在功能性方面,支持了基于時間點的數(shù)據(jù)庫恢復,外部表空間等特性,隨后的 8.x 版本。增加了分布式事務,以及 SQL/XML 標準的支持,窗口函數(shù)等 OLAP 特性等,并且支持 windows 平臺 vc++ 編譯器的編譯。
- 2010 年,PostgreSQL9.0 版本發(fā)布,正式引入 WAL 流復制(在之前的版本是不支持主從復制結構的),并正式支持 64 位 windows 平臺。
- 2011 年,PostgreSQL9.1 版本發(fā)布,支持同步復制,以及可串行化隔離級別等。
- 2012 年,PostgreSQL 9.2 版本發(fā)布,支持級聯(lián)復制,并在主從復制的易用性上,進行了大量改進型工作。
- 2013 年,PostgreSQL 9.3 版本發(fā)布,支持物化視圖,JSON 格式數(shù)據(jù)操作等。
- 2014 年,PostgreSQL 9.4 版本發(fā)布,JSON 原生格式 jsonb 納入數(shù)據(jù)類型體系,WAL可以解析為可讀信息。
- 2016 年 1 月,PostgreSQL 9.5 發(fā)布,安全控制可以到行級別,對排序與多 CPU 架構進行了大量針對性優(yōu)化。
- 2016 年 9 月,PostgreSQL 9.6 版本發(fā)布,新增并行查詢,多從庫同步復制等特性。
當前主流版本
MYSQL
- MySQL 官方版以及商業(yè)版
Oracle 官方承諾支持新版本的開發(fā),目前由 Oracle 官方的 MySQL 開發(fā)團隊支持,網站站點為 https://www.mysql.com/。
MySQL 商業(yè)版相比較開源版本,主要是對安全,審計等方面的增強,如果需要實用,需要支付授權費用。
- Percona Server
目前最活躍的第三方發(fā)行版本,由商業(yè)公司 Percona 公司支持,目前最大的開源數(shù)據(jù)庫社區(qū)會議之一 Poercona Live 就是由 Percona 公司舉辦,主要是對 MySQL 的官方開源版本,進行功能性以及管理性進行強化,網站 https://www.percona.com/。
- MariaDB
為了避免 Oracle 公司擁有 MySQL 后,停滯對 MySQL 的開發(fā),MySQL 核心研發(fā)工程師Monty 與其開發(fā)團隊在 MySQL 5.5 版本后,獨立出 MariaDB 分支,并且隨后變更版本號為10.x 系列版本,與 MySQL 官方不再同步代碼與特性。其主要在功能性上相比較官方版本做了很多的增強,相當多無法進入官方分支的社區(qū)自發(fā)性功能性能方面的補?。▉碜?google,facebook,阿里巴巴等)被加入到這一分支。
國內包括阿里巴巴,騰訊在內的數(shù)據(jù)庫內核團隊,都與 MariaDB 有較為深入的合作,其中來自阿里巴巴的彭立勛(MySQL ACE)目前是 MariaDB 復制功能部分的負責人。
目前,包括 readhat,ubuntu 在內的多個主流 linux 發(fā)行版本,內置的數(shù)據(jù)庫版本均為MariaDB,而非 Oracle 公司的 MYSQL 版本。社區(qū)版本 http://mariadb.org/
- 中國 MYSQL 第三方發(fā)行版
- AliSQL
- 來源為阿里巴巴阿里云 RDS 團隊,對復制,安全等多方面都有增強,其主要版本基于 MySQL 5.6 開發(fā),內置 TokuDB 等第三方存儲引擎的支持。
- InnoSQL
- 來源為網易杭州研究院,主要作者為姜承堯(MySQL ACE), 對 MySQL 復制等方面有很多的增強實現(xiàn)。
- OneSQL
- 來源為平民軟件的樓方鑫 (Oracle ACE),對數(shù)據(jù)庫在高并發(fā)場景下的處理進行了很多優(yōu)化。
- AliSQL
PostgeSQL
PostgeSQL 目前主流為社區(qū)支持的官方版本,網站:https://www.postgresql.org/。
商業(yè)支持來自 EnterpriseDB 公司,包含一個增強了很多功能的商業(yè)版本,https://www.enterprisedb.com/
Pivotal 提供了基于 PostgeSQL 的 MPP 數(shù)據(jù)庫 Greenplum 的支持,https://pivotal.io/
當前國內主要社區(qū)
MYSQL
- CMUG
China MySQL User Group(簡稱 CMUG) 是中國 MySQL 愛好者自發(fā)形成的一個組織,為IOUC 官方注冊的社區(qū)組織。
其主要成員為 MySQL ACE 以及其他 MySQL 社區(qū)有較大影響能力的人,主席周彥偉為MySQL ACE,去哪兒 MYSQL 經理,社區(qū)主要成員基本上都是來自各大互聯(lián)網公司(阿里,騰訊,去哪,新浪等)的 MySQL 核心專家,http://acmug.com/acmug-member
有定時組織的全國巡游會議,以及社區(qū)群落。
PostgreSQL
- PostgreSQL 中國用戶組
來源于國內 PostgreSQL 社區(qū)主導的組織,核心成員為 PostgreSQL 的國內主要領袖,主席蕭少聰目前為阿里云核心數(shù)據(jù)庫專家。
當前主要使用范圍
MySQL
- 社交新聞類
包括騰訊(含微信),新浪,今日頭條,陌陌等在內的已知的國內社交領域公司,數(shù)據(jù)庫均是使用 MySQL。
- 電商類
電商領域,阿里巴巴從 2009 年前后開始,逐漸替換原先的 Oracle(IOE)架構為 MySQL 開源架構,并在隨后幾年,完全替換所有 Oracle 架構。
京東最早為 SQL Server 架構,后續(xù)由于性能問題,經歷短暫的 Oracle 時期后,目前主體核心均為 MySQL。
蘇寧易購,早期為 IBM DB2 架構,后續(xù)逐漸替換為 MySQL 架構。
- 互聯(lián)網金融類
借貸寶:核心使用 MySQL 數(shù)據(jù)庫,外圍部分依賴系統(tǒng)使用 Oracle。
- 游戲娛樂類
騰訊游戲:主體使用 MySQL 數(shù)據(jù)庫。
PostgreSQL
- 數(shù)據(jù)倉庫類
由于 PostgreSQL 的第三方版本 Greenplum 在數(shù)據(jù)倉庫的大量應用,目前 Greenplum 已經是實際的 MPP 數(shù)據(jù)庫標準。
德邦快遞:數(shù)百 TB 的 Greenplum 單個集群。
咪咕游戲:數(shù)百 TB 的 Greenplum 單個集群。
- 業(yè)務系統(tǒng)類
由于對 SQL 特性的完整支持,對業(yè)務開發(fā)以及遷移相對友好,有很多地方采用 PostgreSQL 作為業(yè)務系統(tǒng)。
浙江移動:采用 PostgreSQL-XC 替換原先的 Oracle 架構。