HBase 建表語句解析

2021-07-29 01:46:43 字數 1641 閱讀 8137

像所有其他資料庫一樣,hbase也有表的概念,有表的地方就有建表語句,而且建表語句還很大程度上決定了這張表的儲存形式、讀寫效能。比如我們熟悉的mysql,建表語句中資料型別決定了資料的儲存形式,主鍵、索引則很大程度上影響著資料的讀寫效能。雖然hbase沒有主鍵、索引這些概念,但在hbase的世界裡,有些東西和它們一樣重要!

廢話不說,直接奉上一條hbase建表語句,來為各位看官分解剖析:

上述建表語句表示建立乙個表名為「newsclickfeedback」的表,該錶只包含乙個列簇「toutiao」。接下來重點講解其他欄位的含義以及如何正確設定。note:因為篇幅有限本文並不講解具體的工作原理,後續會有相關專題對其進行分析。

versions

資料版本數,hbase資料模型允許乙個cell的資料為帶有不同時間戳的多版本資料集,versions引數指定了最多儲存幾個版本資料,預設為1。假如某個使用者想儲存兩個歷史版本資料,可以將versions引數設定為2,再使用如下scan命令就可以獲取到所有歷史資料:

scan 'newsclickfeedback',

bloomfilter

布隆過濾器,優化hbase的隨機讀取效能,可選值none|row|rowcol,預設為none,該引數可以單獨對某個列簇啟用。啟用過濾器,對於get操作以及部分scan操作可以剔除掉不會用到的儲存檔案,減少實際io次數,提高隨機讀效能。row型別適用於只根據row進行查詢,而rowcol型別適用於根據row+col聯合查詢,如下:

row型別適用於:get 『newsclickfeedback』,』row1′

rowcol型別適用於:get 『newsclickfeedback』,』row1′,

對於有隨機讀的業務,建議開啟row型別的過濾器,使用空間換時間,提高隨機讀效能。

compression

ttl資料過期時間,單位為秒,預設為永久儲存。對於很多業務來說,有時候並不需要永久儲存某些資料,永久儲存會導致資料量越來越大,消耗儲存空間是其一,另一方面還會導致查詢效率降低。如果設定了過期時間,hbase在compact時會通過一定機制檢查資料是否過期,過期資料會被刪除。使用者可以根據具體業務場景設定為乙個月或者三個月。示例中ttl => 『 259200』設定資料過期時間為三天

in_memory

資料是否常駐記憶體,預設為false。hbase為頻繁訪問的資料提供了乙個快取區域,快取區域一般儲存資料量小、訪問頻繁的資料,常見場景為元資料儲存。預設情況,該快取區域大小等於jvm heapsize * 0.2 * 0.25 ,假如jvm heapsize = 70g,儲存區域的大小約等於3.2g。需要注意的是hbase meta元資料資訊儲存在這塊區域,如果業務資料設定為true而且太大會導致meta資料被置換出去,導致整個集群效能降低,所以在設定該引數時需要格外小心。

blockcache

是否開啟block cache快取,預設開啟。

splits

region預分配策略。通過region預分配,資料會被均衡到多台機器上,這樣可以一定程度上解決熱點應用資料量劇增導致系統自動split引起的效能問題。hbase資料是按照rowkey按公升序排列,為避免熱點資料產生,一般採用hash + partition的方式預分配region,比如示例中rowkey首先使用md5 hash,然後再按照首字母partition為16份,就可以預分配16個region。

HBase 建表語句解析

像所有其他資料庫一樣,hbase也有表的概念,有表的地方就有建表語句,而且建表語句還很大程度上決定了這張表的儲存形式 讀寫效能。比如我們熟悉的mysql,建表語句中資料型別決定了資料的儲存形式,主鍵 索引則很大程度上影響著資料的讀寫效能。雖然hbase沒有主鍵 索引這些概念,但在hbase的世界裡,...

mysql建表語句

在sql語句中注意 約束的概念 1.實體完整性約束 主鍵 唯一且非空 primary key 違約處理 no action 拒絕執行 2.參照完整性約束 外來鍵約束 foregin key references tablename filedname on delete update casecad...

mysql建表語句

mysql裝好以後,進入命令列,開始建表需要先建立乙個database.開始使用 create database mybase use mybase create table user id int 10 auto increment not null primary key,username va...