HBase系列(一):HBase表结构及数据模型的理解
專欄:大數據核心原理與實踐
HBase適用場景
首先在搞HBase之前我們要對其建立感性認識,其適用場景如下:
- 并發、簡單、隨機查詢。
(注:HBase不太擅長復雜join查詢,但可以通過二級索引即全局索引的方式來優化性能,后續博文會進行講解) - 半結構化、非結構化數據存儲。
一般我們從數倉中離線統計分析海量數據,將得到的結果插入HBase中用于實時查詢。
HBase表結構
這里以一個公司員工表為案例來講解,此表中包含員工基本信息(員工姓名、年齡),員工詳細信息(工資、角色),以及時間戳。整體表結構如下:
如上,每一行有一個RowKey用于唯一地標識和定位行,各行數據按RowKey的字典序排列。其中ImployeeBasicInfoCLF和DetailInfoCLF是兩個列族,列族下又有多個具體列。(員工基本信息列族:姓名、年齡。詳細信息列族:薪水、角色)
(注1:圖中列族下面每一行中特定列中只畫了最新版本的數據,實際上HBase最小存儲單元為cell,圖中每個單元格中其實有多個MVCC version版本的cell,Hbase的更新操作會帶時間戳,對每個數據單元cell,可存取指定數量版本的cell,client端可以指定查詢某時間點后的最新數據,也可以一次性得到cell的所有版本。)
(注2:剛剛評論里有同學提到cell的概念,這里詳細說一下,cell里可得道的信息包含: row、 column family、 column qualifier(列限定符)、timestamp、type6、MVCC version、value。其中每個cell 由 row、column family、column qualifier、timestamp,、and type唯一標識。
HBase Cell 參考鏈接(Apache HBase API)
HBase數據模型
-
命名空間
命名空間是對表的邏輯分組,不同的命名空間類似于關系型數據庫中的不同的Database數據庫。利用命名空間,在多租戶場景下可做到更好的資源和數據隔離。 -
表
對應于關系型數據庫中的一張張表,HBase以“表”為單位組織數據,表由多行組成。 -
行
行由一個RowKey和多個列族組成,一個行有一個RowKey,用來唯一標示。 -
列族
每一行由若干列族組成,每個列族下可包含多個列,如上ImployeeBasicInfoCLF和DetailInfoCLF即是兩個列族。列族是列共性的一些體現。注意:物理上,同一列族的數據存儲在一起的。 -
列限定符
列由列族和列限定符唯一指定,像如上的name、age即是ImployeeBasicInfoCLF列族的列限定符。 -
單元格
單元格由RowKey、列族、列限定符唯一定位,單元格之中存放一個值(Value)和一個版本號。 -
時間戳
單元格內不同版本的值按時間倒序排列,最新的數據排在最前面
HBase表特點
- 數據規模大,單表可容納數十億行,上百萬列。
- 無模式,不像關系型數據庫有嚴格的Scheme,每行可以有任意多的列,列可以動態增加,不同行可以有不同的列,列的類型沒有限制。
- 稀疏,值為空的列不占存儲空間,表可以非常稀疏,但實際存儲時,能進行壓縮。
- 面向列族,面向列族的存儲和權限控制,支持列族獨立查詢。
- 數據多版本,利用時間戳來標識版本
- 數據無類型,所有數據以字節數據形式存儲
這篇比較基礎,介紹了HBase的適用場景、表的形式、數據模型以及特點,主要是讓大家從感性上認識HBase。
總結
以上是生活随笔為你收集整理的HBase系列(一):HBase表结构及数据模型的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事件查看器mysql_Windows 事
- 下一篇: tlwr842n服务器无响应,TL-WR