HBase底層基於HDFS, 它們是對數據存儲,組織,提供介面的一種方式,有了文件系統為何要有資料庫?


一方面,HBase這類表格系統區別於文件系統,本質上是提供了」高效「的隨機讀寫。

你可以將每條記錄在dfs上存儲一個單獨的文件,用修改一條記錄時,將這條記錄對應的文件刪了重建的方式來實現對記錄的隨機讀寫、一致性地的存儲,但這顯然不會高效。

另一方面,HBase並不是一個資料庫,它沒有資料庫ACID的跨行、跨表事務,當我們需要原子的修改多條記錄時,HBase和文件系統一樣,本身是無能為力的,需要上層應用自己通過兩階段提交一類的方式去實現。


HBase 本身其實可以完全不要考慮 HDFS 的,你完全可以只把 HBase 當作是一個分散式高並發 k-v 存儲系統就好了,只不過它底層的文件系統是通過 HDFS 來支持的罷了。換做其他的分散式文件系統也是一樣的,不影響 HBase 的本質。甚至如果你不考慮文件系統的分散式或穩定性等特性的話,完全可以用簡單的本地文件系統,甚至內存文件系統來代替。只不過這樣做的意義就另當別論了

HBase 在 HDFS 之上提供了:

1、高並發實時隨機寫,通過 LSM(內存+順序寫磁碟)的方式提供了 HDFS 所不擁有的實時隨機寫及修改功能

2、高並發實時點讀及掃描

了解一下 LSM 演算法,就能知道為啥在文件系統之上要有資料庫了

總之,在業務層面,HBase 完全可以獨立於 HDFS 來理解


相比HDFS而言,HBase通過更加複雜的「數據結構和演算法」實現了高效的隨機讀寫功能。

HDFS不支持隨機寫,而且它是為大文件而設計的。實際中,很多場景下需要小數據的隨機操作,例如

url weight language location
cn.com.sina.news/o/2016-04-05/doc-ifxqxcnr5285010.shtml 78 zh-cn china
com.google.mail 98 en us
com.google.www/intl/en/policies/privacy 99 en us
com.zhihu.www/question/41352454 88 zh-cn china

HBase的典型場景就是一個表格資料庫,如上所述,這個表的用戶可能隨時在表的隨機位置插入、更新、讀取一個值。這個需求,HDFS就搞不定,也是HBase存在的價值。

可以看看GFS和Bigtable論文。


推薦閱讀:

UWP 的應用程序存儲區有什麼區別?
不在系統中"彈出"U盤就拔出U盤,是否會損壞U盤?
怎麼讓我媽媽相信把文件存在網上沒有安全問題?
內存條改造為U盤可行嗎?
如何建立一個自己的資源庫 搜索關鍵字就能找到相應資源?

TAG:文件系統 | HBase | 數據存儲技術 |