【轉(zhuǎn)載】mysql和hbase應(yīng)用場景對比

當(dāng)我們對于數(shù)據(jù)結(jié)構(gòu)字段不夠確定或雜亂無章很難按一個(gè)概念去進(jìn)行抽取的數(shù)據(jù)適合用使用什么數(shù)據(jù)庫哪轿?答案是什么窑业,如果我們使用的傳統(tǒng)數(shù)據(jù)庫愿汰,肯定留有多余的字段,10個(gè)不行乐纸,20個(gè)衬廷,但是這個(gè)嚴(yán)重影響了質(zhì)量。并且如果面對大數(shù)據(jù)庫汽绢,pt級別的數(shù)據(jù)吗跋,這種浪費(fèi)更是嚴(yán)重的,那么我們該使用是什么數(shù)據(jù)庫宁昭?hbase數(shù)個(gè)不錯(cuò)的選擇跌宛,那么我們對于hbase還存在下列問題:
1.Column Family代表什么?
2.HBase通過row和column確定一份數(shù)據(jù)积仗,這份數(shù)據(jù)的值可能有多個(gè)版本疆拘,為什么會(huì)存在多個(gè)版本?
3.查詢的時(shí)候會(huì)顯示那個(gè)版本寂曹?
4.它們的存儲(chǔ)類型是什么哎迄?
5.tableName是什么類型?
6.RowKey 和 ColumnName是什么類型隆圆?
7.Timestamp 是什么類型漱挚?

8.value 是什么類型?

帶著以上幾個(gè)問題去讀下面內(nèi)容:

引言

團(tuán)隊(duì)中使用HBase的項(xiàng)目多了起來渺氧,對于業(yè)務(wù)人員而言旨涝,通常并不需要從頭搭建、維護(hù)一套HBase的集群環(huán)境阶女,對于其架構(gòu)細(xì)節(jié)也不一定要深刻理解(交由HBase集群維護(hù)團(tuán)隊(duì)負(fù)責(zé))颊糜,迫切需要的是快速理解基本技術(shù)來解決業(yè)務(wù)問題。最近在XX項(xiàng)目輪崗過程中秃踩,嘗試著從業(yè)務(wù)人員視角去看HBase衬鱼,將一些過程記錄下來,期望對快速了解HBase憔杨、掌握相關(guān)技術(shù)來開展工作的業(yè)務(wù)人員有點(diǎn)幫助鸟赫。我覺得作為一個(gè)初次接觸HBase的業(yè)務(wù)開發(fā)測試人員,他需要迫切掌握的至少包含以下幾點(diǎn):
深入理解HTable消别,掌握如何結(jié)合業(yè)務(wù)設(shè)計(jì)高性能的HTable

掌握與HBase的交互抛蚤,反正是離不開數(shù)據(jù)的增刪改查,通過HBase Shell命令及Java Api都是需要的

掌握如何用MapReduce分析HBase里的數(shù)據(jù)寻狂,HBase里的數(shù)據(jù)總要分析的岁经,用MapReduce是其中一種方式

掌握如何測試HBase MapReduce,總不能光寫不管正確性吧蛇券,debug是需要的吧缀壤,看看如何在本機(jī)單測debug吧

本系列將圍繞以上幾點(diǎn)展開樊拓,篇幅較長,如果是HBase初學(xué)者建議邊讀邊練塘慕,對于HBase比較熟練的筋夏,可以選讀下,比如關(guān)注下HBase的MapReduce及其測試方法图呢。

從一個(gè)示例說起

傳統(tǒng)的關(guān)系型數(shù)據(jù)庫想必大家都不陌生条篷,我們將以一個(gè)簡單的例子來說明使用RDBMS和HBase各自的解決方式及優(yōu)缺點(diǎn)。
以博文為例蛤织,RDBMS的表設(shè)計(jì)如下:

image

為了方便理解赴叹,我們以一些數(shù)據(jù)示例下


image

上面的例子,我們用HBase可以按以下方式設(shè)計(jì)


image

