MySQL與PostgreSQL:該選擇哪一個開源數據庫?哪個更好?

在 InfoQ 上看到的一篇文章,算是墳貼了,可是講的仍是很是客觀的。沒有作實際的測試來講明誰誰的性能更好,誰誰佔用的資源更有優點。這些畢竟因環境而異,因此真的要衡量性能等數據指標的話,儘可能模擬本身的真實使用環境吧,別人說的話只能隨便聽一聽,可能和本身的結果千差萬別。好了,下面是正文:php


Naresh Kumar是一位軟件工程師與熱情的博主,對編程與新事物充滿了激情和興趣。近日,Naresh撰寫了一篇博文,對開源世界最多見的兩種數據庫MySQL與PostgreSQL的特色進行了詳盡的分析和比對。html

若是打算爲項目選擇一款免費、開源的數據庫,那麼你可能會在MySQL與PostgreSQL之間舉棋不定。MySQL與PostgreSQL都是免費、開源、強大、且功能豐富的數據庫。你主要的問題多是:哪個纔是最好的開源數據庫,MySQL仍是PostgreSQL呢?該選擇哪個開源數據庫呢?mysql

在選擇數據庫時,你所作的是個長期的決策,由於後面若是再改變決定將是很是困難且代價高昂的。你但願一開始就選擇正確。兩個流行的開源數據庫MySQL與PostgreSQL經常成爲最後要選擇的產品。對這兩個開源數據庫的高層次概覽將會有助於你選擇最適合本身須要的。sql

MySQL數據庫

MySQL相對來講比較年輕,首度出如今1994年。它聲稱本身是最流行的開源數據庫。MySQL就是LAMP(用於Web開發的軟件包,包括Linux、Apache及Perl/PHP/Python)中的M。構建在LAMP棧之上的大多數應用都會使用MySQL,包括那些知名的應用,如WordPress、Drupal、Zend及phpBB等。編程

一開始,MySQL的設計目標是成爲一個快速的Web服務器後端,使用快速的索引序列訪問方法(ISAM),不支持ACID。通過早期快速的發展以後,MySQL開始支持更多的存儲引擎,並經過InnoDB引擎實現了ACID。MySQL還支持其餘存儲引擎,提供了臨時表的功能(使用MEMORY存儲引擎),經過MyISAM引擎實現了高速讀的數據庫,此外還有其餘的核心存儲引擎與第三方引擎。後端

MySQL的文檔很是豐富,有不少質量不錯的免費參考手冊、圖書與在線文檔,還有來自於Oracle和第三方廠商的培訓與支持。安全

MySQL近幾年經歷了全部權的變動和一些頗具戲劇性的事件。它最初是由MySQL AB開發的,而後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另一些則是收費的。其核心代碼基於GPL許可,對於那些不想使用GPL許可的開發者與廠商來講還有商業許可可供使用。服務器

如今,基於最初的MySQL代碼還有更多的數據庫可供選擇,由於幾個核心的MySQL開發者已經發布了MySQL分支。最初的MySQL建立者之一Michael "Monty" Widenius貌似後悔將MySQL賣給了Sun公司,因而又開發了他本身的MySQL分支MariaDB,它是免費的,基於GPL許可。知名的MySQL開發者Brian Aker所建立的分支Drizzle對其進行了大量的改寫,特別針對多CPU、雲、網絡應用與高併發進行了優化。網絡

PostgreSQL

PostgreSQL標榜本身是世界上最早進的開源數據庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,並且沒有那麼昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加利福尼亞大學伯克利分校開發的,做爲Ingres數據庫的後繼。

PostgreSQL是徹底由社區驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不一樣的社區版、商業版與企業版。PostgreSQL基於自由的BSD/MIT許可,組織可使用、複製、修改和從新分發代碼,只須要提供一個版權聲明便可。

可靠性是PostgreSQL的最高優先級。它以堅如磐石的品質和良好的工程化而聞名,支持高事務、任務關鍵型應用。PostgreSQL的文檔很是精良,提供了大量免費的在線手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社區支持是很是棒的,還有來自於獨立廠商的商業支持。

