Rowkey 長度
Rowkey 是一個二進制碼流,建議越短越好,一般不超過 16 個字節,主要是出于以下的考慮:
數據的持久化文件 HFile 中是按照 KeyValue 存儲的,即你寫入的數據可能是一個 RowKey 對應多個列族,多個列,但是實際的存儲是每個列都會對應 Rowkey 寫一遍,即這一條數據有多少個列,就會存儲多少遍 Rowkey,這會極大影響 HFile 的存儲效率
MemStore 和 BlockCache 都會將緩存部分數據到內存,如果 Rowkey 字段過長內存的有效利用率會降低,系統將無法緩存更多的數據,這會降低檢索效率。
目前操作系統一般都是 64 位系統,內存 8 字節對齊。控制在 16 個字節,8 字節的整數倍,利用操作系統的最佳特性。
Rowkey 散列設計
HBase 的 Rowkey 是按照字典序排列的,而數據分布在 RegionServer 上的方式是做高位哈希,所以如果我們的 Rowkey 首位存在大量重復的值那么很可能會出現數據傾斜問題,關于數據傾斜的問題下面會詳細說明,總之,原則上就是Rowkey 的首位盡量為散列。
常訪問的數據放到一起
對于需要批量獲取的數據,比如某一天的數據,可以把一整天的數據存儲在一起,即把 rowkey 的高位設計為時間戳,這樣在讀數據的時候就可以指定 Start RowKey 和 End RowKey 做一個 scan 操作,因為高位相同的 Rowkey 會存儲在一起,所以這樣讀是一個順序讀的過程,會比較高效。但是這樣有一個很明顯的問題,違背了上一條Rowkey 散列設計原則,很可能會出現數據傾斜問題。所以說沒有最好的設計,具體如何權衡就得看實際業務場景了
更多關于大數據培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。