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