HBase簡介
各位小夥伴們,又到了每周分享java&大數據技術的時間,這一次我給大家分享的是hbase技術。那麽hbase到底是一個什麽樣的技術,他又能拿來幹嘛用的呢?接下來就讓我們一起來學習這個技術吧~~。今天要講的是第一輯:HBase簡介。
HBase簡介
在學習hbase之前,我們先了解一下hadoop的生態系統
HBase-Hadoop Database,是一個高可靠性、高性能、面向列、可伸縮、實時讀寫的分布式數據庫。
在Hadoop生態圈中,它是其中一部分且利用Hadoop HDFS作為其文件存儲系統,利用Hadoop MapReduce來處理HBase中的海量數據,利用Zookeeper作為其分布式協同服務,主要用來存儲非結構化和半結構化的松散數據(NoSQL非關系型數據庫有redis、MongoDB等)。
而我們的HBase就是這樣一個非關系型數據庫。
簡單來說,關系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系所組成的一個數據組織。
1.1關系型數據庫優點與瓶頸
1.1.1關系型數據庫的3大優點:
- 容易理解:二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更容易理解
- 使用方便:通用的SQL語言使得操作關系型數據庫非常方便
- 易於維護:豐富的完整性,大大減低了數據冗余和數據不一致的概率
1.1.2關系型數據庫的3大瓶頸:
- 高並發讀寫需求:網站的用戶並發性非常高,往往達到每秒上萬次讀寫請求,對於傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸,並且很難能做到數據的強一致性。
- 海量數據的讀寫性能低:網站每天產生的數據量是巨大的,對於關系型數據庫來說,在一張包含海量數據的表中查詢,效率是非常低的。
- 擴展性和可用性差:在基於web的結構當中,數據庫是最難(但是可以)進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移。
當然,對網站來說,關系型數據庫的很多特性不再需要了,比如:事務一致性、讀寫實時性 。在關系型數據庫中,導致性能欠佳的最主要原因是多表的關聯查詢,以及復雜的數據分析類型的復雜SQL報表查詢。為了保證數據庫的ACID特性,我們必須盡量按照其要求的範式進行設計,關系型數據庫中的表都是存儲一個格式化的數據結構。
1.2 NoSQL非關系型數據庫
非關系型數據庫提出另一種理念,例如:以keyvalue鍵值對存儲,且結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會局限於固定的結構,可以減少一些時間和空間的開銷。 使用這種方式,用戶可以根據需要去添加自己需要的字段,這樣,為了獲取用戶的不同信息,不需要像關系型數據庫中,要對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢。
1.2.1非關系型數據庫特點:
1.一般不支持ACID特性,無需經過SQL解析,讀寫性能高
2. 存儲格式:key value,文檔,圖片等等
3. 數據沒有耦合性,容易擴展
但非關系型數據庫由於很少的約束,他也不能夠提供像SQL所提供的where這種對於字段屬性值情況的查詢。並且難以體現設計的完整性。他只適合存儲一些較為簡單的數據,對於需要進行較復雜查詢的數據,SQL數據庫顯的更為合適。
1.2.2非關系型數據庫分類
由於非關系型數據庫本身天然的多樣性,以及出現的時間較短,因此,不像關系型數據庫,有幾種數據庫能夠一統江山,非關系型數據庫非常多,並且大部分都是開源的。
這些數據庫中,其實實現大部分都比較簡單,除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,因此,對於該類應用,具有極高的性能。
依據結構化方法以及應用場合的不同,主要分為以下幾類:
- 面向高性能並發讀寫的key-value數據庫:Redis, Flare ,Tokyo Cabinet,
- 面向海量數據訪問的文檔數據庫:MongoDB以及CouchDB,可以在海量的數據中快速的查詢數據
- 面向可擴展性的分布式數據庫:這類數據庫想解決的問題就是傳統數據庫存在可擴展性上的缺陷,這類數據庫可以適應數據量的增加以及數據結構的變化
以下是關系型數據庫和非關系型數據庫的對比圖:
接下來將分享HBase第2輯《HBase數據模型》,請多多關註。有關java或大數據技術文章歡迎查閱上海尚學堂網站。
HBase簡介