HBase(02) HBase資料模型

2021-08-28 16:29:55 字數 1968 閱讀 2470

hbase以表的形式儲存資料。表有行和列組成。列劃分為若干個列族(column family)。

hbase表由多行組成。

hbase中的一行由乙個行鍵和乙個或多個具有與之關聯的值的列組成。

行儲存時,行按字母順序排序。因此,行鍵的設計非常重要。目標是以相關行彼此靠近的方式儲存資料。常見的行鍵模式是**域。如果您的行鍵是域,則應該反向儲存它們(org.apache.www,org.apache.mail,org.apache.jira)。這樣,所有apache域都在表中彼此靠近,而不是基於子域的第乙個字母展開。

row key

與nosql資料庫們一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式:

1 通過單個row key訪問 (select * from t1 where id=1)

2 通過row key的range (select * from t1 where id<10 and id >1)

3 全表掃瞄 (select * from t1 )

row key行鍵 (row key)可以是任意字串(最大長度是 64kb,實際應用中長度一般為 10-100bytes),在hbase內部,row key儲存為位元組陣列。

hbase會對錶中的資料按照rowkey排序(字典順序)

儲存時,資料按照row key的字典序(byte order)排序儲存。設計key時,要充分排序儲存這個特性,將經常一起讀取的行儲存放到一起。(位置相關性)

注意:字典序對int排序的結果是

1,10,1001,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作右填充。

行的一次讀寫是原子操作 (不論一次讀寫多少列)。這個設計決策能夠使使用者很容易的理解程式在對同乙個行進行併發更新操作時的行為。

hbase中的列由列族和列限定符組成,這些列由:(冒號)字元分隔。

列族通常出於效能原因,物理地分配一組列及其值。

每個列族都有一組儲存屬性,例如是否應將其值快取在記憶體中,如何壓縮其資料或對其行鍵進行編碼等。表中的每一行都具有相同的列族,但給定的行可能不會在給定的列族中儲存任何內容。

hbase表中的每個列,都歸屬與某個列族。列族是表的schema的一部分(而列不是),必須在使用表之前定義。

列名都以列族作為字首。例如courses:history , courses:math 都屬於 courses 這個列族。

訪問控制、磁碟和記憶體的使用統計都是在列族層面進行的。

列族越多,在取一行資料時所要參與io、搜尋的檔案就越多,所以,如果沒有必要,不要設定太多的列族。一般設定2-3個比較合理。

列限定符

列限定符將新增到列族中,以便為給定的資料提供索引。給定列族content,列限定符可能是content:html,而另乙個可能是content:pdf。雖然列族在建立表時是固定的,但列限定符是可變的,並且行之間可能有很大差異。

hbase中通過row和columns確定的為乙個存貯單元稱為cell。

它是由 唯一確定的單元。

cell中的資料是沒有型別的,全部是位元組碼形式存貯。

時間戳與每個值一起寫入,並且是給定版本的值的識別符號。

預設情況下,timestamp表示寫入資料時regionserver上的時間,但是當您將資料放入單元格時,可以指定不同的時間戳值。

每個 cell都儲存著同乙份資料的多個版本。版本通過時間戳來索引。時間戳的型別是 64位整型。時間戳可以由hbase(在資料寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程式要避免資料版本衝突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的資料按照時間倒序排序,即最新的資料排在最前面。

為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種資料版本**方式:

——儲存資料的最後n個版本

——儲存最近一段時間內的版本(設定資料的生命週期ttl)。

HBase二 HBase資料模型

hbase是基於google bigtable模型開發的,典型的key value系統 1.hbase schema可以有多個table 2.每個table可由多個column family組成。3.hbase列族中的列可以隨意定義,因為hbase是無模式的。1.byte array 2.表中每條記...

HBase基礎 HBase的資料模型

命名空間,類似於關係型資料庫的 databbase 概念,每個命名空間下有多個表。hbase 有兩個自帶的命名空間,分別是 hbase 和 default,hbase 中存放的是 hbase 內建的表,default 表是使用者預設使用的命名空間。類似於關係型資料庫的表概念。不同的是,hbase 定...

hbase資料讀取優化 HBase效能優化 總結篇

1 hbase.hregion.max.filesize應該設定多少合適 預設值 256m 說明 maximum hstorefile size.if any one of a column families hstorefiles has?grown to exceed this value,th...