網站首頁 編程語言 正文
HBase是運行在Hadoop集群上的一個數據庫,與傳統的數據庫有嚴格的ACID(原子性、一致性、隔離性、持久性)要求不一樣,HBase降低了這些要求從而獲得更好的擴展性,它更適合存儲一些非結構化和半結構化的數據。
下面給大家詳細介紹HBase表的數據模型,內容如下所示:
表(Table)
HBase 中的數據以表的形式存儲。同一個表中的數據通常是相關的,使用表主要是可以把某些列組織起來一起訪問。表名作為 HDFS 存儲路徑的一部分來使用,在 HDFS 中可以看到每個表名都作為獨立的目錄結構。
HBase表的數據模型主要概念包括rowkey、Column Family、Column、cell、Timestamp。
1. rowkey行鍵
- table的主鍵,table中的記錄==按照rowkey 的字典序進行排序==
- rowkey行鍵可以是任意字符串(最大長度是 64KB,實際應用中長度一般為 10-100bytes)
2. Column Family列族
- 被稱為列族或列簇
- HBase表中的每個列,都歸屬與某個列族
- 列族是表的schema的一部分(而列不是),即建表時至少指定一個列族
- 比如創建一張表,名為
user
,有兩個列族,分別是userInfo
和addressInfo
,建表語句create 'user', 'userInfo', 'addressInfo'
3. Column列
- 列肯定是表的某一列族下的一個列,用
列族名:列名
表示,如userInfo
列族下的name
列,表示為userInfo:name
- 它屬于某一個ColumnFamily,類似于我們mysql當中創建的具體的列
4. cell單元格
知道row key行鍵、列族、列,可以確定的一個cell單元格
cell中的數據是沒有類型的,全部是以字節數組進行存儲
5. Timestamp時間戳
- 可以對表中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number
- 即一個Cell可以有多個版本的值
理解數據模型各概念的圖
上表展示的是 HBase 中的用戶信息表 user,有三行記錄和兩個列族(不考慮空白的列族,代表可以有很多列族),行鍵分別為 1、2 和 3,兩個列族分別為 userInfo 和 addressInfo,每個列族中含有若干列,如列族 userInfo 包括 name、age、sex 3列,列族 addressInfo 包括 address、from、phone、email、ralary 5列。
在 HBase 中,列不是固定的表結構,在創建表時,不需要預先定義列名,可以在插入數據時臨時創建。
從表的邏輯模型來看,HBase 表與關系型數據庫中的表結構之間好像沒什么差別,只不過多了列族的概念。但實際上是有很大差別的,關系型數據庫中表的結構需要預先定義,如:列名及其數據類型和值域等內容。
當需要添加新列,則需要修改表結構,這會對已有的數據產生很大影響。同時,關系型數據庫中的表為每個列預留了存儲空間,即表中的空白 Cell 數據在關系型數據庫中以“NULL”值占用存儲空間。因此,對稀疏數據來說,關系型數據庫表中就會產生很多“NULL”值,消耗大量的存儲空間。
與面向行存儲的關系型數據庫不同,HBase 是面向列存儲的,且在實際的物理存儲中,列族是分開存儲的,即表中的用戶信息表將被存儲為 userInfo 和 addressInfo 兩個部分。
同時HBase存在時間戳,可以多次對一個cell賦值,可以存儲多個版本的值,如上表中rowkey為1的數據存儲了2個時間版本的數據。
原文鏈接:https://juejin.cn/post/7098597812081786916
相關推薦
- 2022-12-03 GCC?指令詳解及動態庫、靜態庫的使用方法_其它綜合
- 2022-09-20 Android實現簡單實用的垂直進度條_Android
- 2022-12-12 C++?Boost?Xpressive示例分析使用_C 語言
- 2023-04-06 Pytorch中關于model.eval()的作用及分析_python
- 2022-08-11 Go語言Grpc?Stream的實現_Golang
- 2022-03-22 .NET?6開發TodoList實現請求日志組件HttpLogging_實用技巧
- 2022-11-16 Python數據分析之matplotlib繪圖詳解_python
- 2022-10-08 C#中LINQ的Select與SelectMany函數使用_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支