????:SQL,在這里我理解成SQL Server。三者是目前市場(chǎng)占有率最高(依安裝量而非收入)的關(guān)系數(shù)據(jù)庫,而且很有代表性。排行第四的DB2(屬IBM公司),與Oracle的定位和架構(gòu)非常相似,就不贅述了。如果要說明三者的區(qū)別,首先就要從歷史入手。Oracle:中文譯作甲骨文,這是一家傳奇的公司,有一個(gè)傳奇的大老板Larry Ellision。 Ellision 32歲還一事無成,讀了三個(gè)大學(xué),沒得到一
SQL,在這里我理解成SQL Server。三者是目前市場(chǎng)占有率最高(依安裝量而非收入)的關(guān)系數(shù)據(jù)庫,而且很有代表性。排行第四的DB2(屬IBM公司),與Oracle的定位和架構(gòu)非常相似,就不贅述了。
如果要說明三者的區(qū)別,首先就要從歷史入手。
Oracle:中文譯作甲骨文,這是一家傳奇的公司,有一個(gè)傳奇的大老板Larry Ellision。 Ellision 32歲還一事無成,讀了三個(gè)大學(xué),沒得到一個(gè)學(xué)位文憑,換了十幾家公司,老婆也離他而去。開始創(chuàng)業(yè)時(shí)只有1200美元,卻使得Oracle公司連續(xù)12年銷售額每年翻一番。
Oracle成立于1977年,早期的理論基礎(chǔ),反而來自于一篇IBM的論文《A Relational Model of Data for Large Shared Data Banks》【1】。作者CODD選取了關(guān)系代數(shù)的五種運(yùn)算,并基于運(yùn)算,架構(gòu)了一種新型的數(shù)據(jù)存儲(chǔ)模型?;谶@種模型,Oracle成為了一個(gè)非常典型的關(guān)系數(shù)據(jù)庫。因此也變的嚴(yán)謹(jǐn)、安全、高速、穩(wěn)定,并且變的越來越龐大。
由于其誕生早、結(jié)構(gòu)嚴(yán)謹(jǐn)、高可用、高性能等特點(diǎn),使其在傳統(tǒng)數(shù)據(jù)庫應(yīng)用中大殺四方,金融、通信、能源、運(yùn)輸、零售、制造等各個(gè)行業(yè)的大型公司基本都是用了Oracle,早些年的時(shí)候,世界500強(qiáng)幾乎100%都是Oracle的用戶。
MySQL :MySQL的最初的核心思想,主要是開源、簡(jiǎn)便易用。其開發(fā)可追溯至1985年,而第一個(gè)內(nèi)部發(fā)行版本誕生,已經(jīng)是1995年。到1998年,MySQL已經(jīng)可以支持10中操作系統(tǒng)了,其中就包括win平臺(tái)。但依然問題多多,如不支持事務(wù)操作、子查詢 、外鍵、存儲(chǔ)過程和視圖等功能。下圖是一個(gè)截止至2006年的數(shù)據(jù)庫市場(chǎng)占有率【2】:
圖中可以看出,MySQL的爆發(fā)實(shí)際是在01、02年,尤其是02年發(fā)布的4.0 Beta版,正式選定InnoDB作為默認(rèn)引擎,對(duì)事務(wù)處理能力及數(shù)據(jù)緩存能力有了極大的提高。同年4.1版開始支持子查詢,至此MySQL終于蛻變成一個(gè)成熟的關(guān)系型數(shù)據(jù)庫系統(tǒng)。05年的5.0版本又添加了存儲(chǔ)過程、服務(wù)端游標(biāo)、觸發(fā)器、查詢優(yōu)化以及分布式事務(wù)功能,但同年被Oracle抄了后路,InnoDB被Oracle收編。08年,MySQL被Sun收購,09年,Oracle收購了Sun和MySQL。
由于MySQL的早期定位,其主要應(yīng)用場(chǎng)景就是互聯(lián)網(wǎng)開發(fā)?;旧希ヂ?lián)網(wǎng)的爆發(fā)成就了MySQL,LAMP架構(gòu)風(fēng)靡天下。而由于MySQL更多的的追求輕量、易用,以及早期的事物操作及復(fù)雜查詢優(yōu)化的缺失,在傳統(tǒng)的數(shù)據(jù)庫應(yīng)用場(chǎng)景中,份額極少。
SQL Server:一提到SQL Server,大家一般都只想到Microsoft SQL Server,而非Sybase SQL Server。SQL Server最初是由Microsoft, Sybase and Ashton-Tate三家公司攔下的生意,是為IBM(又出現(xiàn)了)公司的OS/2操作系統(tǒng)開發(fā)的。隨著OS/2項(xiàng)目的失敗,大家也分道揚(yáng)鑣。 Microsoft自然轉(zhuǎn)向自己的win操作系統(tǒng),作為windows NT軟件方案的一部分。而Sybase則專注于Linux/Unix方向的數(shù)據(jù)庫開發(fā)。
MS SQL Server主要面向中小企業(yè)。其最大的優(yōu)勢(shì)就是在于集成了MS公司的各類產(chǎn)品及資源,提供了強(qiáng)大的可視化界面、高度集成的管理開發(fā)工具,在快速構(gòu)建商業(yè)智能(BI)方面頗有建樹。 MS SQL Server是MS公司在軟件集成方案中的重要一環(huán),也為WIN系統(tǒng)在企業(yè)級(jí)應(yīng)用中的普及做出了很大貢獻(xiàn)。
典型應(yīng)用場(chǎng)景
關(guān)于“大型數(shù)據(jù)庫”,并沒有嚴(yán)格的界定,有說以數(shù)據(jù)量為準(zhǔn),有說以恢復(fù)時(shí)間為準(zhǔn)。如果綜合數(shù)據(jù)庫應(yīng)用場(chǎng)景來說,大型數(shù)據(jù)庫應(yīng)用有以下特點(diǎn):海量數(shù)據(jù)、高吞吐量;復(fù)雜邏輯、高計(jì)算量,以及高可用性。從這點(diǎn)上來說,Oracle,DB2就是比較典型的大型數(shù)據(jù)庫,Sybase SQL Server也算是吧。下面分別說明之前三種數(shù)據(jù)庫的應(yīng)用場(chǎng)景。
Oracle。Oracle的應(yīng)用,主要在傳統(tǒng)行業(yè)的數(shù)據(jù)化業(yè)務(wù)中,比如:銀行、金融這樣的對(duì)可用性、健壯性、安全性、實(shí)時(shí)性要求極高的業(yè)務(wù);零售、物流這樣對(duì)海量數(shù)據(jù)存儲(chǔ)分析要求很高的業(yè)務(wù)。此外,高新制造業(yè)如芯片廠也基本都離不開Oracle;電商也有很多使用者,如京東(正在投奔Oracle)、阿里巴巴(計(jì)劃去Oracle化)。而且由于Oracle對(duì)復(fù)雜計(jì)算、統(tǒng)計(jì)分析的強(qiáng)大支持,在互聯(lián)網(wǎng)數(shù)據(jù)分析、數(shù)據(jù)挖掘方面的應(yīng)用也越來越多。一個(gè)典型場(chǎng)景是這樣的:
某電信公司(非國內(nèi))下屬某分公司的數(shù)據(jù)中心,有4臺(tái)Oracle Sun的大型服務(wù)器用來安裝Solaris操作系統(tǒng)和Oracle并提供計(jì)算服務(wù),3臺(tái)Sun Storage磁盤陣列來提供Oracle數(shù)據(jù)存儲(chǔ),12臺(tái)IBM小型機(jī),一臺(tái)Oracle Exadata服務(wù)器,一臺(tái)500T的磁帶機(jī)用來存儲(chǔ)歷史數(shù)據(jù),San連接內(nèi)網(wǎng),使用Tuxedo中間件來保證擴(kuò)展性和無損遷移。建立支持高并發(fā)的Oracle數(shù)據(jù)庫,通過OLTP系統(tǒng)用來對(duì)海量數(shù)據(jù)實(shí)時(shí)處理、操作,建立高運(yùn)算量的Oracle數(shù)據(jù)倉庫,用OLAP系統(tǒng)用來分析營收數(shù)據(jù)及提供自動(dòng)報(bào)表。總預(yù)算約750萬美金。
MySQL。MySQL基本是生于互聯(lián)網(wǎng),長于互聯(lián)網(wǎng)。其應(yīng)用實(shí)例也大都集中于互聯(lián)網(wǎng)方向,MySQL的高并發(fā)存取能力并不比大型數(shù)據(jù)庫差,同時(shí)價(jià)格便宜,安裝使用簡(jiǎn)便快捷,深受廣大互聯(lián)網(wǎng)公司的喜愛。并且由于MySQL的開源特性,針對(duì)一些對(duì)數(shù)據(jù)庫有特別要求的應(yīng)用,可以通過修改代碼來實(shí)現(xiàn)定向優(yōu)化,例如SNS、LBS等互聯(lián)網(wǎng)業(yè)務(wù)。一個(gè)典型的應(yīng)用場(chǎng)景是:
某互聯(lián)網(wǎng)公司,成立之初,僅有PC數(shù)臺(tái),通過LAMP架構(gòu)迅速搭起網(wǎng)站框架。隨著業(yè)務(wù)擴(kuò)張、市場(chǎng)擴(kuò)大,迅速發(fā)展成為6臺(tái)Dell小型機(jī)的中型網(wǎng)站?,F(xiàn)在花了三年,終于成為垂直領(lǐng)域的最大網(wǎng)站,計(jì)劃中的數(shù)據(jù)中心,擁有Dell機(jī)架式服務(wù)器40臺(tái),總預(yù)算20萬美金。
MS SQL Server。windows生態(tài)系統(tǒng)的產(chǎn)品,好處壞處都很分明。好處就是,高度集成化,微軟也提供了整套的軟件方案,基本上一套win系統(tǒng)裝下來就齊活了。因此,不那么缺錢,但很缺IT人才的中小企業(yè),會(huì)偏愛 MS SQL Server 。例如,自建ERP系統(tǒng)、商業(yè)智能、垂直領(lǐng)域零售商、餐飲、事業(yè)單位等等。
1996年,Bill Gates親自出手,從Borland挖來了大牛Anders,搞定了C#語言。微軟02年搞定了http://ASP.NET。成熟的.NET、Silverlight技術(shù),為 MS SQL Server贏得了部分互聯(lián)網(wǎng)市場(chǎng),其中就有曾經(jīng)的全球最大社交網(wǎng)站MySpace,其發(fā)展歷程很有代表性,可作為一個(gè)比較特別的例子【3】。其巔峰時(shí)有超過1.5億的注冊(cè)用戶及每月400億的訪問量。應(yīng)該算是MS SQL Server支撐的最大的數(shù)據(jù)應(yīng)用了。
架構(gòu)。其實(shí)要說執(zhí)行的區(qū)別,主要還是架構(gòu)的區(qū)別。正是架構(gòu)導(dǎo)致了相同SQL在執(zhí)行過程中的解釋、優(yōu)化、效率的差異。這里只做粗略說明,就不細(xì)說了:
Oracle: 數(shù)據(jù)文件包括:控制文件、數(shù)據(jù)文件、重做日志文件、參數(shù)文件、歸檔文件、密碼文件。這是根據(jù)文件功能行進(jìn)行劃分,并且所有文件都是二進(jìn)制編碼后的文件,對(duì)數(shù)據(jù)庫算法效率有極大的提高。由于Oracle文件管理的統(tǒng)一性,就可以對(duì)SQL執(zhí)行過程中的解析和優(yōu)化,指定統(tǒng)一的標(biāo)準(zhǔn):
RBO(基于規(guī)則的優(yōu)化器)、CBO(基于成本的優(yōu)化器)
通過優(yōu)化器的選擇,以及無敵的HINT規(guī)則,給與了SQL優(yōu)化極大的自由,對(duì)CPU、內(nèi)存、IO資源進(jìn)行方方面面的優(yōu)化。
MySQL:最大的一個(gè)特色,就是自由選擇存儲(chǔ)引擎。每個(gè)表都是一個(gè)文件,都可以選擇合適的存儲(chǔ)引擎。常見的引擎有 InnoDB、 MyISAM、 NDBCluster等。但由于這種開放插件式的存儲(chǔ)引擎,比如要求數(shù)據(jù)庫與引擎之間的松耦合關(guān)系。從而導(dǎo)致文件的一致性大大降低。在SQL執(zhí)行優(yōu)化方面,也就有著一些不可避免的瓶頸。在多表關(guān)聯(lián)、子查詢優(yōu)化、統(tǒng)計(jì)函數(shù)等方面是軟肋,而且只支持極簡(jiǎn)單的HINT。
SQL Server :數(shù)據(jù)架構(gòu)基本是縱向劃分,分為:Protocol Layer(協(xié)議層), Relational Engine(關(guān)系引擎), Storage Engine(存儲(chǔ)引擎), SQLOS。SQL執(zhí)行過程就是逐層解析的過程,其中Relational Engine中的優(yōu)化器,是基于成本的(CBO),其工作過程跟Oracle是非常相似的。在成本之上也是支持很豐富的HINT,包括:連接提示、查詢提示、表提示。