HBase概念:
HBase是一個分布式面向列的開源資料庫,它的思想來源于Google的一篇叫BigTable的論文。與BigTable類似,BigTable是基于GFS(Google File System)的分布式列式資料庫,HBase是基于HDFS(Hadoop Distributed File System)的分布式列式資料庫,不了解BigTable的讀者可能不知道它的内容是什麼,這裡簡單的說明一下:BigTable認為世界上所有的資料庫的表結構都可以通過三個列即可實作,行鍵,列名,列值表示,例如:一個學生表
Student( StudentId , StudentName, StudentClass, StudentAge) Student ( Key, ColumnName, ColumnValue )
( 1234567890, 'StudentName', 'Hirisw' )
( 1234567890 , 'Hirisw', 'InformationSecurity0301' , 23 ) 可以表示成: ( 1234567890, 'StudentClass', 'InformationSecurity0301')
( 1234567890, 'StudentAge', '23' )
這裡就隻用了3列實作了一個結構性資料庫的多列功能,是以BigTable就是一張無所不包的大表。
HBase邏輯模型:
HBase邏輯模型包括:行鍵,時間戳,列族(包括列可以一個列族包含多個列,列族需要預先定義好不能随意添加,列族裡面的列是不需要預先定義的可以根據需求增加),這裡拿一個簡單的示例來說明HBase的邏輯結構:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIjd9kGchZCMwAzM5gDM1QTN0UTM9UGdhRkbvlGdhNWamlGZv1mJx0jbvl2cyVmd-cmbw5iNzE0MlMTNBNTJxEDMyUiMy0iMx0COxAjMldWYtl2LcNTOwgzM3czLcNHduVWboNWY0RXYvwFZh9Gbud3bk9CXwkDM4oDNuMjL4EjLycTMvw1LcpDc0RHaiojIsJye.png)
HBase原理:
HBase是基于HDFS的,HDFS有一個問題就是檔案不能修改,這個原因我們之前的内容已經講過,那麼HBase資料庫是怎麼實作增删改的呢,這裡要講到的就是所有操作都是基于日志的,都是通過增加記錄的形式達到增删改的效果,比如說插入新紀錄很好了解就是直接寫入一筆資料即可,那如何修改和删除呢,通過新增一個操作内容的記錄達到目的,比如說新增一個标記為删除的記錄即可達到删除的目的,修改一條記錄即可達到修改資料的目的這是在硬碟檔案裡的做法,如果是在記憶體裡面是可以執行修改内容的動作的,隻有當記憶體達到一定大小的時候再寫入檔案,那寫入檔案的删除記錄是不是就一直保留在那裡呢?其實也不是的,但檔案數量增加到一定門檻值的時候會将小檔案合并成大檔案,這個過程中就會把删除的記錄去掉。
HBase鍵值存儲:
在整個HBase的存儲中是按列族進行存儲的,存儲格式如下所示,其中鍵長度和值長度區分目前存儲資料鍵所在範圍和值所在範圍,行長度和行資訊說明屬于哪個行,列族長度和列族資訊說明屬于哪個列族,列資訊說明是哪個列,時間戳說明是哪個版本,鍵類型說明鍵的類型,後面值資訊就是值的内容。
HBase組成部件:
行鍵:作為資料在HBase裡的唯一辨別,用來作為檢索記錄的索引,通路表裡行隻有三種方式:
1.單行鍵索引,隻通過一個行鍵進行精确比對擷取資料,這裡雖然隻有一個行鍵但是往往不止一條記錄而是有多條記錄,每一個行鍵可以帶有多個不同的版本時間戳。
2.給定行鍵範圍索引,這裡是給出行鍵的範圍如從AAAAA-ZZZZZ就會把這個區間裡面的記錄都比對查詢擷取出來。
3.全表掃描,可以看做是行鍵的最大值和最小值之間的範圍通路,是行鍵範圍索引的一個特例
列族:列的表示形式為<列族>:<限定符>,列族需要建表時實作設定好,但是列不需要事先設定
列族裡的列最後都有相同的讀寫方式(如等長的字元串),以提高性能,比如說讀寫又或者因為有相同結構能進行高性能壓縮,不僅提高存儲效率也利于資料在IO中的傳輸
時間戳:每次資料送出的時間,可由系統自動生成也可以由使用者顯示指派。HBase裡面儲存資料的機制就是跟時間戳有關的,有兩種方式
1.根據時間戳由新到舊的次序排序,取一定數量的時間戳進行保留,比如說1000個時間戳,那麼從新到舊的時間戳第1000個以後的就會丢棄掉。
2.根據時間戳由新到舊的次序排序,取一定時間内的時間戳進行保留,比如說7天内的時間戳,那麼超過7天的時間戳就會被丢棄掉。