這篇文章主要講解了“HBase概念有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“HBase概念有哪些”吧!
創(chuàng)新互聯(lián)主營西盟網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),西盟h5重慶小程序開發(fā)公司搭建,西盟網(wǎng)站營銷推廣歡迎西盟等地區(qū)企業(yè)咨詢
HBase概述
HBase是一種分布式、可擴(kuò)展、支持海量數(shù)據(jù)存儲的NoSql數(shù)據(jù)庫。
1)數(shù)據(jù)量越大,HBase的查詢優(yōu)勢越明顯。數(shù)據(jù)量小的話,HBase不劃算,因?yàn)閱?dòng)的東西過多,整體內(nèi)存消耗大,正常過程中要不斷的切分和合并,一直都在放生。但是當(dāng)數(shù)據(jù)量非常大的時(shí)候,上幾條數(shù)據(jù)的秒級查詢是可以做到的。
2)HDFS不支持隨機(jī)寫操作,Hbase是基于HDFS的,HBase是數(shù)據(jù)庫所以必然需要增刪改查的隨機(jī)讀寫操作。言下之意是,HBase支持在HDFS上的隨機(jī)寫操作。
HBase數(shù)據(jù)模型
邏輯上,HBase的數(shù)據(jù)模型同關(guān)系型數(shù)據(jù)庫很類似,數(shù)據(jù)存儲在一張表中,有行和列,但從底層物理存儲結(jié)構(gòu)(K-V)來看,HBase更像是一個(gè)multi-dimensional map。
HBase邏輯模型
HBase底層存儲是K-V的形式,這個(gè)K就是Row key,是系統(tǒng)自帶的,不是我們想創(chuàng)建或者不想創(chuàng)建所能夠左右的。
如果要插入數(shù)據(jù),必須指定Row key。
在一張表里面,Row key必須是唯一的。(這一點(diǎn)有點(diǎn)類似于關(guān)系型數(shù)據(jù)庫的主鍵。)如果不唯一,你插入等同于覆蓋。
每一個(gè)列隸屬于不同的列簇(也有人翻譯成列族),不同的列簇存儲在不同的文件夾里面。也就是說一個(gè)表會分成很多個(gè)文件夾,這個(gè)文件夾怎么分的,就看列簇是什么樣的。
一個(gè)列簇可以只有一個(gè)列。
列可以動(dòng)態(tài)增加。
Row key是有序的,但這個(gè)順序是“字典序”(按位比字符)。比如上圖的row_key11在row_key2之前。
在上圖中既有垂直切割,也有水平切割。垂直切分是按照列簇,水平切分是展昭region。region是一張表的切片,而且是水平切片。region的劃分方式是按照數(shù)據(jù)量來的。一旦切分了region,不同的region也存儲在不同的文件夾了。
HBase的實(shí)現(xiàn)查詢之前會記錄row?到row??是存儲在region0、1、2等等里面。真正要查詢的時(shí)候,不需要掃描所有的row。這也就是關(guān)系型數(shù)據(jù)庫里面高表寬表存儲策略的問題的策略。
實(shí)際的數(shù)據(jù)都是存儲在hdfs上,而這些用于查詢的元信息可以存在內(nèi)存中。
在數(shù)據(jù)中,沒必要每一行數(shù)據(jù)都存儲一個(gè)列名。
隨后,將列簇和region切片分過后的每一塊實(shí)際存儲的塊,如上圖黃色框出的區(qū)域叫做一個(gè)一個(gè)store。
*網(wǎng)上一種說法,在實(shí)際使用中,實(shí)際存儲的時(shí)候一個(gè)列簇會生成storefile。
HBase的物理結(jié)構(gòu)
我們將上圖中的黃色的那一個(gè)區(qū)域region,單獨(dú)拿出來看看HBase的物理存儲結(jié)構(gòu),每一個(gè)row的每一個(gè)列數(shù)據(jù),在實(shí)際存儲時(shí)都存成下面那一行的形式。
這個(gè)“行”包含:Row key行鍵,Column Family列簇, Column Qualifier列名, 時(shí)間戳TimeStamp, Type操作類型,Value值。
這里一個(gè)非常重要的一項(xiàng)是時(shí)間戳。它是后面要說的很多東西,比如HBase優(yōu)化,都要依賴的東西。在實(shí)際生產(chǎn)中,記得要將不同機(jī)器的系統(tǒng)時(shí)間同步,否則會遇到各種詭異的問題,比如put之后不成功,都是時(shí)間戳惹的禍。
上圖中,可以看到,phone這個(gè)字段的只有兩份,這時(shí)候取數(shù)據(jù),要取時(shí)間戳最大的那一個(gè)。不同的版本version的數(shù)據(jù)根據(jù)timestamp進(jìn)行區(qū)分。
那么刪除數(shù)據(jù)呢?那么Type那一項(xiàng)就是DELETE。
所以,HBase上的增刪改等修改操作,都不是當(dāng)時(shí)就做的修改;而是像上面那樣把每一個(gè)操作記錄下來,再根據(jù)時(shí)間戳先后得到應(yīng)該的結(jié)果。
數(shù)據(jù)模型概念
1)Namespace
明明空間,類似于慣性行數(shù)據(jù)庫的database的概念,每個(gè)明明空間下有多個(gè)表。HBase有兩個(gè)自帶的明明空間,分別是habse和default,HBase存放的是HBase內(nèi)置的表,存放hbase元數(shù)據(jù);default表是用戶默認(rèn)使用的命名空間。
對于一個(gè)表,如果它是某個(gè)命名空間ns1下的表table1,那么寫作ns1.table1;如果table1是存在default命名空間下的,就寫作table1。
2)Region(切片)
類似于關(guān)系型數(shù)據(jù)庫的概念。不同的是,HBase定義表時(shí)只需要聲明列簇即可不需要生命具體的列。這意味著,向HBase寫入數(shù)據(jù)時(shí),字段可以動(dòng)態(tài)按需指定。因此,和關(guān)系型數(shù)據(jù)庫相比,HBase能夠輕松應(yīng)對字段變更的場景。
剛開始的時(shí)候,數(shù)據(jù)只有一點(diǎn)點(diǎn),沒必要切;后面需要切,而且可以手動(dòng)切。
3)Row
HBase表中的航航數(shù)據(jù)都是由一個(gè)RowKey和多個(gè)Column列組成,數(shù)據(jù)按照RowKey的字典順序存儲的,并且查詢數(shù)據(jù)時(shí)只能根據(jù)RowKey進(jìn)行檢索,所以RowKey的設(shè)計(jì)十分重要。
因?yàn)镽owKey是字典有序的,所以HBase既可以做全表掃描,又可以做范圍掃描。(? 4)Column列 HBase中的每個(gè)列都是由Column Family列簇和Column Qualifier列限定符進(jìn)行限定的,例如info:name,info:age。建表時(shí),只需要指明列簇,而列限定符不需要預(yù)先定義。 也就是說,建表的時(shí)候只要聲明到列簇就可以了,沒必要聲明列。 這里雖然叫“列”,但是更像是HBase“表”里面的數(shù)據(jù)。定義表的時(shí)候,列不指定;存取數(shù)據(jù)的時(shí)候,用的列和值 name:HappyBKs 5) Time Stamp 用于標(biāo)識數(shù)據(jù)的不同版本(version),每條數(shù)據(jù)寫入時(shí),如果不指定時(shí)間戳,系統(tǒng)會自動(dòng)為其加上該字段,其值為寫入HBase的時(shí)間。(timestamp不同,但是rowkey,列簇,列名都要一樣) 6)Cell 由(rowkey,column Family:column Qualifier, time stamp)唯一確定的單元。 cell中的數(shù)據(jù)是沒有類型的,全部字節(jié)碼形式存儲。 感謝各位的閱讀,以上就是“HBase概念有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對HBase概念有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
分享標(biāo)題:HBase概念有哪些
網(wǎng)站地址:http://weahome.cn/article/ggedoi.html