CGFT《大數(shù)據(jù)技術(shù)原理與應(yīng)用》中的數(shù)據(jù)模型的相關(guān)概念。HBase實(shí)際上就是一個(gè)稀疏、多維、持久化存儲(chǔ)的映射表,它采用行鍵(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和時(shí)間截(Timestamp)進(jìn)行索引,每個(gè)值都未經(jīng)解釋的字節(jié)數(shù)組byte[]。下面具體介紹HBase數(shù)據(jù)模型的相關(guān)概念。
1.表
HBase采用表來(lái)組織數(shù)據(jù),表由行和列組成,列劃分為若干個(gè)列族。
2.行
每個(gè)HBase表都由若干行組成,每個(gè)行由行鍵(Row Key)來(lái)標(biāo)識(shí)。訪問(wèn)表中的行只有3種方式:通過(guò)單個(gè)行鍵訪問(wèn);通過(guò)一個(gè)行鍵的區(qū)間來(lái)訪問(wèn);全表掃描。行鍵可以是任意字符串(*長(zhǎng)度是64KB,實(shí)際應(yīng)用中長(zhǎng)度一般為10~100字節(jié)),在HBase內(nèi)部,行鍵保存為字節(jié)數(shù)組存儲(chǔ)時(shí),數(shù)據(jù)按照行鍵的字典序排序存儲(chǔ)。在設(shè)計(jì)行鍵時(shí),要充分考慮這個(gè)特性,將經(jīng)常一起讀取的行存儲(chǔ)在一起。
3.列族
一個(gè)HBase表被分組成許多“列族”的集合,它是基本的訪問(wèn)控制單元。列族需要在表創(chuàng)建時(shí)就定義好,數(shù)量不能太多(HBase的一些缺陷使得列族數(shù)量只限于幾十個(gè)),而且不要頻繁修改存儲(chǔ)在一個(gè)列族當(dāng)中的所有數(shù)據(jù),通常都屬于同一種數(shù)據(jù)類(lèi)型,這通常意味著具有更高的壓縮率表中的每個(gè)列都?xì)w屬于某個(gè)列族,數(shù)據(jù)可以被存放到列族的某個(gè)列下面,但是,在把數(shù)據(jù)存放到這個(gè)列族的某個(gè)列下面之前,必須首先創(chuàng)建這個(gè)列族。
在創(chuàng)建完成一個(gè)列族以后,就可以使用同一個(gè)列族當(dāng)中的列。列名都以列族作為前級(jí)。
例如,courses:history和courses:math這兩個(gè)列都屬于courses這個(gè)列族。在HBase中,訪問(wèn)控制、磁盤(pán)和內(nèi)存的使用統(tǒng)計(jì)都是在列族層面進(jìn)行的。實(shí)際應(yīng)用中,我們可以借助列族上的控制權(quán)限幫助實(shí)現(xiàn)特定的目的,比如,我們可以允許一些應(yīng)用能夠向表中添加新的數(shù)據(jù),而另一些應(yīng)用則只允許瀏覽數(shù)據(jù)。HBase列族還可以被配置成支持不同類(lèi)型的訪問(wèn)模式,比如,一個(gè)列族也可以被設(shè)置成放人內(nèi)存當(dāng)中,以消耗內(nèi)存為代價(jià),從而換取更好的響應(yīng)性能。
4.列限定符
列族里的數(shù)據(jù)通過(guò)列限定符(或列)來(lái)定位。列限定符不用事先定義,也不需要在不同行之間保持一致。列限定符沒(méi)有數(shù)據(jù)類(lèi)型,總被視為字節(jié)數(shù)組byte[]。
5.單元格
在HBase表中,通過(guò)行、列族和列限定符確定一個(gè)“單元格”(cell)。單元格中存儲(chǔ)的數(shù)據(jù)沒(méi)有數(shù)據(jù)類(lèi)型,總被視為字節(jié)數(shù)組byte[]。每個(gè)單元格中可以保存一個(gè)數(shù)據(jù)的多個(gè)版本,每個(gè)版本對(duì)應(yīng)一個(gè)不同的時(shí)間藏。
6.時(shí)間截
每個(gè)單元格都保存著同一份數(shù)據(jù)的多個(gè)版本,這些版本采用時(shí)間截進(jìn)行索引。每次對(duì)一個(gè)單元格執(zhí)行操作(新建、修改、刪除)時(shí)、HBase都會(huì)隱式地自動(dòng)生成并存儲(chǔ)一個(gè)時(shí)間藏。時(shí)間截一般是64位整型,可以由用戶(hù)自己賦值(自己生成*時(shí)間裁可以避免應(yīng)用程序中出現(xiàn)數(shù)據(jù)版本沖突),也可以由HBase在數(shù)據(jù)寫(xiě)入時(shí)自動(dòng)賦值。一個(gè)單元格的不同版本是根據(jù)時(shí)間藏降序的順序進(jìn)行存儲(chǔ)的,這樣,*的版本可以被*讀取。