MySQL以速度為目標(zt)
來源:互聯網
上載者:User
mysql|速度 MySQL以速度為目標
--------------------------------------------------------------------------------
MySQL和PostgreSQL都是非常著名的資料庫開放源碼項目,而且都有取代商用資料庫系統的趨勢,但兩者有著不同的設計目標。一般而言,如果需要更快的速度,可以優先考慮MySQL,而如果需要一些新的特色,那可以選擇PostgreSQL。
目前MySQL由MySQL AB公司維護,其最新穩定版本為3.23,支援交易處理的3.23Max版也進入了Beta測試階段,而它的最新開發版本4.0已經進入了Alpha測試階段。它略顯不尋常的許可費用,很容易讓使用者對它印象深刻。它的價格隨平台和安裝方式的不同而改變,其Windows版本在任何情況下都不免費,而對任何Unix/Linux版本,如果使用者或系統管理員自己安裝是免費的,第三方安裝則必須支付許可費用。
MySQL是基於C/S體繫結構的網路資料庫管理系統。它的設計以速度為主要目標,可以快速處理多個使用者的查詢請求,在處理用戶端串連時的速度也非常快,很適合用做Web網站的後台資料庫。相對而言,PostgreSQL的執行速度比較慢,它對每個串連都產生一個子進程,而產生子進程、建立後台服務進程的步驟減慢了它的執行速度。MySQL的伺服器功能很緊湊,各種複雜的功能處理(比如XML支援)完全被放到用戶端進行,這使得增加功能時不會犧牲資料庫伺服器的速度和可靠性。而且它已被商業記憶體檢測程式證明不存在記憶體泄露,連續中斷和程式崩潰的現象也很罕見,在穩定性上比PostgreSQL要強一些。
在最初的設計階段,MySQL主要面向中等規模的資料庫,也就是說,資料庫的規模大約有幾千萬行,每個表大約100MB。隨著MySQL項目的發展,它的使用領域也逐漸擴充到TB規模的大型資料庫和小型的手持或嵌入式裝置領域。但是在短期內,MySQL不會支援即時資料庫或大規模叢集資料庫。雖然在其3.23版本中,它通過MyISAM表,可以使系統在理論上能夠支援8000PB的表。但由於作業系統的限制,在大部分Linux系統下,它僅能處理最大為2GB或4GB的表。在3.23版本中,還加入了支援大型伺服器叢集的複製、InnoDB的事務表處理器、Berkerley DB事務表處理器介面、全文本搜尋、MyODBC 2.5介面、MyISAM表的自動檢查和修複、批量插入等新模組。
InnoDB和BDB事務表處理器的引入使MySQL中使用這些方式儲存的資料表具有很好的交易處理能力。不過對於其他方式儲存的表,使用原子操作維護完整性和一致性通常會損失一些效能。在完整性非常重要時,可以使用LOCK TABLES進行表鎖定。從3.23.44開始,InnoDB表支援外碼限制檢查,不過它的使用,特別是誤用外碼可能會導致較嚴重的問題。
MySQL不支援巢狀查詢功能,給開發人員帶來很大不便。它只支援SQL92的一個子集,而不像PostgreSQL那樣支援SQL92的一個通用子集。所以對於邏輯比較複雜的查詢,往往要建立暫存資料表來儲存中間資訊,有時候這種方式會使一些查詢語句的表述很不直觀或者根本無法表示。
不過在MySQL 4.0系統中,又增加了一些新特性,比如支援fail-safe方式複製和聯機備份的工作方式,以適應關鍵任務和大負載啟動並執行使用者。它還對大段文本採用新的全文索引,使使用者可以用自然語言描述進行檢索操作。此外,在4.0之前的版本中只能通過明文進行伺服器和用戶端之間的串連,若要提供較強的安全性必須在伺服器和用戶端之間架設防火牆;而4.0版本在客戶機和伺服器之間支援安全通訊方式,其mysqld伺服器守護進程可以使用安全通訊端(SSL)和客戶機進行通訊。另外它通過對MyISAM在表級加入符號串連,使得在Windows系統下也能支援符號串連處理。
(電腦世界報 第11期B24)