淺析HBase:為高效的可擴展大規(guī)模分布式系統(tǒng)而生

什么是HBase

Apache HBase是運行在Hadoop集群上的數(shù)據(jù)庫梭纹。為了實現(xiàn)更好的課伸展性(scalability)变抽,HBase放松了對ACID(數(shù)據(jù)庫的原子性,一致性绍载,隔離性和持久性)击儡。因此HBase并不是一個傳統(tǒng)的關系型數(shù)據(jù)庫。另外阳谍,與關系型數(shù)據(jù)庫不同的是,存儲在HBase中的數(shù)據(jù)也不需要遵守某種嚴格的集合格式鸽疾,這使得HBase是用來存儲結構不嚴格的數(shù)據(jù)的理想工具训貌。

HBase在大數(shù)據(jù)應用的架構中應用非常廣泛递沪。但是基于其與關系型數(shù)據(jù)庫迥異的設計模式,實現(xiàn)這些應用也與基于關系型數(shù)據(jù)庫來實現(xiàn)非常不同款慨。下文將會對比HBase和關系型數(shù)據(jù)庫檩奠,并淺析HBase的特性。

關系型數(shù)據(jù)庫與HBase的對比

首先我們要明白在已經(jīng)存在關系型數(shù)據(jù)庫的情況下圣猎,為什么產(chǎn)生了所謂的NoSQL/HBase這樣的費關系型數(shù)據(jù)庫乞而?要解答這個問題,我們需要先了解一下關系型數(shù)據(jù)庫的優(yōu)勢和缺點欠啤。

  • 關系型數(shù)據(jù)庫提供了標準的數(shù)據(jù)持久性模型
  • SQL語言是事實上的數(shù)據(jù)操作標準語言
  • 關系型數(shù)據(jù)庫內置了并發(fā)數(shù)據(jù)操作的管理機制
  • 關系型數(shù)據(jù)庫提供全面的數(shù)據(jù)操作工具
RDBMS table

關系型數(shù)據(jù)庫是長期以來數(shù)據(jù)存儲的標準工具洁段,那么我們?yōu)槭裁催€在尋找新的數(shù)據(jù)存儲方法呢?原因是現(xiàn)在需要存儲的數(shù)據(jù)越來越多祠丝,工業(yè)界對數(shù)據(jù)存儲工具可伸展性的要求也越來越高写半。一種簡單直接的擴展方法是垂直擴展,也就是采用更大更高效的服務器來存儲璃岳。但是這種方法成本很高悔捶,且可擴展性存在一個上限(單臺服務器的性能是有限的)。

Vertical scale

關系型數(shù)據(jù)庫的局限性

除垂直擴展之外犁柜,我們也可以采用水平擴展的方法蛇损。也就是用服務器集群來滿足要求坛怪。用來集群的服務器可以是性能普通的服務器袜匿。這樣就可以大大降低運營成本。如果我們要采用水平擴展的方法來擴展關系型數(shù)據(jù)庫祭务,關系型數(shù)據(jù)庫中的數(shù)據(jù)勢必要根據(jù)row key分布存儲怪嫌,也就意味著某些row key對應的行存儲在某一臺服務器上,另一些row key對應的行存儲在另一臺服務器上拌倍。然而,要分割一個關系型數(shù)據(jù)庫是非常復雜的数初,并且關系型數(shù)據(jù)庫不具備自動分布式存儲的功能梗顺。不僅如此,分布存儲關系型數(shù)據(jù)庫仑鸥,我們將失去總體上的數(shù)據(jù)庫查詢功能及事務(transaction)的一致性矗漾。總而言之泵琳,關系型數(shù)據(jù)庫是為在單臺服務器上運行而設計的誊役。

Horizontal scale

除此之外蛔垢,關系型數(shù)據(jù)庫中數(shù)據(jù)庫規(guī)范化(database normalization)的理念消除了數(shù)據(jù)的重復存儲,使得數(shù)據(jù)存儲更高效巩梢。在查詢時為了將數(shù)據(jù)重新組織起來艺玲,就需要需要Join操作。這也進一步使得關系型數(shù)據(jù)庫的分布式存儲更為困難忌警。

HBase的高效秒梳,分布式,可擴展性的設計理念

由于HBase在設計上不支持關系Join這樣的概念朋譬,需要一起查詢的數(shù)據(jù)就被存在一起兴垦。因此也就避免了關系型數(shù)據(jù)庫的一些局限性。下圖表現(xiàn)了HBase和關系型數(shù)據(jù)庫在數(shù)據(jù)存儲模型上的不同犀忱。

Relational DB vs HBase

由于HBase將所有需要一起查詢到數(shù)據(jù)存儲在一起這一特性阴汇,HBase集群就自然能夠根據(jù)key來組織數(shù)據(jù)。在水平分割的時候拐纱,key值的范圍就可以被用來分割數(shù)據(jù)哥倔。每一個服務器存儲全部數(shù)據(jù)的一個子集。同時分布式的數(shù)據(jù)還可以被同時訪問东抹。這大大增強了HBase的可擴展性沃测。HBase實際上是Google Big Table的一個實現(xiàn)。Big Table是Google提出的一個用來存儲大規(guī)模數(shù)據(jù)的一個分布式系統(tǒng)馏谨。

HBase是基于Column family data store的理念設計的:每一行根據(jù)一個row key索引附迷。也就是我們用來查詢的主鍵喇伯。同時每一行中有若干column family。每一個column family中有若干相關的column管宵。如下圖所示攀甚。

HBase column family oriented database

HBase中的row key也是HBase分布式存儲數(shù)據(jù)的主要根據(jù)岗喉。在分布存儲數(shù)據(jù)的時候钱床,根據(jù)row key值的范圍,每一臺服務器存儲全部數(shù)據(jù)的一個子集事期。HBase提供基于行的原子性操作保證。也就是每一個row key對應的行為一個原子操作的單元绎橘。

