我們將要在中途改變方向。在這部分,我將涉及與性能無關的話題。在下一個並且是最後一部分,我將全面研究基准測試並以最終結論結束。
一般差別不同於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聯編(bindings)。
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的性能測量和工具的全面總結。