同樣為了方便理解瞳筏,我們以一些數(shù)據(jù)示例下稚瘾,同時(shí)用紅色標(biāo)出了一些關(guān)鍵概念,后面會(huì)解釋


image

HTable一些基本概念

Row key

行主鍵姚炕, HBase不支持條件查詢和Order by等查詢摊欠,讀取記錄只能按Row key(及其range)或全表掃描,因此Row key需要根據(jù)業(yè)務(wù)來設(shè)計(jì)以利用其存儲(chǔ)排序特性(Table按Row key字典序排序如1,10,100,11,2)提高性能柱宦。

Column Family(列族)

在表創(chuàng)建時(shí)聲明些椒,每個(gè)Column Family為一個(gè)存儲(chǔ)單元。在上例中設(shè)計(jì)了一個(gè)HBase表blog掸刊,該表有兩個(gè)列族:article和author免糕。
Column(列)

HBase的每個(gè)列都屬于一個(gè)列族,以列族名為前綴忧侧,如列article:title和article:content屬于article列族石窑,author:name和author:nickname屬于author列族。
Column不用創(chuàng)建表時(shí)定義即可以動(dòng)態(tài)新增蚓炬,同一Column Family的Columns會(huì)群聚在一個(gè)存儲(chǔ)單元上松逊,并依Column key排序,因此設(shè)計(jì)時(shí)應(yīng)將具有相同I/O特性的Column設(shè)計(jì)在一個(gè)Column Family上以提高性能肯夏。同時(shí)這里需要注意的是:這個(gè)列是可以增加和刪除的经宏,這和我們的傳統(tǒng)數(shù)據(jù)庫很大的區(qū)別。所以他適合非結(jié)構(gòu)化數(shù)據(jù)驯击。 Timestamp

HBase通過row和column確定一份數(shù)據(jù)烁兰,這份數(shù)據(jù)的值可能有多個(gè)版本,不同版本的值按照時(shí)間倒序排序徊都,即最新的數(shù)據(jù)排在最前面沪斟,查詢時(shí)默認(rèn)返回最新版本。如上例中row key=1的author:nickname值有兩個(gè)版本暇矫,分別為1317180070811對應(yīng)的“一葉渡江”和1317180718830對應(yīng)的“yedu”(對應(yīng)到實(shí)際業(yè)務(wù)可以理解為在某時(shí)刻修改了nickname為yedu币喧,但舊值仍然存在)轨域。Timestamp默認(rèn)為系統(tǒng)當(dāng)前時(shí)間(精確到毫秒),也可以在寫入數(shù)據(jù)時(shí)指定該值杀餐。
Value

每個(gè)值通過4個(gè)鍵唯一索引,tableName+RowKey+ColumnKey+Timestamp=>value朱巨,例如上例中{tableName=’blog’,RowKey=’1’,ColumnName=’author:nickname’,Timestamp=’ 1317180718830’}索引到的唯一值是“yedu”史翘。

存儲(chǔ)類型

TableName 是字符串
RowKey 和 ColumnName 是二進(jìn)制值(Java 類型 byte[])
Timestamp 是一個(gè) 64 位整數(shù)(Java 類型 long)
value 是一個(gè)字節(jié)數(shù)組(Java類型 byte[])。

存儲(chǔ)結(jié)構(gòu)

可以簡單的將HTable的存儲(chǔ)結(jié)構(gòu)理解為


image

即HTable按Row key自動(dòng)排序冀续,每個(gè)Row包含任意數(shù)量個(gè)Columns琼讽,Columns之間按Column key自動(dòng)排序,每個(gè)Column包含任意數(shù)量個(gè)Values洪唐。理解該存儲(chǔ)結(jié)構(gòu)將有助于查詢結(jié)果的迭代钻蹬。

話說什么情況需要HBase

半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)

