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