數據一致性與完整性也是PostgreSQL的高優先級特性。PostgreSQL是徹底支持ACID特性的,它對於數據庫訪問提供了強大的安全性保證,充分利用了企業安全工具,如Kerberos與OpenSSL等。你能夠定義本身的檢查,根據本身的業務規則確保數據質量。在衆多的管理特性中,point-in-time recovery(PITR)是很是棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復建立熱備份以及快照與恢復的能力。但這並非PostgreSQL的所有,項目還提供了幾個方法來管理PostgreSQL以實現高可用、負載均衡與複製等,這樣你就可使用適合本身特定需求的功能了。

平臺

MySQL與PostgreSQL都出如今一些高流量的Web站點上:

  • MySQL:Slashdot、Twitter、Facebook與Wikipedia
  • PostgreSQL:Yahoo使用了一個修改的PostgreSQL數據庫來處理天天數以億計的事件,還有Reddit和Disqus

MySQL與PostgreSQL都能運行在多個操做系統上,如Linux、Unix、Mac OS X與Windows。他們都是開源、免費的,所以測試他們時的惟一代價就是你的時間與硬件。他們都很靈活且具備可伸縮性,可用在小型系統和大型分佈式系統上。MySQL在一個領域上要比PostgreSQL更進一步,那就是它的觸角延伸到了嵌入式領域,這是經過libmysqld實現的。PostgreSQL不支持嵌入式應用,依然堅守在傳統的客戶端/服務器架構上。

MySQL一般被認爲是針對網站與應用的快速數據庫後端,可以進行快速的讀取和大量的查詢操做,不過在複雜特性與數據完整性檢查方面不太盡如人意。PostgreSQL是針對事務型企業應用的嚴肅、功能完善的數據庫,支持強ACID特性和不少數據完整性檢查。他們兩者都在某些任務上具備很快的速度,MySQL不一樣存儲引擎的行爲有較大差異。MyISAM引擎是最快的,由於它只執行不多的數據完整性檢查,適合於後端讀操做較多的站點,不過對於包含敏感數據的讀/寫數據庫來講就是個災難了,由於MyISAM表最終可能會損壞。MySQL提供了修復MySQL表的工具,不過對於敏感數據來講,支持ACID特性的InnoDB則是個更好的選擇。

與之相反,PostgreSQL則是個只有單一存儲引擎的徹底集成的數據庫。你能夠經過調整postgresql.conf文件的參數來改進性能,也能夠調整查詢與事務。PostgreSQL文檔對於性能調優提供了很是詳盡的介紹。

MySQL與PostgreSQL都是高可配置的,而且能夠針對不一樣的任務進行相應的優化。他們都支持經過擴展來添加額外的功能。

一個常見的誤解就是MySQL要比PostgreSQL更容易學習。關係數據庫系統都是很是複雜的,這兩個數據庫的學習曲線實際上是差很少的。

標準兼容性

PostgreSQL旨在實現SQL兼容性(當前標準是ANSI-SQL:2008)。MySQL則兼容大部分SQL,不過還有本身的擴展,能夠支持NoSQL特性,這在參考手冊中都有介紹。每種方式都有優缺點。兼容標準會讓數據庫管理員、數據庫開發者與應用開發者更舒服一些,由於這意味着他們只需學習一套標準、一套特性和命令便可。這會節省時間,提高效率,也不會被鎖定在特定的廠商上。

支持使用非標準的自定義功能的人們認爲這樣能夠快速採用新的特性,而沒必要等待標準進程完成。ANSI/ISO標準在不斷演化,所以標準兼容性也是個變化的目標:知名的關係型數據庫Microsoft SQL Server、Oracle與IBM DB2也只是部分兼容於標準。

結論

雖然有不一樣的歷史、引擎與工具,不過並無明確的參考可以代表這兩個數據庫哪個可以適用於全部狀況。不少組織喜歡使用PostgreSQL,由於它的可靠性好,在保護數據方面很擅長,並且是個社區項目,不會陷入廠商的牢籠之中。MySQL更加靈活,提供了更多選項來針對不一樣的任務進行裁剪。不少時候,對於一個組織來講,對某個軟件使用的熟練程度要比特性上的緣由更重要。

相關文章
相關標籤/搜索