對于數(shù)據(jù)結(jié)構(gòu)字段不夠確定或雜亂無章很難按一個(gè)概念去進(jìn)行抽取的數(shù)據(jù)適合用HBase。以上面的例子為例凭需,當(dāng)業(yè)務(wù)發(fā)展需要存儲(chǔ)author的email问欠,phone,address信息時(shí)RDBMS需要停機(jī)維護(hù)粒蜈,而HBase支持動(dòng)態(tài)增加.

記錄非常稀疏

RDBMS的行有多少列是固定的顺献,為null的列浪費(fèi)了存儲(chǔ)空間。而如上文提到的枯怖,HBase為null的Column不會(huì)被存儲(chǔ)注整,這樣既節(jié)省了空間又提高了讀性能。

多版本數(shù)據(jù)

如上文提到的根據(jù)Row key和Column key定位到的Value可以有任意數(shù)量的版本值度硝,因此對于需要存儲(chǔ)變動(dòng)歷史記錄的數(shù)據(jù)肿轨,用HBase就非常方便了。比如上例中的author的Address是會(huì)變動(dòng)的蕊程,業(yè)務(wù)上一般只需要最新的值椒袍,但有時(shí)可能需要查詢到歷史值。

超大數(shù)據(jù)量

當(dāng)數(shù)據(jù)量越來越大存捺,RDBMS數(shù)據(jù)庫撐不住了槐沼,就出現(xiàn)了讀寫分離策略,通過一個(gè)Master專門負(fù)責(zé)寫操作捌治,多個(gè)Slave負(fù)責(zé)讀操作岗钩,服務(wù)器成本倍增。隨著壓力增加肖油,Master撐不住了兼吓,這時(shí)就要分庫了,把關(guān)聯(lián)不大的數(shù)據(jù)分開部署森枪,一些join查詢不能用了视搏,需要借助中間層审孽。隨著數(shù)據(jù)量的進(jìn)一步增加,一個(gè)表的記錄越來越大浑娜,查詢就變得很慢佑力,于是又得搞分表,比如按ID取模分成多個(gè)表以減少單個(gè)表的記錄數(shù)筋遭。經(jīng)歷過這些事的人都知道過程是多么的折騰打颤。采用HBase就簡單了,只需要加機(jī)器即可漓滔,HBase會(huì)自動(dòng)水平切分?jǐn)U展编饺,跟Hadoop的無縫集成保障了其數(shù)據(jù)可靠性(HDFS)和海量數(shù)據(jù)分析的高性能(MapReduce)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末响驴,一起剝皮案震驚了整個(gè)濱河市透且,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豁鲤,老刑警劉巖秽誊,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畅形,居然都是意外死亡养距,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門日熬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來棍厌,“玉大人,你說我怎么就攤上這事竖席≡派矗” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵毕荐,是天一觀的道長束析。 經(jīng)常有香客問我,道長憎亚,這世上最難降的妖魔是什么员寇? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮第美,結(jié)果婚禮上蝶锋,老公的妹妹穿的比我還像新娘。我一直安慰自己什往,他們只是感情好扳缕,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般躯舔。 火紅的嫁衣襯著肌膚如雪驴剔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天粥庄,我揣著相機(jī)與錄音丧失,去河邊找鬼。 笑死飒赃,一個(gè)胖子當(dāng)著我的面吹牛利花,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播载佳,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼臀栈!你這毒婦竟也來了蔫慧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤权薯,失蹤者是張志新(化名)和其女友劉穎姑躲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盟蚣,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黍析,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屎开。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阐枣。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奄抽,靈堂內(nèi)的尸體忽然破棺而出蔼两,到底是詐尸還是另有隱情,我是刑警寧澤逞度,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布额划,位于F島的核電站,受9級特大地震影響档泽,放射性物質(zhì)發(fā)生泄漏俊戳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一馆匿、第九天 我趴在偏房一處隱蔽的房頂上張望抑胎。 院中可真熱鬧,春花似錦甜熔、人聲如沸圆恤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盆昙。三九已至羽历,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淡喜,已是汗流浹背秕磷。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炼团,地道東北人澎嚣。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像瘟芝,于是被迫代替她去往敵國和親易桃。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容