CGFT《大數(shù)據(jù)技術(shù)原理與應(yīng)用》中的數(shù)據(jù)模型的相關(guān)概念?

CGFT《大數(shù)據(jù)技術(shù)原理與應(yīng)用》中的數(shù)據(jù)模型的相關(guān)概念。HBase實際上就是一個稀疏、多維、持久化存儲的映射表,它采用行鍵(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和時間截(Timestamp)進(jìn)行索引,每個值都未經(jīng)解釋的字節(jié)數(shù)組byte[]。下面具體介紹HBase數(shù)據(jù)模型的相關(guān)概念。

1.表

HBase采用表來組織數(shù)據(jù),表由行和列組成,列劃分為若干個列族。

2.行

每個HBase表都由若干行組成,每個行由行鍵(Row Key)來標(biāo)識。訪問表中的行只有3種方式:通過單個行鍵訪問;通過一個行鍵的區(qū)間來訪問;全表掃描。行鍵可以是任意字符串(*長度是64KB,實際應(yīng)用中長度一般為10~100字節(jié)),在HBase內(nèi)部,行鍵保存為字節(jié)數(shù)組存儲時,數(shù)據(jù)按照行鍵的字典序排序存儲。在設(shè)計行鍵時,要充分考慮這個特性,將經(jīng)常一起讀取的行存儲在一起。

CGFT

3.列族

一個HBase表被分組成許多“列族”的集合,它是基本的訪問控制單元。列族需要在表創(chuàng)建時就定義好,數(shù)量不能太多(HBase的一些缺陷使得列族數(shù)量只限于幾十個),而且不要頻繁修改存儲在一個列族當(dāng)中的所有數(shù)據(jù),通常都屬于同一種數(shù)據(jù)類型,這通常意味著具有更高的壓縮率表中的每個列都?xì)w屬于某個列族,數(shù)據(jù)可以被存放到列族的某個列下面,但是,在把數(shù)據(jù)存放到這個列族的某個列下面之前,必須首先創(chuàng)建這個列族。

在創(chuàng)建完成一個列族以后,就可以使用同一個列族當(dāng)中的列。列名都以列族作為前級。

例如,courses:history和courses:math這兩個列都屬于courses這個列族。在HBase中,訪問控制、磁盤和內(nèi)存的使用統(tǒng)計都是在列族層面進(jìn)行的。實際應(yīng)用中,我們可以借助列族上的控制權(quán)限幫助實現(xiàn)特定的目的,比如,我們可以允許一些應(yīng)用能夠向表中添加新的數(shù)據(jù),而另一些應(yīng)用則只允許瀏覽數(shù)據(jù)。HBase列族還可以被配置成支持不同類型的訪問模式,比如,一個列族也可以被設(shè)置成放人內(nèi)存當(dāng)中,以消耗內(nèi)存為代價,從而換取更好的響應(yīng)性能。

4.列限定符

列族里的數(shù)據(jù)通過列限定符(或列)來定位。列限定符不用事先定義,也不需要在不同行之間保持一致。列限定符沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。

5.單元格

在HBase表中,通過行、列族和列限定符確定一個“單元格”(cell)。單元格中存儲的數(shù)據(jù)沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。每個單元格中可以保存一個數(shù)據(jù)的多個版本,每個版本對應(yīng)一個不同的時間藏。

6.時間截

每個單元格都保存著同一份數(shù)據(jù)的多個版本,這些版本采用時間截進(jìn)行索引。每次對一個單元格執(zhí)行操作(新建、修改、刪除)時、HBase都會隱式地自動生成并存儲一個時間藏。時間截一般是64位整型,可以由用戶自己賦值(自己生成*時間裁可以避免應(yīng)用程序中出現(xiàn)數(shù)據(jù)版本沖突),也可以由HBase在數(shù)據(jù)寫入時自動賦值。一個單元格的不同版本是根據(jù)時間藏降序的順序進(jìn)行存儲的,這樣,*的版本可以被*讀取。