Distributed HBase

HBase的數(shù)據(jù)模型

HBase中的數(shù)據(jù)根據(jù)row key分布唠倦。row key類似于關系型數(shù)據(jù)庫中的主鍵(primary key)。HBase中的數(shù)據(jù)記錄根據(jù)row key的值排序冈止。這是HBase數(shù)據(jù)存儲的一個重要原則候齿,也是HBase設計架構的一個重要部分慌盯。

Hbase data model--row key

HBase中數(shù)據(jù)表根據(jù)row key的值分割為不同的區(qū)域,每個區(qū)域包含一部分連續(xù)的行诗眨。這些區(qū)域被分配給集群中不同的稱為區(qū)域服務器的數(shù)據(jù)結點孕讳〕Р疲可擴展性就是通過將區(qū)域分配給集群中的不同服務器實現(xiàn)的。這一操作是自動進行的璃饱。也就是HBase如何根據(jù)水平擴展設計的荚恶。

Tables are split into regions = contiguous keys

下圖表示了column family是如何映射到存儲文件的。不同的Column family被存儲在不同的文件中食寡。這些文件可以被分別訪問廓潜。

Column families stored in separate files

數(shù)據(jù)存儲在HBase表格的cell中。cell中包含key和value以及一些其他的信息(如version, type等)移盆。其中key部分包括row key伤为,column family,column qualifier, timestamp剑鞍。并且對于每一個值爽醋,key部分都會與其一同被存儲。如下圖所示光戈。

cell key value

從邏輯上來看久妆,row似乎是以表格的形式存儲的跷睦。但事實上,row是以一些cell的集合的形式存儲的烂琴。其所對應的每一個cell都存儲了其所對應的上述所有key信息蜕乡。

下圖中上半部分是HBase的數(shù)據(jù)的邏輯布局,下半部分是文件的物理布局号醉。Column family被分別存儲于不同的文件中辛块。我們每設置一個值憨降,其對應的cell就會存儲所有的key信息(row key, column family, column qualifier, timestamp)该酗。

Logical data model vs physical data model

綜上所述士嚎,對于HBase中每一個cell的值悔叽,其完整的索引應當是Table::Row::Column family::Column::Timestamp --> Value。Hbase的表是稀疏的笨蚁。如果某一列沒有數(shù)據(jù)趟庄,則其不會被存儲。表中的cell有其對應的連續(xù)改變的version奋单。version默認參考timestamp猫十,但我們也可以自己定制。對于每一個Table::Row::Column family::Column --> Value贷笛,數(shù)據(jù)庫中可能存儲了多個不同version的值宙项。

sparse data with cell versions

Version系統(tǒng)是HBase自動采用的尤筐。從CRUD的角度來說,一個put操作既是插入(insert/create)拢驾,也是更新(Update)操作改基,每一個數(shù)據(jù)都會帶有其相應的version。Delete操作并不會立即在物理上刪除數(shù)據(jù)稠腊,而是會給數(shù)據(jù)加一個刪除標簽鸣哀。這個標簽會保證數(shù)據(jù)不會在查詢時被返回我衬。Get操作根據(jù)給定的參數(shù)返回特定version的數(shù)據(jù)饰恕。默認情況下最新版本的數(shù)據(jù)將會被返回井仰。保存在HBase中的同一個數(shù)據(jù)的不同version的數(shù)量也可以配置俱恶。這個數(shù)量是針對同一個column family而言的。默認情況下了罪,HBase會保存3個不同version的數(shù)據(jù)聪全。當數(shù)據(jù)不同的version數(shù)目超過這個數(shù)字時,最早version的數(shù)據(jù)將會被刪除吱七。

versioned data

原文鏈接:HBase and MapR-DB: Designed for Distribution, Scale, and Speed
All rights reserved to the original author of the article.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末踊餐,一起剝皮案震驚了整個濱河市吝岭,隨后出現(xiàn)的幾起案子吧寺,更是在濱河造成了極大的恐慌,老刑警劉巖幕帆,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件失乾,死亡現(xiàn)場離奇詭異纬乍,居然都是意外死亡,警方通過查閱死者的電腦和手機纽竣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聋袋,“玉大人语盈,你說我怎么就攤上這事缰泡〖” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵泼返,是天一觀的道長姨拥。 經(jīng)常有香客問我叫乌,道長,這世上最難降的妖魔是什么革屠? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任排宰,我火速辦了婚禮板甘,結果婚禮上,老公的妹妹穿的比我還像新娘麻诀。我一直安慰自己傲醉,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布呻引。 她就那樣靜靜地躺著吐咳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪童谒。 梳的紋絲不亂的頭發(fā)上饥伊,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天琅豆,我揣著相機與錄音,去河邊找鬼茫因。 笑死冻押,一個胖子當著我的面吹牛,可吹牛的內容都是我干的洛巢。 我是一名探鬼主播狼渊,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼狈邑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了糕伐?” 一聲冷哼從身側響起蘸嘶,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤训唱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赞庶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡澜薄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年肤京,在試婚紗的時候發(fā)現(xiàn)自己被綠了茅特。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温治。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡戒悠,死狀恐怖,靈堂內的尸體忽然破棺而出卤恳,到底是詐尸還是另有隱情寒矿,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站啊终,受9級特大地震影響蓝牲,放射性物質發(fā)生泄漏。R本人自食惡果不足惜例衍,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一佛玄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧般贼,春花似錦、人聲如沸具伍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽人芽。三九已至辟灰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顷链,已是汗流浹背蜜笤。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惕味,地道東北人楼誓。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像名挥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子禀倔,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容