如何做好數(shù)據(jù)庫管理系統(tǒng)產(chǎn)品選型
數(shù)據(jù)庫管理系統(tǒng)(DBMS)是如今企業(yè)運(yùn)營(yíng)與分析系統(tǒng)的核心部分。數(shù)據(jù)對(duì)于企業(yè)來說就像是血液,而數(shù)據(jù)庫管理系統(tǒng)則是數(shù)據(jù)順暢流動(dòng)的樞紐,它負(fù)責(zé)存儲(chǔ)、管理、保護(hù)數(shù)據(jù),并為業(yè)務(wù)應(yīng)用以及終端用戶提供支持。然而,如今數(shù)據(jù)庫市場(chǎng)已經(jīng)不再是關(guān)系型數(shù)據(jù)庫的天下,不同類型的產(chǎn)品都擁有各自的特長(zhǎng)與缺點(diǎn),企業(yè)CIO在進(jìn)行選型的時(shí)候需要仔細(xì)考慮其利弊。
過去30年當(dāng)中,關(guān)系型數(shù)據(jù)庫(RDBMS)產(chǎn)品在企業(yè)系統(tǒng)中占據(jù)了主導(dǎo)地位。隨著服務(wù)器成本的不斷降低以及性能的不斷提升,關(guān)系型數(shù)據(jù)庫也得到了最大限度的普及。但是在互聯(lián)網(wǎng)時(shí)代到來之后,關(guān)系型數(shù)據(jù)庫的短板就愈加明顯了。如今,IT部門正在試圖尋找處理非結(jié)構(gòu)化數(shù)據(jù)的方法。與結(jié)構(gòu)化數(shù)據(jù)相比,它的格式更加復(fù)雜多變,這使得許多企業(yè)不得不去考慮NoSQL數(shù)據(jù)庫技術(shù)。此外,對(duì)于存在大量快速交易的應(yīng)用,或者那些需要對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)復(fù)雜分析的應(yīng)用,內(nèi)存數(shù)據(jù)庫(in-memoryDatabase)或許是個(gè)不錯(cuò)的選擇。鑒于以上的場(chǎng)景越來越多地出現(xiàn)在企業(yè)當(dāng)中,如今有不少CIO希望使用混合型的數(shù)據(jù)庫平臺(tái)來應(yīng)對(duì)上述難題。
DBMS是現(xiàn)代化應(yīng)用的核心,選擇合適的數(shù)據(jù)庫技術(shù)將會(huì)對(duì)IT項(xiàng)目成敗起到?jīng)Q定性的作用。現(xiàn)如今的數(shù)據(jù)庫市場(chǎng)相比于10年前已經(jīng)變得更為復(fù)雜了,因此理解不同類型的DBMS有哪些特點(diǎn),以及再何時(shí)、何處(場(chǎng)景)使用它們是十分必要的。在接下來,我們就將進(jìn)行一個(gè)詳細(xì)的介紹,希望能夠?yàn)槟臄?shù)據(jù)庫選型起到幫助、指導(dǎo)作用。
數(shù)據(jù)庫管理系統(tǒng)類別與模型
雖然很多新技術(shù)不斷涌現(xiàn)出來,但在進(jìn)行選型的時(shí)候,大部分企業(yè)還是會(huì)首先考慮關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。大數(shù)據(jù)浪潮的席卷使得這樣的情況有所改變,它同時(shí)也帶來了新型的DBMS產(chǎn)品,在某些特定的場(chǎng)景中,它能夠與關(guān)系型數(shù)據(jù)庫軟件一較高下。此外,DBMS中各種各樣的產(chǎn)品類型還在不斷地添加新的技術(shù)與功能,這使得整個(gè)數(shù)據(jù)庫生態(tài)系統(tǒng)變得前所未有地復(fù)雜。
在使用率以及市場(chǎng)份額方面,關(guān)系型數(shù)據(jù)庫毫無疑問仍然是領(lǐng)導(dǎo)者。基于集合代數(shù)等數(shù)學(xué)概念,關(guān)系型數(shù)據(jù)庫提供了數(shù)據(jù)的存儲(chǔ)、訪問以及保護(hù)能力,同時(shí)針對(duì)大多數(shù)的交易型與分析型應(yīng)用保證了其性能指標(biāo)。在過去的三十多年當(dāng)中,企業(yè)運(yùn)營(yíng)數(shù)據(jù)庫管理系統(tǒng)基本上都采用了關(guān)系型技術(shù)。在這個(gè)領(lǐng)域,甲骨文(Oracle)、IBM(DB2)和微軟(SQL Server)是三大巨頭。針對(duì)大多數(shù)的應(yīng)用場(chǎng)景,關(guān)系型數(shù)據(jù)庫都體現(xiàn)了充分的適用性與可靠性。在財(cái)富500強(qiáng)當(dāng)中,所有企業(yè)都在使用關(guān)系型數(shù)據(jù)庫來支撐核心業(yè)務(wù)系統(tǒng)。當(dāng)然,穩(wěn)定性的代價(jià)就是高成本——關(guān)系型數(shù)據(jù)庫的價(jià)格往往不便宜。
關(guān)系型數(shù)據(jù)庫系統(tǒng)的另外一個(gè)優(yōu)勢(shì)就是對(duì)ACID原則的全面支持,即交易的原子性、一致性、隔離性與持久性。ACID能夠保障所有的交易能夠正確地執(zhí)行,如果交易出錯(cuò),它能夠保證關(guān)系型數(shù)據(jù)庫回滾到執(zhí)行之前的狀態(tài)。
鑒于關(guān)系型數(shù)據(jù)庫如此強(qiáng)大、健壯的特性,為何市面上還會(huì)出現(xiàn)其他類型的數(shù)據(jù)庫產(chǎn)品呢?答案很簡(jiǎn)單,基于web 的數(shù)據(jù)處理與大數(shù)據(jù)分析需求使得關(guān)系型數(shù)據(jù)庫變得捉襟見肘。盡管關(guān)系型數(shù)據(jù)庫也能夠在這些場(chǎng)景下使用,但其他產(chǎn)品能夠提供更靈活的模式。非強(qiáng)一致性模型以及更小的處理消耗更適合快速變化的動(dòng)態(tài)環(huán)境,于是NoSQL進(jìn)入了我們的眼簾。
NoSQL數(shù)據(jù)庫相比于關(guān)系型數(shù)據(jù)庫提供了更靈活的數(shù)據(jù)庫模式(schema),其中每一個(gè)數(shù)據(jù)元素不需要存在于每一個(gè)數(shù)據(jù)實(shí)體當(dāng)中。定義更松散的數(shù)據(jù)結(jié)構(gòu)會(huì)隨著時(shí)間的推移而進(jìn)化,因此在一些特定場(chǎng)景下NoSQL數(shù)據(jù)庫會(huì)是更加實(shí)際的解決方案。
NoSQL與關(guān)系型數(shù)據(jù)庫的另外一個(gè)不同就是數(shù)據(jù)一致性的提供方式。關(guān)系型數(shù)據(jù)庫可以確保存儲(chǔ)的數(shù)據(jù)永遠(yuǎn)保持一致性,而大多數(shù)NoSQL數(shù)據(jù)庫產(chǎn)品提供了更松散的一致性方式。事實(shí)上,關(guān)系型數(shù)據(jù)庫產(chǎn)品已經(jīng)可以提供不同級(jí)別的數(shù)據(jù)庫鎖、一致性與隔離性,而一些NoSQL則提供了多種一致性模型,可以支持完整的ACID。
NoSQL解決了一些關(guān)系型數(shù)據(jù)庫不能解決的問題,針對(duì)海量數(shù)據(jù)的處理更得心應(yīng)手。數(shù)據(jù)被認(rèn)為是稀疏的,不是所有元素都被填充,在實(shí)際值中還有很多的“空白空間”。舉個(gè)例子,就像一個(gè)矩陣中有很多0。
盡管NoSQL在特定的數(shù)據(jù)類型上有著一定優(yōu)勢(shì),但與關(guān)系型數(shù)據(jù)庫相比它的劣勢(shì)也是非常明顯的。比如,交易完整性、靈活索引以及查詢易用性的缺失等。此外,NoSQL還包含了四個(gè)不同的類別,用來支持不同的應(yīng)用:
- 鍵值型數(shù)據(jù)庫(Key-value)
- 文檔型數(shù)據(jù)庫(Document)
- 列式數(shù)據(jù)庫(Column store)
- 圖型數(shù)據(jù)庫(Graph)
每一類的NoSQL數(shù)據(jù)庫都是用不同的數(shù)據(jù)模型,并且有著各自的專長(zhǎng)、缺陷以及使用場(chǎng)景。進(jìn)行NoSQL數(shù)據(jù)庫選型的時(shí)候需要對(duì)不同類型的數(shù)據(jù)庫有一個(gè)深刻的認(rèn)識(shí)與理解,同時(shí)需要結(jié)合數(shù)據(jù)與應(yīng)用需求。
內(nèi)存數(shù)據(jù)庫:我們要介紹的最后一類數(shù)據(jù)庫就是內(nèi)存數(shù)據(jù)庫,有時(shí)也稱為主內(nèi)存數(shù)據(jù)庫。一個(gè)內(nèi)存數(shù)據(jù)庫主要通過內(nèi)存來存儲(chǔ)數(shù)據(jù),這與基于磁盤的存儲(chǔ)有所不同。
內(nèi)存數(shù)據(jù)庫的主要應(yīng)用場(chǎng)景就是改善性能。數(shù)據(jù)存儲(chǔ)在內(nèi)存介質(zhì)當(dāng)中,I/O延遲將得到大大削減。因?yàn)闄C(jī)械硬盤的轉(zhuǎn)動(dòng)、尋道時(shí)間以及傳輸?shù)骄彺嫫鞯膭?dòng)作在內(nèi)存中都被省去了。
內(nèi)存數(shù)據(jù)庫主要針對(duì)內(nèi)存數(shù)據(jù)訪問進(jìn)行了優(yōu)化,而傳統(tǒng)數(shù)據(jù)庫則是針對(duì)磁盤進(jìn)行的數(shù)據(jù)訪問優(yōu)化。內(nèi)存數(shù)據(jù)庫產(chǎn)品還可以減少開銷,因?yàn)槠鋬?nèi)部算法通常更加簡(jiǎn)單,需要更少的CPU指令。
另外一個(gè)發(fā)展快速的領(lǐng)域就是多模型數(shù)據(jù)庫管理系統(tǒng),它支持超過一種類型的存儲(chǔ)引擎。許多NoSQL數(shù)據(jù)庫產(chǎn)品支持一種以上的數(shù)據(jù)模型,比如文檔型與鍵值型。關(guān)系型數(shù)據(jù)庫產(chǎn)品也逐漸開始支持NoSQL功能,比如在關(guān)系型數(shù)據(jù)庫引擎之上再添加列數(shù)據(jù)存儲(chǔ)。
其他還有一些數(shù)據(jù)庫類型,但與上述三種相比就小眾的多了:
- XML數(shù)據(jù)庫,主要支持XML數(shù)據(jù),與NoSQL的文檔數(shù)據(jù)庫相類似。如今大部分的關(guān)系型數(shù)據(jù)庫都已經(jīng)提供了XML支持。
- 列式數(shù)據(jù)庫(columnar database )是SQL數(shù)據(jù)庫系統(tǒng)的一種,它主要針對(duì)多行多列讀取進(jìn)行了優(yōu)化,但寫數(shù)據(jù)方面很少優(yōu)化。
- 對(duì)象數(shù)據(jù)庫在上世紀(jì)90年代非常流行,主要因?yàn)閷?duì)象編程的出現(xiàn)。它與NoSQL文檔數(shù)據(jù)庫相類似。
- 如IBM IMS分級(jí)系統(tǒng)以及CA IDMS網(wǎng)絡(luò)系統(tǒng),主要運(yùn)行在大型機(jī)上。這兩個(gè)產(chǎn)品目前仍然有不少企業(yè)在使用。
額外提醒
在進(jìn)行數(shù)據(jù)庫管理系統(tǒng)選型的時(shí)候,有些問題仍然需要考慮。首先是平臺(tái)支持。目前主流的計(jì)算環(huán)境包括了Linux、Unix、Windows以及大型機(jī)系統(tǒng)。并不是每一個(gè)數(shù)據(jù)庫產(chǎn)品都支持以上四個(gè)平臺(tái)。
另外一個(gè)考慮因素就是廠商支持。許多數(shù)據(jù)庫產(chǎn)品都是開源的,特別是NoSQL數(shù)據(jù)庫。開源技術(shù)能夠增加靈活性,降低成本。但它缺少商業(yè)化支持,除非你購(gòu)買了商用版。當(dāng)在管理、支持方面遇到問題時(shí),很多開源產(chǎn)品的成本就會(huì)直線上升。
你還可以選擇數(shù)據(jù)庫一體機(jī)或者云數(shù)據(jù)庫。前者與硬件進(jìn)行了預(yù)集成,并針對(duì)數(shù)據(jù)庫應(yīng)用進(jìn)行了性能優(yōu)化,打包出售,開箱即用。使用一體機(jī)可以減少部署和配置的開銷,同時(shí)廠商會(huì)為硬件軟件提供一體化的支持。而后者更適用于IT技術(shù)人員比較缺乏的企業(yè),數(shù)據(jù)庫運(yùn)維都可以由云服務(wù)商來為你解決。
總結(jié)
如果你正在進(jìn)行數(shù)據(jù)庫選型,首先就需要確定你的具體需求,然后再考察不同類型的數(shù)據(jù)庫產(chǎn)品所提供的不同功能,它是否滿足你的需求。然后再考慮具體的應(yīng)用場(chǎng)景,哪些數(shù)據(jù)庫產(chǎn)品對(duì)這些應(yīng)用進(jìn)行了優(yōu)化。事實(shí)上,在進(jìn)行決策之前有許多變化的因素需要考慮,做周全的準(zhǔn)備才能做出最正確的選擇。