天天看點

HBase資料模型的一些概念表行健列族單元格

首先來先了解一個概念:HBase是一種列式存儲的分布式資料庫。

             在HBase中資料以表的形式存儲。使用表的主要原因是把某些列組織起來一起通路,同一個表中的資料通常是相關的,通過列族進一步把一些列組織起來一起通路。使用者可以通過指令行或者Java API來建立表。表明通常使用Java Stirng 類型或者byte數組表示,表名作為HDFS存儲路徑的一部分來使用,是以必須要符合檔案名規範,是以構成表名的字元是有限制的。可以直接檢視底層存儲系統,在HDFS中可以看到每個表的表名都作為獨立的目錄結構,在某些情況下,使用者可能需要檢視這部分資訊。

      雖然理論上HBase的表是由行和列組成的,但是從實體結構上看,表存儲在不同 的分區,即不同的Region。每個Region隻在一個RegionServer中提供服務,而Region直接向用戶端提供存儲和讀取服務。

      RowKey按照字典排序由低到高存儲在表中,在Hbase中,RowKey是唯一的索引;

       為了高效檢索資料,應仔細設計Rowkey以獲得最高的查詢性能:首先Rowkey被備援存儲,是以不宜過長,過長的Rowkey會占用大量的空間同時會降低檢索效率;其次Rowkey應該盡量分布均勻,這樣不會産生熱點現象;最後是RowKey唯一原則,必須在設計上保證它的唯一性;

        HBase中的列族是一些列的集合。一個列族中的所有列成員有着相同的字首。列使用Column:Qualifier來區分列;

        在建立表的時候,至少要指定一個列族,新的列族可以随後按需,動态地加入,但是修改列族要先停用表。應該将經常一起查詢的列放在一個列族中,合理劃分列族将減少查詢時加載到緩存的資料,提高查詢的效率,但是也不要有太多的列族,因為跨列族通路時非常低效的。

       HBase中的單元格是由行健,列族,列,時間戳唯一确定。單元格内容是不可分割的位元組數組。每個單元格都儲存着同一份資料的多個版本,不同時間版本的資料按照時間順序倒序排列,最新時間的資料排在最前面,時間戳是64為的整數,可以由用戶端在寫入資料時候指派,也可以由RegionServer自動指派。