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