查看完整版本: MySQL

danny 2006-11-19 18:44

MySQL

「變動」這兩個字在 IT 業界來說是再普通不過的事了。如果今天管理階層的主管們跟你要資料庫的推薦名單,很可能在你開始執行所推薦的方案之前,你的推薦名單上的項目就已經過時了。 如此一來,你可能要重新考慮各種軟硬體方案,好讓你:

用來幫你將事情完成
買來以便幫助別人完成他們的工作
開發以便幫助別人完成他們的工作
不論你的資訊有多新,在你的建議透過層層關卡,並且拿到購買支票以前,你的推薦表上的某些項目通常都會過時。幸運的是,沒有人會責怪你,或者是對你反唇相譏 -- 這是這一行裡很自然的事情。資料庫技術通常在你能夠整合它之前,就變掉了。

為了因應日新月異的資料庫技術,有相對多的軟體工程師也逐漸的從桌面資料庫軟體,諸如 Microsoft Access 以及 SQL Server,改為採用 MySQL。雖然嚴格說來,MySQL 並非 SQL Server 的對手,許多服務提供商也都支援 MySQL,並視之為便宜而有效率的代替品。



Susan Sales Harkins 經常在 CNET Builder.com 發表文章,是位專精於微軟 Office 的顧問。她也是Using Microsoft Access 97和Using Microsoft Access 2000的作者,這兩本書由 Que 所出版。

