HBase 是如何訪問資料的

2021-08-27 03:30:53 字數 1662 閱讀 5003

hbase是乙個查詢極其快速的非關係型資料庫,它在實時讀寫和實時訪問上有著巨大的優勢,並且非常靈活。

先來看下面這幅圖:

這是乙個hbase表的儲存結構模型,其中有4個字段。分別為rowkey(主鍵)、time stamp(時間戳)、cf(列族)、cf:xx(列)。這看上去是乙個資料表,但是對於hbase而言,這只是一行資料。看到這大家可能會比較迷惑,這明明就是資料表嘛,我用了這麼多年excel,你可別騙我。

為了方便理解,我們先來舉個例子,請看下面這幅圖:

這是乙個普通的資料表,名為legens。其中有5列資料,分別為id、名字,出生日期,外號和出生地。有些小夥伴看到表裡的內容應該會很熟悉,但是這並不是重點。假如,現在有些人不止1個外號了。有些人有2個甚至3個外號,這時如果要將資料存入資料表,則需要修改表結構,修改結果如下:

如果接下來還有別的欄位要新增,比如性別等。那麼這個表結構還需要修改。因此在統計結構不嚴謹的資料的時候,普通的關係型儲存結構並不好用。那麼如果使用hbase的話,如何存這些資料呢?請看下圖:

這就代表著一行資料,和普通的資料表類似但又不完全像,接下來小鳥就按照前面的過程來講解。

首先,rowkey是主鍵,它決定一行資料。rowkey在生成的時候就會排好序,排序規則按照字典順序。所謂字典順序就是abcd、1234。rowkey只能儲存64k的位元組資料,如果太長則影響效能。

timestamp是時間戳,每插入一次資料都會有乙個時間戳,其作用是標識本次加入的資料,起到乙個版本的作用,hbase在插入資料的時候預設版本號就是時間戳。這個字段可以自己修改定義,但是一般都採用預設的時間戳。

通常獲取資料就是獲取時間戳最近的一條資料。假如現在加入一條資料。cf1:name=劫。那此時如果獲取rowkey為1的一行下,cf1為name的資料時,獲取到的就是劫而非亞索。

因為此時劫是新加入的,hbase在做資料更新的時候就是利用新資料來覆蓋舊資料的。

cf是列族,全稱是colunm family。hbase表中的每個列都屬於乙個列族。列族必須作為表模式事先定義完畢。例如create 『legens』 『cf1』 『cf2』 『cf3』……。乙個列族下的所有資料都存於乙個目錄下,由幾個檔案儲存。

除此之外,許可權控制、儲存和調優都是在列族層做處理的,因為表在建模的時候並不會考慮有多少列。

列族一般不輕易修改。

name、born、alias等都是列,列名以列作為字首。例如cf1:name。乙個列族有多個列成員,上述cf1就有name、born、alias1、alias2、alias3。並且列在後續可以按需求增加。加入現在要在cf1中加入height,則直接新增cf1:height=***。

確定乙個列的某個屬性的值需要四個值來確定,分別是rowkey、列族、列名、和timestamp。

最後要說明的是,hbase中儲存的資料是沒有型別的,全部都是以位元組碼的形式儲存。

TiKV 是如何訪問資料的(下)

上篇文章中,我們介紹了與 tikv 處理讀寫請求相關的基礎知識,下面將開始詳細的介紹 tikv 的讀寫流程。enjoy tikv 提供兩套 api,一套叫做 rawkv,另一套叫做 txnkv。txnkv 對應的就是上面提到的 percolator,而 rawkv 則不會對事務做任何保證,而且比 t...

聊一聊 HBase 是如何寫入資料的?

hbase client 訪問 zookeeper 獲取寫入 region 所在的位置,即獲取 hbase meta 表位於哪個 region server 訪問對應的 region server 獲取 hbase meta 表,並查詢出目標資料位於哪個 region server 中的哪個 reg...

HBase誤刪資料如何搶救?

相信大家都有這樣的經歷,運算元據庫的時候不小心誤刪除了資料,輕則被公司 處罰,重則開除。別慌,今天較你一招資料即可失而復得,mysql 裡有 binlog 可以幫助我們恢復資料,但是沒有開 binlog 也沒有備份就尷尬了。如果是 hbase,你沒有做備份誤刪了又如何恢復呢?資料保護 當誤刪資料發生...