HBase是一個分布式的、面向列的開源資料庫,也是高可靠性、高性能、面向列、可伸縮的分布式存儲系統,該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個結構化資料的分布式存儲系統”,是谷歌BigTable的開源實作,主要用來存儲非結構化和半結構化的松散資料。。HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關系資料庫,它是一個适合于非結構化資料存儲的資料庫。另一個不同的是HBase基于列的而不是基于行的模式。
HBase是Google Bigtable的開源實作,類似Google Bigtable利用GFS作為其檔案存儲系統,HBase利用Hadoop HDFS作為其檔案存儲系統;Google運作MapReduce來處理Bigtable中的海量資料,HBase同樣利用Hadoop MapReduce來處理HBase中的海量資料;Google Bigtable利用 Chubby作為協同服務,HBase利用Zookeeper作為對應。
HBase與傳統的關系資料庫的差別主要展現在以下幾個方面:
1、資料類型:關系資料庫采用關系模型,具有豐富的資料類型和存儲方式,HBase則采用了更加簡單的資料模型,它把資料存儲為未經解釋的字元串。
2、資料操作:關系資料庫中包含了豐富的操作,其中會涉及複雜的多表連接配接。HBase操作則不存在複雜的表與表之間的關系,隻有簡單的插入、查詢、删除、清空等,因為HBase在設計上就避免了複雜的表和表之間的關系。
3、存儲模式:關系資料庫是基于行模式存儲的。HBase是基于列存儲的,每個列族都由幾個檔案儲存,不同列族的檔案是分離的。
4、資料索引:關系資料庫通常可以針對不同列建構複雜的多個索引,以提高資料通路性能。HBase隻有一個索引——行鍵,通過巧妙的設計,HBase中的所有通路方法,或者通過行鍵通路,或者通過行鍵掃描,進而使得整個系統不會慢下來。
5、資料維護:在關系資料庫中,更新操作會用最新的目前值去替換記錄中原來的舊值,舊值被覆寫後就不會存在。而在HBase中執行更新操作時,并不會删除資料舊的版本,而是生成一個新的版本,舊有的版本仍然保留。
6、可伸縮性:關系資料庫很難實作橫向擴充,縱向擴充的空間也比較有限。相反,HBase和BigTable這些分布式資料庫就是為了實作靈活的水準擴充而開發的,能夠輕易地通過在叢集中增加或者減少硬體數量來實作性能的伸縮。
HBase是一個稀疏、多元度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳。HBase資料模型的具體解釋如下:
- HBase是一個稀疏、多元度、排序的映射表,這張表的索引是行鍵、列族、列限定符和時間戳。
- 每個值是一個未經解釋的字元串,沒有資料類型。使用者在表中存儲資料,每一行都有一個可排序的行鍵和任意多的列。
- 表在水準方向由一個或多個列族組成,一個列族中可以包含任意多個列,同一個列族裡面的資料存儲在一起。
- 列族支援動态擴充,可以很輕松地添加一個列族或列,無需預先定義列的數量以及類型,所有列均以字元串形式存儲,使用者需要自行進行資料類型轉換。
- HBase中執行更新操作時,并不會删除資料舊的版本,而是生成一個新的版本,舊的版本仍然保留(這是和HDFS隻允許追加不允許修改的特性相關的)
資料來源:
HBase簡介
https://www.jianshu.com/p/53864dc3f7b4HBase 之工作原理
https://www.jianshu.com/p/5a243191b1a0分布式資料庫 Apache HBase
https://www.oschina.net/p/hbaseHBase 官方文檔中文版
http://abloz.com/hbase/book.htmlApache HBase Reference Guide
http://hbase.apache.org/book.html