hbase的核心數據結構為LSM樹。
LSM樹分為內存部分和磁盤部分。
內存部分是壹個維護有序數據集合的數據結構。壹般來講,內存數據結構可以選擇平衡二叉樹、紅黑樹、跳躍表(SkipList)等維護有序集的數據結構,由於考慮並發性能,HBase選擇了表現更優秀的跳躍表。
磁盤部分是由壹個個獨立的文件組成,每壹個文件又是由壹個個數據塊組成。對於數據存儲在磁盤上的數據庫系統來說,磁盤尋道以及數據讀取都是非常耗時的操作(簡稱IO耗時)。為了避免不必要的IO耗時,可以在磁盤中存儲壹些額外的二進制數據,這些數據用來判斷對於給定的key是否有可能存儲在這個數據塊中,這個數據結構稱為布隆過濾器(BloomFilter)。
LSM樹介紹:
LSM樹是壹種磁盤數據的索引結構。LSM樹的索引對寫入請求更友好。因為無論是何種寫入請求,LSM樹都會將寫入操作處理為壹次順序寫,而HDFS擅長的正是順序寫(且HDFS不支持隨機寫)。
壹個LSM樹的索引內存部分是壹個ConcurrentSkipListMap,Key是rowkey、columnfamily、qualifier、type以及timestamp,Value是字節數組。隨著數據不斷寫入MemStore,壹旦內存超過閾值會將數據flush到磁盤,生產HFile;多個小HFile文件會compact成壹個大HFile。