概述
在幾個流行的數(shù)據(jù)庫中,我首先接觸到的是MySQL,隨著工作發(fā)展,接觸到越來越多的是PostgreSQL數(shù)據(jù)庫。這兩個十分流行的開源數(shù)據(jù)庫。在這之后,我就會經(jīng)常和一些朋友進行討論:MySQL和PostgreSQL兩者之間到底有什么異同點呢?
翻閱資料,今天就來學習一下
ACID的遵從性(ACID Compliance )對比
數(shù)據(jù)庫是否滿足事物的四大特性是判斷數(shù)據(jù)庫優(yōu)劣的重要標準之一
PostgreSQL:
完全遵從ACID,確保滿足所有ACID的需求
MySQL:
只有InnoDB等少量存儲引擎遵從ACID,所以客戶選取就更加靈活
原子性(Atomic)
Atomic是指事務包含的所有操作要么全部成功,要么全部失敗回滾
PostgreSQL是全面支持事務的關系型數(shù)據(jù)庫,不僅DML語句可以在一個事務中,DDL語句也支持事務,即可以把創(chuàng)建多張表時的DDL語句放到一個事務中,這樣可以保證這些表要不都創(chuàng)建成功,要不都不成功。
而MySQL無法把多條DDL語句放到一個事務中。PostgreSQL能保證多條DDL的原子性,這是PG的亮點。
一致性(Consistency)
Consistency是指事務必須使數(shù)據(jù)庫從一個一致性的狀態(tài)變到另外一個一致的狀態(tài),也就是執(zhí)行事務之前和之后的狀態(tài)都必須處于一致的狀態(tài)。一致性:例如數(shù)據(jù)庫完整性約束正確;日志狀態(tài)一致; 索引和數(shù)據(jù)的一致, 即事務完成后,數(shù)據(jù)庫的一切都是對的。
而兩者的約束對比如下
隔離性(Isolcation)
Isolcation是指并發(fā)執(zhí)行多個事務時,使它們各自好像是系統(tǒng)在給定時間內(nèi)執(zhí)行的唯一操作,即每一事務在系統(tǒng)中認為只有該事務在使用系統(tǒng),不受其它事務干擾。
達到的效果: 對于任意兩個并發(fā)的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經(jīng)結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在并發(fā)地執(zhí)行。
幾種隔離級別的性能比較
而PostgreSQL和MySQL的隔離性差異如下
MySQL和PostgreSQL都實現(xiàn)了基于快照的事務隔離級別,即snapshot isolation,PostgreSQL還實現(xiàn)了可串行化的快照隔離級別,即SSI。
持久性(Durability)
Durability是指一個事務一旦被提交了,那么對于數(shù)據(jù)庫中的數(shù)據(jù)改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遭遇到故障的情況下也不會丟失提交事務的操作。
早期的MySQL版本中的默認配置不是提交后立即持久化的,即提交后,數(shù)據(jù)可能丟失(追求性能),PostgreSQL一開始默認就是持久化的,當然也可以設置成非立即持久化。
對SQL標準的支持度對比
PostgreSQL:
遵從SQL標準支持最好的數(shù)據(jù)庫。SQL2011標準中,179個核心特性(mandatory features ),做到至少160個,也支持了很多附加特性
MySQL:
只有部分支持,基本是只持了SQL 92標準的部分
支持的業(yè)務場景對比
PostgreSQL:
既支持OLTP場景也支持OLAP場景,混合性業(yè)務場景,類似Oracle數(shù)據(jù)庫。能很好的支持JSON文檔型業(yè)務場景。金融級的可靠性,設計目標是以穩(wěn)定性和可靠性為第一目標,支持大數(shù)據(jù)庫,可以可靠支持幾十T的大數(shù)據(jù)庫
MySQL:
只支持OLTP場景,不可用于OLAP場景
mysql5.7以后才對JSON的有了支持
簡單和性能是設計第一目標,支持可靠性很高的業(yè)務存在一定的困難
大數(shù)據(jù)庫支持存在一定的困難,需要做單機多實例
復制功能對比
復制類型的支持
PostgreSQL支持以下類型:
- 單主到單備
- 單主到多備
- 物理備庫可以讀
- 雙向復雜
- 邏輯的流復制(發(fā)布和訂閱模式)
- 級聯(lián)的復制
- 全同步、半同步、異步
- 同步復制中支持最少同步到幾個備節(jié)點,即保證至少寫幾份數(shù)據(jù)
MySQL支持以下類型:
- 單主到單備
- 單主到多備
- 單主到單個備再到單個或多個備
- 循環(huán)復制:A->B->C->A
- 雙主復制
- 異步復制和半同步復制
主要功能對比
查詢相關功能對比
表的功能支持
架構功能對比
視圖表功能對比
加密使用功能對比
后記
總之,PostgreSQL和MySQL是從底層設計原理開始就不一樣的兩種數(shù)據(jù)庫,在數(shù)據(jù)量小的時候,數(shù)據(jù)庫更趨于輕量化,MySQL會更適合。但是一旦數(shù)據(jù)量稍漲,計算量上升,PostgreSQL會是更好的選擇。






