區別:1、MySQL傾向於使用者的角度;pg資料庫傾向於理論角度。 2.MySQL一般會將資料合法性驗證交給客戶;pg資料庫在合法性困難方面做得比較嚴格。 3.在SQL的標準實作上,pg資料庫要比MySQL完善,而且功能實作比較嚴謹。
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也只是部分相容於標準。
MySQL與PostgreSQL(pg資料庫)的差異
MySQL是應用程式開發者建立出來的DBMS;而PostgreSQL是由資料庫開發者建立出來的DBMS 。
換句話說,MySQL傾向於使用者的角度,回答的問題是「你想解決的是什麼問題」;而PostgreSQL傾向於理論角度,回答的問題是「資料庫應該如何來解決問題” 。
MySQL一般會將資料合法性驗證交給客戶;PostgreSQL在合法性困難方面做得比較嚴格。例如MySQL裡插入 “2012-02-30” 這個時間時,會成功,但結果會是 “0000-00-00”;PostgreSQL不允許插入此值。
通常,PostgreSQL 被認為是特性豐富,而MySQL被認為更快。但這個觀點基本上是在 MySQL 4.x / PostgreSQL 7.x 的事情,現在情況已經改變了,PostgreSQL 在9.x版本速度上有了很大的改進,而MySQL特性也在增加。
在架構上,MySQL分為兩層:上層的SQL層和幾個儲存引擎(例如InnoDB,MyISAM)。 PostgreSQL 只有一個儲存引擎提供這兩個功能。
這兩個資料庫系統都可以針對應用的情境被優化、定制,精確的說哪個性能更好很難。 MySQL專案一開始焦點就在速度上,而PostgreSQL一開始焦點在特性和規範標準上。
PostgreSQL相對於MySQL的優點
1、在SQL的標準實作上要比MySQL完善,而且功能實作比較嚴謹;
2 、儲存過程的功能支援要比MySQL好,具備本地快取執行計畫的能力;
3、對錶連線支援較完整,優化器的功能較完整,支援的索引類型很多,複雜查詢能力較強;
4、PG主表採用堆疊表存放,MySQL採用索引組織表,能夠支援比MySQL更大的資料量。
5、PG的主備複製屬於實體複製,相對於MySQL基於binlog的邏輯複製,資料的一致性更可靠,複製效能更高,對主機效能的影響也更小。
6、MySQL的儲存引擎外掛機制,有鎖定機制複雜影響並發的問題,而PG不存在。
MySQL相對於PG的優勢:
1、innodb的基於回滾段實現的MVCC機制,相對PG新舊資料一起存放的基於XID的MVCC機制,是佔優的。新舊資料一起存放,需要定時觸 發VACUUM,會帶來多餘的IO和資料庫物件加鎖開銷,造成資料庫整體的同時能力下降。而且VACUUM清理不及時,也可能引發資料膨脹;
2、MySQL採用索引組織表,這種儲存方式非常適合基於主鍵匹配的查詢、刪改操作,但對錶結構設計有約束;
3、MySQL的優化器較簡單,系統表、運算子、資料類型的實作都很精簡,非常適合簡單的查詢操作;
4、MySQL分區表的實作要優於PG的基於繼承表的分區實現,主要體現在分區個數達到上千上萬後的處理性能差異較大。
5、MySQL的儲存引擎插件化機制,使得它的應用場景更加廣泛,例如除了innodb適合事務處理場景外,myisam適合靜態資料的查詢場景。
相關推薦:《mysql教學》
###以上是pg資料庫和mysql的差別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!