對(duì)于程序開(kāi)發(fā)人員而言,目前使用最流行的兩種后臺(tái)數(shù)據(jù)庫(kù)即為MySQL and SQL Server。這兩者最基本的相似之處在于數(shù)據(jù)存儲(chǔ)和屬于查詢(xún)系統(tǒng)。你可以使用SQL來(lái)訪問(wèn)這兩種數(shù)據(jù)庫(kù)的數(shù)據(jù),因?yàn)樗鼈兌贾С諥NSI-SQL。還有,這兩種數(shù)據(jù)庫(kù)系統(tǒng)都支持二進(jìn)制關(guān)鍵詞和關(guān)鍵索引,這就大大地加快了查詢(xún)速度。同時(shí),二者也都提供支持XML的各種格式。
除了在顯而易見(jiàn)的軟件價(jià)格上的區(qū)別之外,這兩個(gè)產(chǎn)品還有什么明顯的區(qū)別嗎?在這二者之間你是如何選擇的?讓我們看看這兩個(gè)產(chǎn)品的主要的不同之處,包括發(fā)行費(fèi)用,性能以及它們的安全性。
根本的區(qū)別是它們遵循的基本原則
二者所遵循的基本原則是它們的主要區(qū)別:開(kāi)放vs保守。SQL服務(wù)器的狹隘的,保守的存儲(chǔ)引擎與MySQL服務(wù)器的可擴(kuò)展,開(kāi)放的存儲(chǔ)引擎絕然不同。雖然你可以使用SQL服務(wù)器的Sybase引擎,但MySQL能夠提供更多種的選擇,如MyISAM, Heap, InnoDB, and Berkeley DB。MySQL不完全支持陌生的關(guān)鍵詞,所以它比SQL服務(wù)器要少一些相關(guān)的數(shù)據(jù)庫(kù)。同時(shí),MySQL也缺乏一些存儲(chǔ)程序的功能,比如MyISAM引擎聯(lián)支持交換功能。
發(fā)行費(fèi)用:MySQL不全是免費(fèi),但很便宜
當(dāng)提及發(fā)行的費(fèi)用,這兩個(gè)產(chǎn)品采用兩種絕然不同的決策。對(duì)于SQL服務(wù)器,獲取一個(gè)免費(fèi)的開(kāi)發(fā)費(fèi)用最常的方式是購(gòu)買(mǎi)微軟的Office或Visual Studio的費(fèi)用。但是,如果你想用于商業(yè)產(chǎn)品的開(kāi)發(fā),你必須還要購(gòu)買(mǎi)SQL Server Standard Edition。學(xué);蚍勤A利的企業(yè)可以不考慮這一附加的費(fèi)用。
性能:先進(jìn)的MySQL
純粹就性能而言,MySQL是相當(dāng)出色的,因?yàn)樗粋(gè)缺省桌面格式MyISAM。MyISAM 數(shù)據(jù)庫(kù)與磁盤(pán)非常地兼容而不占用過(guò)多的CPU和內(nèi)存。MySQL可以運(yùn)行于Windows系統(tǒng)而不會(huì)發(fā)生沖突,在UNIX或類(lèi)似UNIX系統(tǒng)上運(yùn)行則更好。你還可以通過(guò)使用64位處理器來(lái)獲取額外的一些性能。因?yàn)镸ySQL在內(nèi)部里很多時(shí)候都使用64位的整數(shù)處理。Yahoo!商業(yè)網(wǎng)站就使用MySQL作為后臺(tái)數(shù)據(jù)庫(kù)。當(dāng)提及軟件的性能,SQL服務(wù)器的穩(wěn)定性要比它的競(jìng)爭(zhēng)對(duì)手強(qiáng)很多。但是,這些特性也要付出代價(jià)的。比如,必須增加額外復(fù)雜操作,磁盤(pán)存儲(chǔ),內(nèi)存損耗等等。如果你的硬件和軟件不能充分支持SQL服務(wù)器,我建議你最好選擇其他如DBMS數(shù)據(jù)庫(kù),因?yàn)檫@樣你會(huì)得到更好的結(jié)果。
這兩者數(shù)據(jù)庫(kù)都能夠在.NET或J2EE下運(yùn)行正常,同樣,都能夠利用RAID。
安全功能
MySQL有一個(gè)用于改變數(shù)據(jù)的二進(jìn)制日志。因?yàn)樗嵌M(jìn)制,這一日志能夠快速地從主機(jī)上復(fù)制數(shù)據(jù)到客戶(hù)機(jī)上。即使服務(wù)器崩潰,這一二進(jìn)制日志也會(huì)保持完整,而且復(fù)制的部分也不會(huì)受到損壞。
在SQL服務(wù)器中,你也可以記錄SQL的有關(guān)查詢(xún),但這需要付出很高的代價(jià)。
安全性
這兩個(gè)產(chǎn)品都有自己完整的安全機(jī)制。只要你遵循這些安全機(jī)制,一般程序都不會(huì)出現(xiàn)什么問(wèn)題。這兩者都使用缺省的IP端口,但是有時(shí)候很不幸,這些IP也會(huì)被一些黑客闖入。當(dāng)然,你也可以自己設(shè)置這些IP端口。
恢復(fù)性:先進(jìn)的SQL服務(wù)器
恢復(fù)性也是MySQL的一個(gè)特點(diǎn),這主要表現(xiàn)在MyISAM配置中。這種方式有它固有的缺欠,如果你不慎損壞數(shù)據(jù)庫(kù),結(jié)果可能會(huì)導(dǎo)致所有的數(shù)據(jù)丟失。然而,對(duì)于SQL服務(wù)器而言就表現(xiàn)得很穩(wěn)鍵。SQL服務(wù)器能夠時(shí)刻監(jiān)測(cè)數(shù)據(jù)交換點(diǎn)并能夠把數(shù)據(jù)庫(kù)損壞的過(guò)程保存下來(lái)。
根據(jù)需要決定你的選擇
對(duì)于這兩種數(shù)據(jù)庫(kù),如果非要讓我說(shuō)出到底哪一種更加出色,也許我會(huì)讓你失望。以我的觀點(diǎn),任一對(duì)你的工作有幫助的數(shù)據(jù)庫(kù)都是很好的數(shù)據(jù)庫(kù),沒(méi)有哪一個(gè)數(shù)據(jù)庫(kù)是絕對(duì)的出色,也沒(méi)有哪一個(gè)數(shù)據(jù)庫(kù)是絕對(duì)的差勁。我想要告訴你的是你應(yīng)該多從你自己的需要出發(fā),即你要完成什么樣的任務(wù)?而不要單純地從軟件的功能出發(fā)。
如果你想建立一個(gè).NET服務(wù)器體系,這一體系可以從多個(gè)不同平臺(tái)訪問(wèn)數(shù)據(jù),參與數(shù)據(jù)庫(kù)的管理,那么你可以選用SQL服務(wù)器。如果你想建立一個(gè)第三方站點(diǎn),這一站點(diǎn)可以從一些客戶(hù)端讀取數(shù)據(jù),那么MySQL將是最好的選擇。