全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1441
推到 Plurk!
推到 Facebook!

客觀公正地評價MySQL和PostgreSQL的優劣

 
AB
高階會員


發表:166
回覆:262
積分:125
註冊:2003-08-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-28 00:02:25 IP:61.64.xxx.xxx 未訂閱
客觀公正地評價MySQL和PostgreSQL的優劣 http://www.neweasier.com/article/2002-08-12/1029138321.html 2002年08月12日 15:45:21 LinuxAid 一、前言 前一段時間,我曾經翻譯過一篇將你的網站從MySQL改爲PostgreSQL,其實當初我更感興趣的是一個應用程式的後臺資料庫從MySQL轉爲PostgreSQL的具體操作,並沒有關心MySQL和PostgreSQL的優劣,沒想到反應出乎意料的大,因此我也就覺得有寫這篇文章的必要了。 在這篇文章中,我們選用MySQL 4.0.2-alpha與PostgreSQL 7.2進行比較,因爲MySQL 4.0.2-alpha開始支援事務的概念,因此這樣的比較對於MySQL應該較爲有利。 我們這樣的比較不想僅僅成爲一份性能測試報告,因爲至少從我個人來看,對於一個資料庫,穩定性和速度並不能代表一切。對於一個成熟的資料庫,穩定性肯定會日益提供。而隨著硬體性能的飛速提高,速度也不再是什麽太大的問題。 二、兩者的共同優勢 這兩個産品都屬於開放源碼的一員,性能和功能都在高速地提高和增強。MySQL AB的人們和PostgreSQL的開發者們都在盡可能地把各自的資料庫改得越來越好,所以對於任何商業資料庫使用其中的任何一個都不能算是錯誤的選擇。 三、兩者不同的背景 MySQL的背後是一個成熟的商業公司,而PostgreSQL的背後是一個龐大的志願開發組。這使得MySQL的開發過程更爲慎重,而PostgreSQL的反應更爲迅速。 這樣的兩種背景直接導致了各自固有的優點和缺點。 四、MySQL的主要優點 1、首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣稱速度是他們追求的主要目標之一,基於這個原因,MySQL在以前的文檔中也曾經說過並不準備支援事務和觸發器。但是在最新的文檔中,我們看到MySQL 4.0.2-alpha已經開始支援事務,而且在MySQL的TODO中,對觸發器、約束這樣的注定會降低速度的功能也列入了日程。但是,我們仍然有理由相信,MySQL將有可能一直保持速度的優勢。 2、MySQL比PostgreSQL更流行,流行對於一個商業軟體來說,也是一個很重要的指標,流行意味著更多的用戶,意味著經受了更多的考驗,意味著更好的商業支援、意味著更多、更完善的文檔資料。 3、與PostgreSQL相比,MySQL更適宜在Windows環境下運行。MySQL作爲一個本地的Windows應用程式運行(在NT/Win2000/WinXP下,是一個服務),而PostgreSQL是運行在Cygwin類比環境下。PostgreSQL在Windows下運行沒有MySQL穩定,應該是可以想象的。 4、MySQL使用了線程,而PostgreSQL使用的是進程。在不同線程之間的環境轉換和訪問公用的存儲區域顯然要比在不同的進程之間要快得多。 5、MySQL可以適應24/7運行。在絕大多數情況下,你不需要爲MySQL運行任何清除程式。PostgreSQL目前仍不完全適應24/7運行,這是因爲你必須每隔一段時間運行一次VACUUM。 6、MySQL在許可權系統上比PostgreSQL某些方面更爲完善。PostgreSQL只支援對於每一個用戶在一個資料庫上或一個資料表上的INSERT、SELECT和UPDATE/DELETE的授權,而MySQL允許你定義一整套的不同的資料級、表級和列級的許可權。對於列級的許可權,PostgreSQL可以通過建立視圖,並確定視圖的許可權來彌補。MySQL還允許你指定基於主機的許可權,這對於目前的PostgreSQL是無法實現的,但是在很多時候,這是有用的。 7、由於MySQL 4.0.2-alpha開始支援事務的概念,因此事務對於MySQL不再僅僅成爲劣勢。相反,因爲MySQL保留無事務的表類型。這就爲用戶提供了更多的選擇。 8、MySQL的MERGE表提供了一個獨特管理多個表的方法。 9、MySQL的myisampack可以對唯讀表進行壓縮,此後仍然可以直接訪問該表中的行。 五、PostgreSQL的主要優點: 1、對事務的支援與MySQL相比,經歷了更爲徹底的測試。對於一個嚴肅的商業應用來說,事務的支援是不可或缺的。 2、MySQL對於無事務的MyISAM表。採用表鎖定,一個長時間運行的查詢很可能會長時間地阻礙對表的更新。而PostgreSQL不存在這樣的問題。 3、PostgreSQL支援存儲過程,而目前MySQL不支援,對於一個嚴肅的商業應用來說,作爲資料庫本身,有衆多的商業邏輯的存在,此時使用存儲過程可以在較少地增加資料庫伺服器的負擔的前提下,對這樣的商業邏輯進行封裝,並可以利用資料庫伺服器本身的內在機制對存儲過程的執行進行優化。此外存儲過程的存在也避免了在網路上大量的原始的SQL語句的傳輸,這樣的優勢是顯而易見的。 4、對視圖的支援,視圖的存在同樣可以最大限度地利用資料庫伺服器內在的優化機制。而且對於視圖許可權的合理使用,事實上可以提供行級別的許可權,這是MySQL的許可權系統所無法實現的。 5、對觸發器的支援,觸發器的存在不可避免的會影響資料庫運行的效率,但是與此同時,觸發器的存在也有利於對商業邏輯的封裝,可以減少應用程式中對同一商業邏輯的重復控制。合理地使用觸發器也有利於保證資料的完整性。 6、對約束的支援。約束的作用更多地表現在對資料完整性的保證上,合理地使用約束,也可以減少編程的工作量。 7、對子查詢的支援。雖然在很多情況下在SQL語句中使用子查詢效率低下,而且絕大多數情況下可以使用帶條件的多表連接來替代子查詢,但是子查詢的存在在很多時候仍然不可避免。而且使用子查詢的SQL語句與使用帶條件的多表連接相比具有更高的程式可讀性。 8、支援R-trees這樣可擴展的索引類型,可以更方便地處理一些特殊資料。 9、PostgreSQL可以更方便地使用UDF(用戶定義函數)進行擴展。 六、那麽我究竟應該使用MySQL還是PostgreSQL 這個問題很難說得清,而且事實上除了MySQL和PostgreSQL外,使用Oracle、Sybase、Informix等也是明智的選擇。如何你確定只在MySQL和PostgreSQL中進行選擇,以下規則總是有效的。 1、如果你的作業系統是Windows,你應該使用MySQL。 2、如果你對資料庫並不了十分瞭解,甚至不知道事務、存儲過程等究竟是什麽,你應該使用MySQL。 3、如果你的應用對資料的完整性和嚴肅性要求不高,但是追求處理的高速度。例如是一個論壇和社區,你應該使用MySQL。 4、你的應用是一個嚴肅的商業應用,對資料完整性要求很高。而且你希望對一些商業資料邏輯進行很好的封裝,例如是一個網上銀行,你應該使用PostgreSQL。 5、你的應用處理的是地理資料,由於R-TREES的存在,你應該使用PostgreSQL。 6、你是一個資料庫內核的狂熱愛好者,你甚至希望擁有你自己版本的資料庫,毫無疑問,你必須使用PostgreSQL,沒准下一個PostgreSQL版本中某一個模組的作者就是你。 七、結語 以上只是希望從我的理解客觀公正地評價MySQL和PostgreSQL的優劣。其中的帶有傾向性的意見只代表個人觀點,由於本人水平的限制,有不當之處還請批評指正
系統時間:2024-05-07 20:17:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!