1. 程式人生 > >hbase快速入門之---表設計(使用建議)

hbase快速入門之---表設計(使用建議)

ØColumn Family 建議不要在一張表裡定義多個的column family。目前Hbase並不能很好的處理超過2~3column family的表。因為某個column familyflush的時候,它鄰近的column family也會因關聯效應被觸發flush,最終導致系統產生更多的I/O Ø使用壓縮 由於HBaseKeyValue的儲存特性,使用壓縮減少對硬碟和網路的壓力,從而提高叢集的整體吞吐量。推薦使用snappy壓縮。 Ø開啟Bloom filter 開啟Bloom filter HBase可以利用Bloomfilter來提高查詢效能,但是會增加儲存的開銷。 ØRowkey
設計 數字rowkey的從大到小排序:hbase只支援從小到大的排序,這樣就對於排行榜一類的查詢需求很尷尬。那麼採用rowkey = Integer.MAX_VALUE-rowkey的方式將rowkey進行轉換,最大的變最小,最小的變最大。在應用層再轉回來即可完成排序需求。 對於多欄位查詢的情況,可以把考慮多個查詢條件拼在rowkey中。這樣既能滿足多條件查詢,又能有很快的查詢速度。 如果rowkey是類似時間戳的方式遞增的生成,建議不要使用正序直接寫入rowkey,這樣容易產生所有新資料都在一個regionserver上堆積的現象,影響效能。可以考慮採用reverse的方式反轉rowkey
,使得rowkey大致均衡分佈,這樣設計有個好處是能將regionserver的負載均衡。 以下我給了一些使用 HBase 時候對錶格設計的一些建議,讀者也可以理解背後的含義。不過我並不希望這些建議成為使用 HBase 的教條,畢竟也有不盡合理的地方。首先,一個 HBase 資料庫是否高效,很大程度會和 Row-Key 的設計有關。因此,如何設計 Row-key 是使用 HBase 時,一個非常重要的話題。隨著資料訪問方式的不同,Row-Key 的設計也會有所不同。不過概括起來的宗旨只有一個,那就是儘可能選擇一個 Row-Key,可以使你的資料均勻的分佈在叢集中。這也很容易理解,因為 HBase 是一個分散式環境,Client 會訪問不同 Region Server 獲取資料。如果資料排布均勻在不同的多個節點,那麼在批量的 Client 便可以從不同的 Region Server 上獲取資料,而不是瓶頸在某一個節點,效能自然會有所提升。對於具體的建議我們一般有幾條:
  1. 當客戶端需要頻繁的寫一張表,隨機的 RowKey 會獲得更好的效能。
  2. 當客戶端需要頻繁的讀一張表,有序的 RowKey 則會獲得更好的效能。
  3. 對於時間連續的資料(例如 log),有序的 RowKey 會很方便查詢一段時間的資料(Scan 操作)。