詳解HBase表的數(shù)據(jù)模型
HBase是運(yùn)行在Hadoop集群上的一個數(shù)據(jù)庫,與傳統(tǒng)的數(shù)據(jù)庫有嚴(yán)格的ACID(原子性、一致性、隔離性、持久性)要求不一樣,HBase降低了這些要求從而獲得更好的擴(kuò)展性,它更適合存儲一些非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)。
下面給大家詳細(xì)介紹HBase表的數(shù)據(jù)模型,內(nèi)容如下所示:
表(Table)
HBase 中的數(shù)據(jù)以表的形式存儲。同一個表中的數(shù)據(jù)通常是相關(guān)的,使用表主要是可以把某些列組織起來一起訪問。表名作為 HDFS 存儲路徑的一部分來使用,在 HDFS 中可以看到每個表名都作為獨(dú)立的目錄結(jié)構(gòu)。
HBase表的數(shù)據(jù)模型主要概念包括rowkey、Column Family、Column、cell、Timestamp。
1. rowkey行鍵
- table的主鍵,table中的記錄==按照rowkey 的字典序進(jìn)行排序==
- rowkey行鍵可以是任意字符串(最大長度是 64KB,實(shí)際應(yīng)用中長度一般為 10-100bytes)
2. Column Family列族
- 被稱為列族或列簇
- HBase表中的每個列,都?xì)w屬與某個列族
- 列族是表的schema的一部分(而列不是),即建表時至少指定一個列族
- 比如創(chuàng)建一張表,名為
user,有兩個列族,分別是userInfo和addressInfo,建表語句create 'user', 'userInfo', 'addressInfo'
3. Column列
- 列肯定是表的某一列族下的一個列,用
列族名:列名表示,如userInfo列族下的name列,表示為userInfo:name - 它屬于某一個ColumnFamily,類似于我們mysql當(dāng)中創(chuàng)建的具體的列
4. cell單元格
知道row key行鍵、列族、列,可以確定的一個cell單元格
cell中的數(shù)據(jù)是沒有類型的,全部是以字節(jié)數(shù)組進(jìn)行存儲
5. Timestamp時間戳
- 可以對表中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number
- 即一個Cell可以有多個版本的值
理解數(shù)據(jù)模型各概念的圖

上表展示的是 HBase 中的用戶信息表 user,有三行記錄和兩個列族(不考慮空白的列族,代表可以有很多列族),行鍵分別為 1、2 和 3,兩個列族分別為 userInfo 和 addressInfo,每個列族中含有若干列,如列族 userInfo 包括 name、age、sex 3列,列族 addressInfo 包括 address、from、phone、email、ralary 5列。
在 HBase 中,列不是固定的表結(jié)構(gòu),在創(chuàng)建表時,不需要預(yù)先定義列名,可以在插入數(shù)據(jù)時臨時創(chuàng)建。
從表的邏輯模型來看,HBase 表與關(guān)系型數(shù)據(jù)庫中的表結(jié)構(gòu)之間好像沒什么差別,只不過多了列族的概念。但實(shí)際上是有很大差別的,關(guān)系型數(shù)據(jù)庫中表的結(jié)構(gòu)需要預(yù)先定義,如:列名及其數(shù)據(jù)類型和值域等內(nèi)容。
當(dāng)需要添加新列,則需要修改表結(jié)構(gòu),這會對已有的數(shù)據(jù)產(chǎn)生很大影響。同時,關(guān)系型數(shù)據(jù)庫中的表為每個列預(yù)留了存儲空間,即表中的空白 Cell 數(shù)據(jù)在關(guān)系型數(shù)據(jù)庫中以“NULL”值占用存儲空間。因此,對稀疏數(shù)據(jù)來說,關(guān)系型數(shù)據(jù)庫表中就會產(chǎn)生很多“NULL”值,消耗大量的存儲空間。
與面向行存儲的關(guān)系型數(shù)據(jù)庫不同,HBase 是面向列存儲的,且在實(shí)際的物理存儲中,列族是分開存儲的,即表中的用戶信息表將被存儲為 userInfo 和 addressInfo 兩個部分。
同時HBase存在時間戳,可以多次對一個cell賦值,可以存儲多個版本的值,如上表中rowkey為1的數(shù)據(jù)存儲了2個時間版本的數(shù)據(jù)。
到此這篇關(guān)于詳解HBase表的數(shù)據(jù)模型的文章就介紹到這了,更多相關(guān)HBase數(shù)據(jù)模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
git?push?origin?HEAD:refs/for/master?的意思分析
這篇文章主要介紹了git?push?origin?HEAD:refs/for/master?的意思,補(bǔ)充介紹了git?提交代碼常用命令,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01
vim中tagbar配置以及打字時隱藏鼠標(biāo)的方法
這篇文章主要給大家介紹了關(guān)于vim中tagbar配置以及打字時隱藏鼠標(biāo)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關(guān)系
這篇文章主要為大家介紹了Git的基本操作流程及工作區(qū)版本庫暫存區(qū)的關(guān)系,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
微信小程序(微信應(yīng)用號)開發(fā)工具0.9版安裝詳細(xì)教程
這篇文章主要介紹了微信小程序(微信應(yīng)用號)開發(fā)工具0.9版安裝詳細(xì)教程的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
教你免費(fèi)做一個屬于自己穩(wěn)定有效的圖床-PicGo
由于現(xiàn)在很多寫作平臺都支持了Markdown語法,導(dǎo)致圖床用的人越來越多。這篇文章主要介紹了如何免費(fèi)做一個屬于自己穩(wěn)定有效的圖床-PicGo,需要的朋友可以參考下2020-01-01
Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟
本文主要介紹了Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

