思考--PostgreSQL在與mysql的比較中稍微弱勢項

PostgreSQL在與mysql的比較中稍微弱勢項:mysql

 

1.都是堆表,沒有所謂的彙集索引表,其實問題不大,彙集索引表也只是在使用匯集索引那些列有加速,並且pg也有彙集索引,只不過要按期重建。sql

 

2.mvcc實現,pg是直接在原來page中標記刪除、更新行。而mysql的innedb則是像oracle同樣,弄了一個垃圾回收區存放這些併發的版本。數據庫

 

  1)pg這樣作的好處是更新、刪除很快,數據恢復也很快。壞處是進行垃圾清理時會掃描page,增長IO消耗,並且在進行垃圾回收時的設置策略須要DBA去設計,較複雜,剛剛使用的人不瞭解,可能致使autovaccum設置了也不會生效,進而致使垃圾數據的積壓。併發

  2)一樣是mvcc這種方式,對於高頻更新的大表來講,能夠在建表的時候設置fillfactor,進而使表的更新發生hot update,在更新時索引不會改變,只是索引指向的ctid重定向到了新行的ctid。這一樣是考驗DBA的設計能力,初學者在不知道的狀況下會以爲更新不但要更新表的tuple,還要更新index的tuple。mvc

 

那麼在mysql中怎麼作呢?更新時將舊的行拷貝到垃圾回收區,而後將老行的數據替換爲新行數據,索引不用修過。那麼數據拷貝的過程也是比較耗時的。oracle

 

3.正是基於這種mvcc的實現,不少人認爲pg不適合作在線事物數據庫,這是不合理的。學習

 

  1)這種實現方式在大表的高頻更新時可能會比mysql慢一點,但不存在太大差距。設計

  2)在數據的分析處理上,pg的jion實現則要優於mysql,這也是你們公認pg在替代oracle中優點的地方。索引

 

總結:io

  在線事物上,pg佔稍微劣勢,但不存在太大差別,90%的應用都感知不到這種差別。

  在線分析上,pg佔優點,稍微複雜的應用都能感覺到。

  

  做爲一個混合型數據庫需求時,pg完勝mysql。

 

且pg12將添加新的存儲引擎,借鑑innerdb實現方式,這樣在OLTP業務上將再也不有劣勢……,一樣,mysql也能夠學習pg在企業級應用上的嚴謹和多表分析上的技術來改進。將來兩種數據庫將不分高下,都能覆蓋大多數應用場景。

相關文章
相關標籤/搜索