作為近期信息管理領域最為熱門的兩項技術,數據庫一體機與大數據技術的硬件架構基本相同,但軟件體系有著本質的區別,這也導致了兩者擁有不同的特征表現。
隨著企業數據量的快速增長,以及用戶對服務水平要求的不斷提高,相當長的一段時間以來,傳統關系數據庫技術在生產實踐中表現出明顯的能力不足。如何以合理的成本獲得海量數據的高可用性已經成為現代IT領域的重大挑戰。為了應對這一挑戰,近年來,IT市場中相繼出現了許多新的技術手段,其中最為引人注目的便是由主流數據庫廠商主導的數據庫一體機(例如Oracle ExaData以及IBM Netezza等),以及以開源力量為主的大數據技術。
不過,雖然數據庫一體機與大數據技術都是當今的熱門話題,并都已經被廣泛應用,但卻有相當一部分用戶仍然無法深入了解兩者之間的本質區別與關系。同時,很多用戶也在為如何在企業內部對這兩者進行正確定位而感到困惑。為此,本文特別對數據庫一體機(也可稱新一代主流關系型數據庫)和大數據技術(例如Hadoop,主要指MapReduce與NoSQL)的相關技術特點進行對比。
硬件與軟件
從本質上來講,數據庫一體機與大數據技術的硬件架構基本相同,同樣是采用x86服務器集群的分布式并行模式,以應對大規模的數據與計算。但是,數據庫一體機的賣家們通常會對其產品的硬件體系進行面向產品化的、系統性的整體調優,同時也會有各自的特色手段。比方說Oracle ExaData的Infiniband、Flash Cache,IBM Nettezza的FPGA(現場可編程邏輯門陣)等。
數據庫一體機與大數據技術最為核心的區別是在軟件體系上。數據庫一體機的核心是SQL體系,這不只是指SQL解析,更重要的是指包括SQL優化引擎、索引、鎖、事務、日志、安全以及管理等在內的完整而龐大的技術體系。這一體系是成熟的、面向產品的。
大數據技術軟件體系中的MapReduce則提供了一個面向海量數據處理的分布式編程框架,使用者需要自行編制所需要的計算邏輯。MapReduce對數據的讀寫是批量連續的,而不是隨機的。而大數據技術的另一體系NoSQL則大都只是提供了海量數據的分布式存儲,以及基于索引的快速讀取機制,為使用者提供的大多是編程API(雖然也有類SQL的語言,但其本質并不是完整的SQL體系)。
由于SQL體系的復雜性與處理邏輯的整體關聯性,導致數據庫一體機在擴展性上遠不及大數據技術體系,雖然前者已經在很大程度上改善了傳統關系數據庫垂直擴展的瓶頸。MapReduce與NoSQL的單個集群往往可以擴展到數千個節點,而數據庫一體機如果在硬件上擴展到這個規模,從軟件上來講,已經是沒有意義的了。
特征與本質
基于軟件體系的不同,導致了數據庫一體機和大數據技術有著不同的特征表現。數據庫一體機往往適合于存儲關系復雜的數據模型(例如企業核心業務數據),并且需要限制為基于二維表的關系模型。同時,數據庫一體機適合進行一致性與事務性要求高的計算,以及復雜的BI計算。
大數據技術則更適合于存儲較簡單的數據模型,并且可以不受模式的約束。因而其可存儲管理的數據類型更加豐富。大數據技術還適合進行一致性與事務性要求不高的計算(主要是指NoSQL的查詢操作),以及對超大規模海量數據的、批量的分布式并行計算(基于MapReduce)。
需要注意的是,NoSQL數據庫由于擺脫了繁瑣的SQL體系約束,其查詢與插入的效率比數據庫一體機更高。大數據技術比數據庫一體機所能處理的數據量也相對大些,這主要是因為其集群可以擴展得更大。
從本質上講,MapReduce是對海量數據分布式計算領域的一個重要創新,但也只是在適合于并行處理的大規模批量處理問題上更占優勢,而對一些復雜操作,則不一定具有優勢。NoSQL則可以看作是對傳統關系數據庫進行簡化的結果。由于NoSQL數據庫的設計思想只是提取出關系型數據庫的索引機制,并加了上分布式存儲,把SQL體系中那些對“某些特殊問題”而言并不需要的東西統統刪去,由此實現了更優秀的效率、擴展性與靈活性。
因此,我們可以明顯地看到,在實踐中,有很多問題(特別是流行的大數據問題),關系數據庫中的許多設計并不需要,這才是NoSQL發展壯大的根本立足點。
關系與協作
通過前面的分析,我們不難得出這樣的結論:大數據技術與數據庫一體機應該是相輔相成,并非互相替代的。它們針對不同的應用場景設計,并相互補充與合作。具體來說,大數據技術可以實現:
■處理企業內海量的、模型簡單、類型多樣的非結構化與半結構化數據(例如社會化數據、各種日志甚至圖片、視頻等),其處理結果可以被直接使用;
■以上處理結果也同時可以被當成是新的輸入存儲到企業級數據倉庫中,這時大數據機相當于是面向大數據源的、新的ETL(提取-轉換-加載)手段;
■面向海量數據的、不太適合SQL的存儲或計算。
而數據庫一體機則應該還是作為企業數據倉庫的主流技術,至少在很長一段時間內應該是這樣。它負責存儲與計算最主要的、有重大價值的企業關鍵業務數據。
現存的誤區
有些人認為,雖然大數據技術的原始開源狀態還不適合充當企業級數據倉庫主平臺的要求,但經過開發、補充,應該是可以的。其實這個觀點沒有錯。但實際上,對開源的大數據技術進行補充開發,所要補充的正是大數據技術在原始設計上就去除了的、那些本屬于關系型數據庫體系的東西。
如果進行這樣的補充開發,企業不僅會面臨龐大的、難于估計的開發工作量,同時也難以像專業數據庫廠商那樣實現這些工作的理論化、產品化與體系化。雖然從純技術的角度上講,開發什么都有可能。但是如果企業真的準備這樣做,是要開發另一個商業化的關系數據庫嗎?很明顯,這違背了大數據技術的設計初衷。