Linux數據庫大比拚(三)
2024-07-21 02:12:51
供稿:網友
評估大量因素
我們將要在中途改變方向。在這部分,我將涉及與性能無關的話題。在下一個并且是最后一部分,我將全面研究基準測試并以最終結論結束。
一般差別
不同于postgresql,mysql和msql不是真正的關系數據庫管理系統。我看到有人在新聞組里把mysql稱為“只是一個快速存儲工具”,并且msql甚至被稱為了一個玩具--不敢恭維。至少msql實現了部分一個完整的sql dbm應該提供的功能。
如果一個人需要一個真實的rdbms,三者中唯一可行的選擇是postgresql。如果計算原始的性能表現,特別是如果對數據庫所做的存取并不復雜并且大多數是自動的,一個更小的系統可能更好一些。因此,msql和mysql被宣傳為網數據庫系統。
許可證
postgresql以一個bsd風格許可證被分發,在所有相關的方面均是自由的(也許對一些狂熱者來說太自由了),如果版權聲明被保留,基本上一個人可以用該軟件做任何事情。
mysql是免費的并且在某些條件下源代碼允許被修改,但是禁止為了商業目的的再分發。
msql對非商業性組織的使用是免費的;但在一個14天評估時期以后,購買一個許可證是必要的。
因為這些差別,在使用他們之一的企業的人們需要仔細地考慮許可條件。
ansi 標準的實現
這3個系統都是在叫喊是完全實現 ansi sql 標準的,公平地講,這在我看來有點可怕。當mysql實現了開發者已經定義好的一個子集時,msql甚至沒有嘗試真正遵循ansi 標準。postgresql 最后定位在與 ansi 完全兼容,但是它仍然有一條長路要走。
postgresql確實還沒有支持參考完整性(ri),但是只測試了dbms的事務(transaction)。另外,新的sql特征像sqlstate變量也沒有實現。
mysql既不支持事務也不保證參考完整性;對事務存取數據庫表能明確地為鎖定和解鎖。
msql缺乏 ansi sql 的大多數特征,它僅僅實現了一個最最少的api,沒有事務和參考完整性。
apis
所有3個系統測試的api大部分對處理是透明的,發生任何問題通常是由于不正確的文檔,而不是api本身。
msql和mysql都沒有嵌入式sql(esql)預處理器功能。隨著esql的誕生,現在我相當喜歡它,但是使用msql 和 mysql 本身提供的c api并不困難。有同樣光標的含義,但以一個不同的方法實現,并且把字符串傳遞給c函數僅比在代碼中使用碼嵌入式 sql語句稍難一點兒。
除了提到的esql api,postgresql帶有c api、c++綁定、jdbc、odbc、perl綁定、python和tcl綁定。
mysql對win32平臺有附加的odbc支持;語言聯編 (接口)至少有c++、eiffel、java、perl、python、php和tcl可以得到。
msql與lite(一種類似c的腳本語言,與分發一起發行)緊密結合,可以得到一個稱為 w3-msql的一個網站集成包,它是jdbc、odbc、perl和php api。
注意我沒有測試那些任何附加的綁定和特征;他們的質量和文檔的表述不是很好。能獲得很多對這3個系統的第三方擴展;本文不再贅述。
文檔和更多
postgresql以docbook sgml格式記錄文檔。手冊分為管理員指南、程序員指南、用戶指南和一本教程。另外,faq和各種各樣的說明文件涉及一些話題。軟件的好多領域缺乏足夠的文檔。
mysql以gnu texinfo格式記錄文檔;手冊看起來完全。
msql有一個單個文件的手冊(沒有超文本),它有postscript和html形式。作為能從一個商業軟件產品的的角度所期望的,它覆蓋了所有的特征。
認證和一般的安全
這時我還沒談及的一個話題,但是需要在這個比較中提及的是存取認證。ansi sql 對于存取控制提供很復雜且很精致的機制, 也就是grant和revoke語句。
postgresql和mysql能理解這些標準語句,但內部處理存取控制是不同的。可以得到msql的網站集成包中的一個認證增強程序(w3-msql),但是在它基本形態中,大多數數據庫系統似乎沒有任何內置的存取控制支持。不像safe_mysqld和postmaster,msql數據庫守護程序假定有root運行的,它可以可能造成安全隱患。
任何大型數據庫都需要一個安全概念,就像它需要一個徹底的數據庫設計一樣。不可能說他們中支持認證系統(即 postgresql或mysql)的哪一個是更安全的;這里, 任何事情均取決于設計。
在本系列的第四部分,本文做作者集中精力研究dbms的性能測量和工具的全面總結。
網站運營seo文章大全提供全面的站長運營經驗及seo技術!