無論是 NoSQL,還是大數(shù)據(jù)領(lǐng)域,HBase 都是非常"炙熱"的一門數(shù)據(jù)庫。本文將對 HBase 做一些基礎(chǔ)性的介紹,旨在入門。
一、簡介
HBase 是一個開源的、面向列的非關(guān)系型分布式數(shù)據(jù)庫,目前是Hadoop體系中非常關(guān)鍵的一部分。在最初,HBase是基于谷歌的 BigTable 原型實(shí)現(xiàn)的,許多技術(shù)來自于Fay Chang在2006年所撰寫的Google論文"BigTable"。與 BigTable基于Google文件系統(tǒng)(File System)一樣,HBase則是基于HDFS(Hadoop的分布式文件系統(tǒng))之上而開發(fā)的。
HBase 采用 Java 語言實(shí)現(xiàn),在其內(nèi)部實(shí)現(xiàn)了BigTable論文提到的一些壓縮算法、內(nèi)存操作和布隆過濾器等,這些能力使得HBase 在海量數(shù)據(jù)存儲、高性能讀寫場景中得到了大量應(yīng)用,如 Facebook 在 2010年11 月開始便一直選用 HBase來作為消息平臺的存儲層技術(shù)。HBase 以Apache License Version 2.0開源,這是一種對商業(yè)應(yīng)用友好的協(xié)議,同時該項(xiàng)目當(dāng)前也是Apache軟件基金會的頂級項(xiàng)目之一。
有什么特性
基于列式存儲模型,對于數(shù)據(jù)實(shí)現(xiàn)了高度壓縮,節(jié)省存儲成本
采用 LSM 機(jī)制而不是B(+)樹,這使得HBase非常適合海量數(shù)據(jù)實(shí)時寫入的場景
高可靠,一個數(shù)據(jù)會包含多個副本(默認(rèn)是3副本),這得益于HDFS的復(fù)制能力,由RegionServer提供自動故障轉(zhuǎn)移的功能
高擴(kuò)展,支持分片擴(kuò)展能力(基于Region),可實(shí)現(xiàn)自動、數(shù)據(jù)均衡
強(qiáng)一致性讀寫,數(shù)據(jù)的讀寫都針對主Region上進(jìn)行,屬于CP型的系統(tǒng)
易操作,HBase提供了Java API、RestAPI/Thrift API等接口
查詢優(yōu)化,采用Block Cache 和 布隆過濾器來支持海量數(shù)據(jù)的快速查找
與RDBMS的區(qū)別
對于傳統(tǒng) RDBMS 來說,支持 ACID 事務(wù)是數(shù)據(jù)庫的基本能力,而 HBase 則使用行級鎖來保證寫操作的原子性,但是不支持多行寫操作的事務(wù)性,這主要是從靈活性和擴(kuò)展性上做出的權(quán)衡。
ACID 要素包含 原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)以及持久性(Durability)
總體來說, HBase 與傳統(tǒng)關(guān)系數(shù)據(jù)庫的區(qū)別,如下表所示:
二、數(shù)據(jù)模型
下面,我們以關(guān)系型數(shù)據(jù)庫的一個數(shù)據(jù)表來演示 HBase 的不同之處。
先來看下面這張表:
這里記錄的是一些家庭設(shè)備上報的狀態(tài)數(shù)據(jù)(DeviceState),其中包括設(shè)備名、狀態(tài)、時間戳這些字段。
在 HBase 中,數(shù)據(jù)是按照列族(Column Family,簡稱CF)來存儲的,也就是說對于不同的列會被分開存儲到不同的文件。那么對于上面的狀態(tài)數(shù)據(jù)表來說,在HBase中會被存儲為兩份:
列族1. 設(shè)備名
列族2. 狀態(tài)
這里Row-key是唯一定位數(shù)據(jù)行的ID字段,而Row-key 加上 CF、Column-Key,再加上一個時間戳才可以定位到一個單元格數(shù)據(jù)。其中時間戳用來表示數(shù)據(jù)行的版本, 在HBase中默認(rèn)會有 3 個時間戳的版本數(shù)據(jù),這意味著對同一條數(shù)據(jù)(同一個Rowkey關(guān)聯(lián)的數(shù)據(jù))進(jìn)行寫入時,最多可以保存3個版本。
在查詢某一行的數(shù)據(jù)時,HBase需要同時從兩個列族(文件)中進(jìn)行查找,最終將結(jié)果合并后返回給客戶端。 由此可見如果列族太多,則會影響讀取的性能,在設(shè)計(jì)時就需要做一些權(quán)衡。
由此可見,HBase的使用方式與關(guān)系型數(shù)據(jù)庫是大不相同的,在使用 HBase 時需要拋棄許多關(guān)系型數(shù)據(jù)庫的思維及做法,比如強(qiáng)類型、二級索引、表連接、觸發(fā)器等等。
然而 HBase 的靈活性及高度可伸縮性卻是傳統(tǒng) RDBMS 無法比擬的。
-
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8904瀏覽量
137618 -
Hbase
+關(guān)注
關(guān)注
0文章
27瀏覽量
11192
發(fā)布評論請先 登錄
相關(guān)推薦
評論