PostgreSQL 與 MySQL功能對比

2021-09-19 20:30:10 字數 2465 閱讀 9744

@[toc]

在幾個流行的資料庫中,我首先接觸到的是mysql,隨著工作發展,接觸到越來越多的是postgresql資料庫。這兩個十分流行的開源資料庫。在這之後,我就會經常和一些朋友進行討論:mysql和postgresql兩者之間到底有什麼異同點呢?

今天我就來說一說

postgresql:

完全遵從acid,確保滿足所有acid的需求

mysql:

只有innodb等少量儲存引擎遵從acid

atomic是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾

postgresql是全面支援事務的關係型資料庫,不僅dml語句可以在乙個事務中,ddl語句也支援事務,即可以把建立多張表時的ddl語句放到乙個事務中,這樣可以保證這些表要不都建立成功,要不都不成功。

而mysql無法把多條ddl語句放到乙個事務中。postgresql能保證多條ddl的原子性,這是pg的亮點。

consistency是指事務必須使資料庫從乙個一致性的狀態變到另外乙個一致的狀態,也就是執行事務之前和之後的狀態都必須處於一致的狀態。一致性:例如資料庫完整性約束正確;日誌狀態一致; 索引和資料的一致, 即事務完成後,資料庫的一切都是對的。

而兩者的約束對比如下

isolcation是指併發執行多個事務時,使它們各自好像是系統在給定時間內執行的唯一操作,即每一事務在系統中認為只有該事務在使用系統,不受其它事務干擾。

達到的效果: 對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

幾種隔離級別的效能比較

而postgresql和mysql的隔離性差異如下

mysql和postgresql都實現了基於快照的事務隔離級別,即snapshot isolation,postgresql還實現了可序列化的快照隔離級別,即ssi。

durability是指乙個事務一旦被提交了,那麼對於資料庫中的資料改變就是永久性的,即便是在資料庫系統遭遇到故障的情況下也不會丟失提交事務的操作。

早期的mysql版本中的預設配置不是提交後立即持久化的,即提交後,資料可能丟失(追求效能),postgresql一開始預設就是持久化的,當然也可以設定成非立即持久化。

遵從sql標準支援最好的資料庫。sql2011標準中,179個核心特性(mandatory features ),做到至少160個,也支援了很多附加特性

mysql:

只有部分支援,基本是只持了sql 92標準的部分

postgresql:

既支援oltp場景也支援olap場景,混合性業務場景,類似oracle資料庫。能很好的支援json文件型業務場景。金融級的可靠性,設計目標是以穩定性和可靠性為第一目標,支援大資料庫,可以可靠支援幾十t的大資料庫

mysql:

只支援oltp場景,不可用於olap場景

oltp和olap的中間場景也不適合,如erp、crm等系統

對json文件型支援不是太好

簡單和效能是設計第一目標,支援可靠性很高的業務存在一定的困難

大資料庫支援存在一定的困難,需要做單機多例項

複製型別的支援

postgresql支援以下型別:

mysql支援以下型別:

總之,postgresql和mysql是從底層設計原理開始就不一樣的兩種資料庫,在資料量小的時候,資料庫更趨於輕量化,mysql會更適合。但是一旦資料量稍漲,計算量上公升,postgresql會是更好的選擇。

部分內容摘自唐成培訓介紹ppt

node mysql部落格 node與mysql

首先我們需要先在pagejson.js的依賴中加入 mysql latest 如圖 然後npm install 這樣mysql就安裝好了。這裡為了後續專案運算元據庫方便,就建立了乙個連線資料庫的公用模板。我們可以新建乙個資料夾,我這裡是db資料夾,如下 db資料夾下有兩個js,具體 如下 congf...

Postgresql 安裝與配置

2.安裝postgres sql l tar xvzf postgresql 8.4.0.tar.gz l configure prefix pgsql l make l make install l su postgres l source.bash profile l initdb e unic...

postgresql與typeorm使用經驗分享

在建立postgresql的表時,定義陣列等字段時,根據陣列中的元素的型別可以在相應型別後新增乙個就可以了。但是在定義陣列物件或者json時,則需要json或者jsonb eg bin bash psql u d eosql create table page page id varchar 36 ...