1、 PostgreSQL 的穩定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步,然而不少 MySQL 用戶都遇到過Server級的數據庫丟失的場景——mysql系統庫是MyISAM的,相比之下,PG數據庫這方面要好一些。
2、任何系統都有它的性能極限,在高併發讀寫,負載逼近極限下,PG的性能指標仍能夠維持雙曲線甚至對數曲線,到頂峯以後再也不降低,而 MySQL 明顯出現一個波峯後下滑(5.5版本以後,在企業級版本中有個插件能夠改善不少,不過須要付費)。
3、 PG 多年來在 GIS 領域處於優點地位,由於它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型,相比之下mysql就差不少,instagram就是由於PG的空間數據庫擴展POSTGIS遠遠強於MYSQL的my spatial而採用PGSQL的。
4、PG 的「無鎖定」特性很是突出,甚至包括 vacuum 這樣的整理數據空間的操做,這個和PGSQL的MVCC實現有關係。
5、PG 的可使用函數和條件索引,這使得PG數據庫的調優很是靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
6、 PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有很是豐富的統計函數和統計語法支持,好比分析函數(ORACLE的叫法,PG裏叫window函數),還能夠用多種語言來寫存 儲過程,對於R的支持也很好。這一點上MYSQL就差的很遠,不少分析功能都不支持,騰訊內部數據存儲主要是MYSQL,可是數據分析主要是 HADOOP+PGSQL。
7、PG 的有多種集羣架構能夠選擇,plproxy 能夠支持語句級的鏡像或分片,slony 能夠進行字段級的同步設置,standby 能夠構建WAL文件級或流式的讀寫分離集羣,同步頻率和集羣策略調整方便,操做很是簡單。
8、 通常關係型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能做爲外部大數據訪問。而 PG 的 TEXT 類型能夠直接訪問,SQL語法內置正則表達式,能夠索引,還能夠全文檢索,或使用xml xpath。用PG的話,文檔數據庫均可以省了。
九,對 於WEB應用來講,複製的特性很重要,mysql到如今也是異步複製,pgsql能夠作到同步,異步,半同步複製。還有mysql的同步是基於 binlog複製,相似oracle golden gate,是基於stream的複製,作到同步很困難,這種方式更加適合異地複製,pgsql的複製基於wal,能夠作到同步複製。同時,pgsql還提 供stream複製。
十,pgsql對於numa架構的支持比mysql強一些,比MYSQL對於讀的性能更好一些,pgsql提交能夠徹底異步,而mysql的內存表不夠實用(由於表鎖的緣由)
最後說一下我感受 PG 不如 MySQL 的地方。
第一,MySQL有一些實用的運維支持,如 slow-query.log ,這個pg確定能夠定製出來,可是若是能夠配置使用就更好了。
第二是mysql的innodb引擎,能夠充分優化利用系統全部內存,超大內存下PG對內存使用的不那麼充分,
第三點,MySQL的複製能夠用多級從庫,可是在9.2以前,PGSQL不能用從庫帶從庫。
第四點,從測試結果上看,mysql 5.5的性能提高很大,單機性能強於pgsql,5.6應該會強更多.
第五點,對於web應用來講,mysql 5.6 的內置MC API功能很好用,PGSQL差一些。
另一些:
pgsql和mysql都是背後有商業公司,並且都不是一個公司。大部分開發者,都是拿工資的。
說mysql的執行速度比pgsql快不少是不對的,速度接近,並且不少時候取決於你的配置。
對於存儲過程,函數,視圖之類的功能,如今兩個數據庫均可以支持了。
另外多線程架構和多進程架構之間沒有絕對的好壞,oracle在unix上是多進程架構,在windows上是多線程架構。
不少pg應用也是24/7的應用,好比skype. 最近幾個版本VACUUM基本不影響PGSQL 運行,8.0以後的PGSQL不須要cygwin就能夠在windows上運行。
至於說對於事務的支持,mysql和pgsql都沒有問題。php
原文地址:http://www.zhihu.com/question/20010554 mysql
PostgreSQL運行在CentOS時須要修改的操做系統配置web
初識PostgreSQL正則表達式
MySQL是最受歡迎的一個大規模數據庫服務器。它是一款功能豐富的開源產品,許多網站和在線應用程序都使用該數據庫。MySQL的入門相對比較簡單,開發者能夠從Internet上獲取到大量與該數據庫相關的信息。sql
注意:鑑於該產品的受歡迎程度,使用該數據庫可讓咱們受益於大量第三方應用程序、工具以及集成類庫。數據庫
儘管MySQL並無嘗試實現完整的SQL標準,可是它依然爲用戶提供了大量功能。做爲一個獨立的數據庫服務器,應用程序須要與MySQL守護進程通訊才能訪問數據庫——不一樣於SQLite。編程
MySQL 支持的數據類型包括TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、 DOUBLE PRECISION、REAL、DECIMAL、NUMERIC、DATE、DATETIME、TIMESTAMP、TIME、YEAR、CHAR、 VARCHAR、TINYBLOB, TINYTEXT、BLOB, TEXT、MEDIUMBLOB、MEDIUMTEXT、LONGBLOB, LONGTEXT、ENUM、SET。windows
易用centos
很容易安裝。第三方工具,包括可視化工具,讓用戶可以很容易入門。數組
功能豐富
MySQL支持關係型數據庫應該有的大部分功能——或者直接支持、或者間接支持。
安全
支持不少安全特性,有些很是高級,而且是內置於MySQL中。
可擴展也很是強大
MySQL可以處理大量數據,而且在須要的時候能夠規模化使用。
快速
放棄某些標準讓MySQL可以很是高效、簡捷地工做,於是速度更快。
已知限制
MySQL從一開始就沒有打算作全部事情,於是它在功能方面有必定的侷限性,並不能知足一些先進應用程序的要求。
可靠性問題
MySQL對某些功能(例如引用、事務、審計等)的實現方式使得它與其餘的關係型數據庫相比缺乏了一些可靠性。
開發停滯
儘管MySQL依然是一款開源產品,可是自從它被收購以後人們就對其開發進展有不少抱怨。須要注意的是有一些基於MySQL的、完整集成的數據庫在標準的MySQL之上附加了其餘價值,例如MariaDB。
分佈式操做
若是SQLite不能知足你的需求,那麼將MySQL引入到開發棧中,就像任何其餘獨立的數據庫服務器同樣,它可以給你帶來大量的操做自由度以及一些先進的功能。
高安全性
MySQL的安全機制經過一種簡單的方式爲數據的訪問和使用提供了可靠的保護。
網站和Web應用
儘管有一些約束,可是絕大部分網站和Web應用均可以簡單地運行在MySQL上。相關的靈活可擴展的工具很是易於使用和管理——事實證實這些工具在長期運行時很是有用。
定製解決方案
MySQL有豐富的配置項和運行模式,若是你須要一個高度量身定製的解決方案,那麼MySQL可以很是容易地尾隨並執行你的規則。
SQL聽從性
由於MySQL並無打算實現完整的SQL標準,因此它並不徹底符合SQL。若是你可能須要與這樣的關係型數據庫集成,那麼從MySQL切換過去可能並不容易。
併發性
儘管MySQL和一些其餘的存儲引擎可以很是好地執行讀操做,可是併發讀寫可能會有問題。
缺乏功能
MySQL缺乏某些功能,例如全文本搜索。
PostgreSQL是一款先進的、開源的對象關係型數據庫管理系統,它的主要目標是聽從標準和可擴展。PostgreSQL,或者說Postgres,試圖將ANSI/ISO SQL標準及其修正結合起來。
與其餘關係型數據庫相比,PostgreSQL獨特的地方是它支持高度須要的、完整的面向對象以及關係型數據庫的功能,例如徹底支持可靠性事務。
因爲其強大的底層技術,PostgreSQL可以很是高效地處理不少任務。得益於多版本併發控制(MVCC),它可以在沒有讀鎖的狀況下實現併發並保證ACID。
PostgreSQL是高度可編程的,所以擴展性很是好,它支持稱爲「存儲過程」的自定義程序。用戶能夠建立這種函數簡化重複的、複雜的以及常常須要的數據庫操做的執行。
儘管該數據庫很是強大,可是它卻沒有像MySQL那麼流行,即使如此依然有不少優秀的第三方工具和類庫可讓咱們更容易地使用它。
PostgreSQL 支持的數據類型包括:bigint、bigserial、bit [(n)]、bit varying [(n)]、boolean、box、bytea、character varying [(n)]、character [(n)]、cidr、circle、date、double precision、inet、integer、interval [fields] [(p)]、line、lseg、macaddr、money、numeric [(p,s)]、path、point、polygon、real、smallint、serial、text、time、timestamp、 tsquery、tsvector、txid_snapshot、uuid、xml
開源且聽從SQL標準
PostgreSQL是一款開源的、免費的、功能很是強大的關係型數據庫。
強大的社區
由一個忠實的、經驗豐富的社區支持,用戶能夠經過知識庫和Q&A網站得到全天候的免費服務。
強有力的第三方支持
除了很是先進的特性以外,PostgreSQL還有不少優秀的、開源的第三方工具能夠輔助系統的設計、管理和使用。
可擴展
能夠經過存儲過程擴展PostgreSQL的功能。
面向對象
PostgreSQL不只是一個關係型數據庫,它仍是一個面向對象的數據庫——支持嵌套等功能。
性能:
對於簡單繁重的讀取操做,使用PostgreSQL可能有點小題大作,同時性能也比MySQL這樣的同類產品要差。
流行程度
儘管有大量的部署,可是鑑於該數據庫的性質,它的受歡迎程序並不高。
託管
因爲上面提到的幾點,很難找到提供託管PostgreSQL實例的主機或者服務提供商。
數據完整性
當絕對須要可靠性和數據完整性的時候,PostgreSQL是更好的選擇。
複雜的定製程序
若是須要數據庫執行定製程序,那麼可擴展的PostgreSQL是更好的選擇。
集成:
若是未來可能須要將整個數據庫遷移到其餘合適的解決方案上(例如Oracle),那麼PostgreSQL可能兼容性最好也更容易切換。
複雜的設計
與其餘開源且免費的數據庫相比,對於複雜的數據庫設計PostgreSQL在功能方面最全面,潛力最大,不須要你放棄其餘有價值的資產。
速度
若是你只須要快速讀取操做,那麼PostgreSQL並不合適。
簡單
除非你須要絕對的數據完整性,ACID聽從性或者設計複雜,不然PostgreSQL對於簡單的場景而言有點多餘。
複製
對於缺乏數據庫和系統管理經驗的人而言使用MySQL實現複製要更簡單,除非你願意花費時間、精力和資源。