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



























