中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase中RowKey設計原則有哪些

發布時間:2021-12-08 15:07:43 來源:億速云 閱讀:167 作者:小新 欄目:云計算

這篇文章主要介紹了HBase中RowKey設計原則有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

首先看一下RowKey設計的3條原則

1、散列原則,不要用類似于時間戳這樣的數據直接作為RowKey,如果確實需要用時間戳,可以把它放在低位,高位用散列來占位。

2、長度原則,其實總結就一句話,rowkey只是一個唯一標識符,并沒有更多的實際意義,所以不要搞得太長,但是,我想說但是,如果我的rowkey是有意義的,那么讓他長一些是不是也可以呢?

3、唯一性原則,這一點沒什么好說的,RowKey需要唯一確定一條數據,所以必須唯一。

后面2條原則沒什么好說的,我們重點來看一下散列原則,為什么會有這樣的建議。

在HBase當中,表會被劃分為1...n個Region,被托管在RegionServer中。Region二個重要的屬性:StartKey與EndKey表示這個 Region維護的rowKey范圍,當我們要讀/寫數據時,如果rowKey落在某個start-end key范圍內,那么就會定位到目標region并且讀/寫到相關的數據。

如果我們在建表的時候,不預先設定好分區,隨著表內數據的增多,HBase會自動把表進行split,但是這樣做有幾點問題,第一,分區的原則,可能并不是我們想要的;第二,在表內數據相對較少的時候,無法充分展現分布式并發處理的優勢;第三,split操作,其實是比較耗資源的,如果數據增長過快,可能會相對頻繁的發生。

那么,預分區又是如何實現的,我們看下面這個語句:

create 'testtable', 'common', 'data', {SPLITS => ['1','2','3']}

建好之后,我們可以在HBase的web頁面當中,看到表的分區的分布情況:

HBase中RowKey設計原則有哪些

我們看到,我們用1,2,3三個數,把一個table劃分為了4個region,這四個region分別是:

x<1,  1<=x<2,  2<=x<3,  3<=x

那么我們在insert的數據的時候,又該怎么做呢?看下面的scala代碼:

val p = new Put(Bytes.toBytes(String.valueOf(random.nextInt(4)) + new Date().getTime))

這句話是為一條新的數據,生成一個RowKey,那么我們的key值由2部分組成,隨機散列+時間戳,其中隨機散列包括:【0,1,2,3】一共4個值,根據上面我們劃分的region,這4個值,將會映射到4個不同的region當中。

好吧,剛才我們直接把一種比較好的解決方案告訴給大家了。

最初的時候,我可不是這么做的,當時我并不知道有預分區這回事,所以我僅僅是建了一個表,這種情況下,它只有一個分區。

create 'testtable', 'common', 'data'

然后我用下面的語句來生成RowKey。

val p = new Put(Bytes.toBytes(new Date().getTime))

這樣會發生什么事情?程序執行之后,持續不斷的往這個默認的region當中寫入數據,事實上也就只有一個regionserver來為我們服務,數據量大了之后,table終于發生了分裂,2個region了,可是情況并沒有任何好轉,因為我們的RowKey是不斷增大的,所以,按照HBase默認的分區原則,所有的新的數據,都被寫到了startkey最大的那個region當中。分布式的性能優勢完全無法體現。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“HBase中RowKey設計原則有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安福县| 博白县| 宣汉县| 福建省| 綦江县| 德保县| 博罗县| 蒙城县| 兴安盟| 城固县| 临汾市| 策勒县| 济南市| 大厂| 荣成市| 海兴县| 新平| 南平市| 瑞丽市| 新源县| 昔阳县| 苍南县| 团风县| 茂名市| 南充市| 武功县| 太谷县| 青田县| 当涂县| 昆山市| 饶阳县| 兰坪| 剑河县| 舟曲县| 巴楚县| 桃园县| 绥江县| 庐江县| 阿图什市| 雅江县| 厦门市|