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盤可行嗎?
※如何建立一個自己的資源庫 搜索關鍵字就能找到相應資源?