HBase 高表與寬表的選擇

2021-09-26 04:30:38 字數 1157 閱讀 4274

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少;

高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。

hbase的row key是分布式的索引,也是分片的依據。hbase的row key + column family + column qualifier + timestamp + value 是hfile中資料排列依據。hfile據此,對資料的索引到data block級別,而不是行級別。所以這種key是hfile內部的粗粒度(data block粒度)本地索引的主鍵。

據此,在hbase中使用寬表、高表的優劣總結如下:

1)查詢效能:高表更好,因為查詢條件都在row key中, 是全域性分布式索引的一部分。高表一行中的資料較少。所以查詢快取blockcache能快取更多的行,以行數為單位的吞吐量會更高。

2)分片能力:高表分片粒度更細,各個分片的大小更均衡。因為高表一行的資料較少,寬表一行的資料較多。hbase按行來分片。

3)元資料開銷:高表元資料開銷更大。高錶行多,row key多,可能造成region數量也多,- root -、 .meta表資料量更大。過大的元資料開銷,可能引起hbase集群的不穩定、master更大的負擔(這方面後續再好好總結)。

4)事務能力:寬表事務性更好。hbase對一行的寫入(put)是有事務原子性的,一行的所有列要麼全部寫入成功,要麼全部沒有寫入。但是多行的更新之間沒有事務性保證。

5)資料壓縮比:如果我們對一行內的資料進行壓縮,寬錶能獲得更高的壓縮比。因為寬表中,一行的資料量較大,往往存在更多相似的二進位制位元組,有利於提高壓縮比。通過壓縮,緩解了寬表一行資料量太大,並導致分片大小不均勻的問題。查詢時,我們根據row key找到壓縮後的資料,進行解壓縮。而且解壓縮可以通過協處理器(coproesssor)在hbase伺服器上做,而不是在業務應用的伺服器上做,以充分應用hbase集群的cpu能力。

設計表時,可以不絕對追求高表、寬表,而是在兩者之間做好平衡。根據查詢模式,需要分布式索引、分片、有很高選擇度(即能據此查詢條件迅速鎖定很小範圍的一些行)的查詢用字段,應該放入row key;能夠均勻地劃分資料位元組數的字段,也應該放入row key,作為分片的依據。選擇度較低,並且不需要作為分片依據的查詢用字段,放入column family和column qualifier,不放入row key。

HBase學習筆記 高表與寬表的選擇

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier times...

HBase學習筆記 高表與寬表的選擇

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier times...

HBase的高表和寬表

hbase中的寬表是指很多列較少行,即列多行少的表,一行中的資料量較大,行數少 hbase中高表是指很多行較少列,即行多列少,一行中的資料量較少,行數大。hbase的row key是分布式的索引,也是分片的依據。hbase的row key column family column qualifier...