針對排名前三的開源數據庫:MySQL、PostgreSQL、MongoDB,受歡迎程度趨勢如下:

從趨勢上看,MySQL 在開源數據庫受歡迎程度榜單上穩居第一; 2014年以來,PostgreSQL、MongoDB呈持續增長態勢,與MySQL差距仍然巨大。
| Name |
MySQL |
MongoDB |
PostgreSQL |
| Description |
Widely used open source RDBMS |
One of the most popular document stores |
Based on the object relational DBMS Postgres |
| Database model |
|||
| Developer |
Oracle |
MongoDB, Inc |
PostgreSQL Global Development Group |
| Initial release |
1995 |
2009 |
1989 |
| Current release |
5.7.18, April 2017 |
3.4.5, June 2017 |
9.6.3, May 2017 |
| License |
Open Source |
Open Source |
Open Source |
| Cloud-based |
no |
no |
no |
| Implementation language |
C and C++ |
C++ |
C |
| Server operating systems |
FreeBSD |
Linux |
FreeBSD |
| Data scheme |
yes |
schema-free |
yes |
| Typing |
yes |
yes |
yes |
| XML support |
yes |
yes |
|
| Secondary indexes |
yes |
yes |
yes |
| SQL |
yes |
no |
yes |
| APIs and other access methods |
ADO.NET |
proprietary protocol using JSON |
native C library |
| Supported programming languages |
Ada |
Actionscript |
.Net |
| Server-side scripts |
yes |
JavaScript |
user defined functions |
| Triggers |
yes |
no |
yes |
| Partitioning methods |
horizontal partitioning, sharding with MySQL Cluster or MySQL Fabric |
Sharding |
no, but can be realized using table inheritance |
| Replication methods |
Master-master replication |
Master-slave replication |
Master-slave replication |
| MapReduce |
no |
yes |
no |
| Consistency concepts |
Immediate Consistency |
Eventual Consistency |
Immediate Consistency |
| Foreign keys |
yes |
no |
yes |
| Transaction concepts |
ACID |
no |
ACID |
| Concurrency |
yes |
yes |
yes |
| Durability |
yes |
yes |
yes |
| In-memory capabilities |
yes |
yes |
no |
| User concepts |
Users with fine-grained authorization concept |
Access rights for users and roles |
fine grained access rights according to SQL-standard |
MySQL和PostgreSQL是目前主流的兩個開源關系數據庫,同樣都是開源產品,MySQL長期以來被認為是更加快速但支持的特性較少;而PostgreSQL則提供了豐富的特性經常被描述為開源版的Oracle。
MySQL已經由於它的快速和易用變得非常流行,但PostgreSQL正得到越來越多來自Oracel或SQL Server背景的開發人員的追從。 但隨着發展,MySQL已經加入了很多高級特性,PostgreSQL也大大提高了它的速度。
-
許可
MySQL分商業版和社區版,社區版為GPL許可,允許免費使用,但是如果你要分發你的代碼,你可以選擇開源,或者閉源,如果選擇閉源則必須向ORACLE支付費用。
PostsgreSQL是類BSD許可,允許用戶以任何目的免費使用。
-
社區分支
MySQL分支較多 ,除了Oracle官方的版本,比較流行的還有Percona Server和MariaDB等。
PostgreSQL只有一個開源主分支,代碼托管在git.postgresql.org。另外,有一些公司發布了基於PostgreSQL增強的企業版產品,比如EnterpriseDB公司的EDB Postgres Advanced Server,富士通的Fujitsu Enterprise Postgres等。這些產品都是閉源的商業產品,不屬於開源軟件的范疇。
-
版本更新
MySQL的版本系列又分為開發版和General Availability (GA)版,只有GA版適合用於生產環境,目標是每18~24個月發布一個新發布系列的GA版本。
PostgreSQL主版本發布大約1年1次,維護周期為5年,小版本升級大約2個月1次
-
流行程度
MySQL顯然更加流行,有觀點認為,PostgreSQL之所遠不如MySQL流行,是一些因素共同作用的結果:
互聯網行業興起時期(2000年前后),MySQL作為一個輕量快速易用的開源數據庫正好適配的互聯網的需求,因而被大量使用。
互聯網巨頭的示范作用進一步促進了MySQL的普及。
早期的PostgreSQL在性能和易用性不如MySQL
比如:
PostgreSQL直到8.0(2005-01-19)才推出Windows版本。
PostgreSQL 8.3(2008-02-04)之前的版本在性能和可維護上尚不如人意(比如沒有HOT更新)。
PostgreSQL直到9.0(2010-09-20)才推出流復制功能。
-
架構與實現
多線程vs多進程
MySQL是多線程模型,PostgreSQL是多進程模型。
多線程相比多進程的優點:線程的創建刪除和切換成本低
多線程相比多進程的缺點:代碼更難理解,更容易出bug,也更難調試;多核CPU的利用效率不高,對NUMA架構支持不好。有測試表明在超過24個core的系統上,MySQL不能充分利用CPU的能力。
多引擎 vs FDW
MySQL的SQL層和存儲層分離,支持多種存儲引擎,例如InnoDB, MyISAM, NDB。PostgreSQL和絕大多數數據庫一樣是單存儲引擎。
MySQL多引擎的優點: 數據庫廠商只需開發存儲引擎部分就能得到一個全新用途的數據庫,比如NDB和TokuDB。用戶可以根據不同場景靈活選擇最合適的存儲引擎,而不用改應用接口。
binlog復制 vs 流復制
MySQL的復制傳輸的是SQL層的binlog記錄,binlog記錄的是數據的邏輯變更(SQL語句或基於行的數據變更),屬於邏輯復制;PostgreSQL的復制傳輸的是WAL記錄,WAL記錄的是數據塊的變更,屬於物理復制。
binlog復制的優點:支持不同版本MySQL間的復制、可以只復制部分數據、支持所有存儲引擎
binlog復制的缺點:Slave回放binlog時需要把SQL再執行一次消耗的資源比較多,並且Master端的SQL執行是多線程而Salve端的SQL回放通常是單線程,因此容易導致主從延遲,但可通過group replication 及galera cluster架構實現數據強一致性。
PostgreSQL流復制的優點:強數據一致、Slave恢復消耗資源少,速度快,不容易出現主從延遲(尤其是同步復制時)、通過Logical Decoding也可實現邏輯復制
PostgreSQL流復制的缺點:目前只是提供了邏輯復制的基礎設施,實際部署時需要進行定制,缺少現成的解決方案。
四: 技術支持
相較於PostgreSQL,Oracle為MySQL提供更為可靠的技術支持。運維方面,MySQL強大的現有市場和更多更活躍的社區使得招募MySQL