Martin W. P. Reid 也經常在 CNET Builder.com 發表文章,是英國貝爾法斯特女王大學(Queen's University) 的分析師暨程式設計員。他也教導關連性資料庫設計的課程;工作之餘也為北愛爾蘭的一些小型企業充當資料庫的顧問。




考慮使用 MySQL 的原因
如果你要找的是可靠的資料庫軟體,以便支援你網站開發的工作,那麼以下的原因說明了為什麼你應該考慮 MySQL:

它便宜(通常是免費)。
它的網路承載比較少。
它經過高度最佳化(Highly Optimized)。
應用程式透過它做起備份來比較簡單。
它為各種不同的資料格式提供提供彈性的介面。
它較好學,且操作簡單。
它標榜的是,你負擔得起的客戶支援。

$$$
簡單的說,你不會找到比 MySQL 更便宜的了。事實上,對大多數用戶來說,MySQL 是免費的。有時候是要付出一小筆 授權費, 但是這個付費規定只限於以下兩種情況:

以內嵌(embedded)的方式使用 MySQL 伺服器
只使用 MySQL 的商業用途軟體
例如,Windows 版本的 MySQL 伺服器,需有授權執照。然而,只要付比美金 $200 元多一點點的費用,MySQL 還是比其他任何資料庫軟體來得容易負擔多了。Office XP Developer 的零售價是美金 $799 元,升級版則是美金 $549 元。Access 2002 的價格是美金 $339 元,升級版則是美金 $109 元。


避免網路壅塞
針對多個使用者共同存取的支援,Access 根本不是 MySQL 的對手。Access 在大約十五個使用者連上來的時候,就輸掉了。我們還聽過當只有五個人連上來時, 會有一些問題。這並不是說,只有五個人能夠同時連上由 Access 支援的網站。同時連結(Simultaneous connection)事實上是指多工處理(concurrent process)。因此,事實上 Access 可以處理的連結數目是無限制的,只要那些連結保持在多工處理的範圍限制內。對於唯讀網站(這些網站並非你想像中的少數)它可以支援最多到 255 個使用者。而較大的網站,則無可避免的必須升級到 SQL Server 以提高穩定度和效率。

相對說來,MySQL 內定最大連結數為 100 個使用者。但是,我們絕對不可以用一個程式的內建設定來判斷它的效能。到目前為止,我們還沒聽過依賴 MySQL 的較大且使用頻繁的網站上的使用者有任何抱怨。除此之外,縱使有網路上有大量資料往來,似乎並不會對查詢最佳化(query optimization)有多大的影響。

在 Windows 98 作業系統上使用相同的硬體跟檔案大小,MySQL 表現得比 Access 2000 還要快 -- 只是並非所有的情況下都是如此。 這兩者在資料更新方面的效能,有著最大的差異。同樣的資料更新,Access 要花上兩倍的時間。如果是在高速系統上做小量資料的處理,你不會去注意到這兩者間的差異。 只有在處理的是幾十萬筆資料的時候,這效能上的差異才會比較明顯。MySQL 只在處理資料庫物件(object structure)的時候,才會輸給 Access。 當建立表格(table) 以及索引的時候,MySqL 會將表格鎖住,如此一來會將導致正在進行的大量資料處理速度慢下來。然而以上所提的第二個問題在網站開發時,一般並不會造成困擾。 因為網站上面,我們所重視的是用戶來訪時,查詢的速度,而非資料儲存架構本身。因此,在這個領域,MySQL 算是勝出


其它的優點

最佳化
對於 MySQL 的最佳化,我們可以說,主要的課題在於你的硬體設定,而非 MySQL 本身。不過對於 Access,(以及其他桌面軟體)事情就不是這樣了。 沒錯,Microsoft Jet Database 的確是有效率,不過它還不是最快的。如果你的資料庫設計得非常差,你的網站還是會受到影響而速度變得比較慢。 資料庫結構設計也會影響到 MySQL。例如,MySQL 並不支援外來鍵(foreign key)。這個缺點會影響到你的資料庫設計以及網站的效率。對於使用 MySQL 做資料庫支援的網站,你應該著重的是,如何讓硬碟存取減少到最低,如何讓一個或多個 CPU 隨時保持在高速作業的狀態,以及支援適當的網路頻寬, 而非實際上的資料庫設計以及資料查詢狀況。事實上,有些網站開發者將 MySQL 稱為目前市面上跑得最快的資料庫。不過,當你的資料庫有很多表格需要同時在一個交易(transaction)內完成更新時,MySQL 的確跑得不怎麼樣。


備份
如果你曾經有過搶救一個毀損的 MDB 檔案的慘痛經驗,那麼你會對 MySQL 表示激賞。這是 MySQL 另一個贏過 Access 的地方。首先,mysqldump 會產生一個比 Access 好很多而且也較可靠的備份檔案。相較之下,在 Access,你只是將一個 MDB 檔拷貝起來。其次,縱使 MySQL 的備份檔有部分毀損,復原起來要比一個毀損的 MDB 檔要來得容易得多了。


可延伸性(Scalability)以及資料處理能力
套句登山者的話來說,將 Access 資料庫來跟 MySQL 相比,簡直就是像把印第安那的小山丘拿來跟科羅拉多洛磯山脈的 Pike's Peak 相比較。事實就是這麼簡單:MySQL 可以處理的檔案比 Access 所能處理的大很多。如果你硬將 Access 操到 100MB 的 MDB 檔案,你要準備好紀錄一長串的來自客戶對於網站效率的抱怨。類似的資料庫在 MySQL 上面跑,並沒有承載過重的跡象。

另外,MySQL 同時提供高度多樣性,能夠提供給很多不同的使用者介面,包括命令列客戶端操作,網頁瀏覽器,以及各式各樣的程式語言介面,例如 C+,Perl,Java,PHP,以及 Python。你可以使用事先包裝好的客戶端,或者乾脆自己寫一個合適的應用程式。MySQL 可用於 Unix,Windows,以及 OS/2 等平台,因此它可以用在個人電腦或者是伺服器上。

沒錯,Microsoft ActiveX Data Objects Library(ADO)的確使得 Access 在外部資料市場(foreign data market)上能做更具彈性的運用。它能夠讓你不用管資料的所在位置而取出資料,然後在共用的介面上(即網頁瀏覽器)將資料顯示出來。不過,壞處是, ADO 畢竟是比較笨重(它本身是個資源大雜燴)而且學習它要花不少的金錢跟時間,就算你是一個能力不錯的開發工程師或者軟體工程師,也一樣。沒有人能在一天內將 ADO 學起來。


學習曲線
如果你已經熟悉資料庫技術,那麼基本上你已經沒什麼問題了。精通資料庫的人在一天之內就可以把 MySQL 學會,把這個經驗加到他的履歷表裡面去。相較之下,Access 是個複雜多的資料庫以及開發工具。即使是一個能力不錯的開發工程師,也還需要一段時間才能具備足夠的專業知識,恰當的使用這個軟體。

正如你所預期的,MySQL 支援結構化查詢語言(Structured Query Language ,SQL)。如果你已經知道某種版本的 SQL 語言,事情會好很多。具有 VB 或者是 VBA 知識背景的開發工程師會發現,他們以前所具備的 ASP 背景,能夠幫助縮短學習曲線。


客戶支援
雖然好用而且免費的客戶支援已不覆存在,然而,MySQL 倒是提供了一些 電子報群組名單供您參考。有一些是頗具技術性的,而且會員們往往互相提供最佳的客戶支援 -- 他們彼此分享經驗跟專業知識。此外,你還可以購買具有 客戶支援 的版本,包括 email 支援或者電話支援的方式。大致上來說,客戶支援費率並非固定,因此我們無法提供你相關價位的資訊。


MySQL 的不足之處
Access 是一個關聯性資料庫管理系統(RDBMS),然而 MySQL 並非在每一個層面都是如此。這表示,雖然 MySQL 很好用,它還不是最好的。 以下列表記錄了目前關聯性層面以及管理層面,MySQL 尚未支援的部分:

MySQL 沒法處理複雜的關聯性資料庫功能,例如,子查詢(subqueries),雖然大多數的子查詢都可以改寫成 join。我們預期下一版出來時,這項功能會被加進來。
另一個 MySQL 沒有支援的管理層面功能是交易(transaction)以及確認(commit)/撤回(rollback)。 一個交易 指的是被當作一個單位來共同執行的一群或一套命令。如果一個交易沒法完成,那麼整個交易裡面沒有一個指令是真正執行下去的。對於必須處理線上訂單的商業網站來說, MySQL 沒有支援這項功能,的確讓人覺得很失望。 MaxSQL,一個分開的伺服器,是透過外掛的表格來支援交易功能。
外來鍵(foreign key)以及參考整合限制(referential integrity)可以讓你訂定表格中資料之間的規則,然後將規則(constraint)加到所欲規定的資料裡面。這表示,一個有賴複雜的資料關係的應用程式並不適合使用 MySQL。當我們說 MySQL 不支援外來鍵時,我們指的就是資料庫的參考整合限制 -- MySQL 並沒有支援外來鍵規則,當然更沒有支援連鎖刪除效應(cascading delete)。 簡短的說,如果你需要複雜的資料關係,你還是用原來的 Access 吧。
你在 MySQL 也不會找到預存程序(stored procedure)以及觸發(trigger)。(針對這些功能,在 Access 有提供相對的事件程序(event procedure)。)
Access 的 GetRows 功能,提供較好的資料擷取。
頁: [1]
查看完整版本: MySQL