HBase篇(1)-特性與應用場景

每日五分鐘搞定大數據】系列,HBase第一篇html

結束了Zookeeper篇, 接下來咱們來講下Google三駕馬車之一BigTable的開源實現:HBase,要講的內容暫定以下:
數據庫

這是第一篇咱們先不聊技術實現,只討論特性和場景併發

hbase的特色

  • 千萬級高併發
  • PB級存儲
  • 非結構化存儲
  • 動態列,稀疏列
  • 支持二級索引
  • 強一致性,可靠性,擴展性(CP系統,可用性作了一點讓步)

場景

1. 寫密集型應用,天天寫入量巨大,而相對讀數量較小的應用分佈式

2. 不須要複雜查詢條件來查詢數據的應用高併發

使用rowkey,單條記錄或者小範圍的查詢性能不錯,大範圍的查詢因爲分佈式的緣由,可能在性能上有點影響。性能

使用HBase的過濾器的話性能比較差。大數據

3. 不須要關聯的場景,HBase爲NoSQL沒法支持join設計

4. 可靠性要求高日誌

master支持主備熱切。code

regionServer宕機,region會分配給在線的機器。

數據持久化在HDFS,默認3份,HDFS保證數據可靠性。

內存的數據若丟失能夠經過Wal預寫日誌恢復。

5. 數據量較大,並且增加量沒法預估的應用

HBase支持在線擴展,即便在一段時間內數據量呈井噴式增加,也能夠經過HBase橫向擴展來知足功能。

應用

  • 對象存儲系統

HBase MOB(Medium Object Storage),中等對象存儲是hbase-2.0.0版本引入的新特性,用於解決hbase存儲中等文件(0.1m~10m)性能差的問題。這個特性適合將圖片、文檔、PDF、小視頻存儲到Hbase中。

  • OLAP的存儲

Kylin的底層用的是HBase的存儲,看中的是它的高併發和海量存儲能力。kylin構建cube的過程會產生大量的預聚合中間數據,數據膨脹率高,對數據庫的存儲能力有很高要求。

Phoenix是構建在HBase上的一個SQL引擎,經過phoenix能夠直接調用JDBC接口操做Hbase,雖然有upsert操做,可是更多的是用在OLAP場景,缺點是很是不靈活。

  • 時序型數據

openTsDB應用,記錄以及展現指標在各個時間點的數值,通常用於監控的場景,是HBase上層的一個應用。

  • 用戶畫像系統

動態列,稀疏列的特性。用於描述用戶特徵的維度數是不定的且可能會動態增加的(好比愛好,性別,住址等);不是每一個特徵維度都會有數據

  • 消息/訂單系統

強一致性,良好的讀性能,至於hbase如何保證強一致性的後面的文章會詳細說明。

  • feed流系統存儲

見下面的一波分析。

feed流系統

前幾天聽說支持八個一線明星併發出軌的微博掛了....蹭個熱度,上面的系統我就不一一說了,你們應該知道微博是典型的feed流系統,那咱們來詳細說下feed流系統。

什麼是feed流系統

feed流系統有三個概念,如圖(來自雲棲社區)

feed:

一個終端發佈的一些內容

  • 能夠是用戶發佈的動態消息
  • 能夠是廣告系統推薦的廣告
  • 也能夠是系統自己推薦的一些公告

好比你在微博發了條動態,那這條動態就是feed

feeds流;

feeds流就是系統實時推送的根據了必定規則排序的信息流

好比你刷了下微博,在你的首頁出現了按時間排好序的一堆新消息,那這就是feed流

feeds訂閱;

這個比較簡單,就是你經過應用,微博,朋友圈這些,關注了某我的,那就是訂閱了Ta的feeds

Feed流系統的存儲

Feed流系統中須要存儲的內容大體能夠分爲兩部分,

  • 帳號關係數據(好比關注列表)
  • Feed消息內容

其實有不少方案實現,可是這篇說的是HBase,那咱們就說說如何用HBase實現。

關注列表

關注列表就不重點討論了,數據特色是:列數量不定,量大,關係簡單,有序,性能要求高,可靠性要求高。互相關注,單向關注這種場景用二級索引很好實現。

Feed消息

數據的特色:

1.讀多寫少,舉個栗子,看我文章的人裏面有多少人是暗中觀察的,不評論不點贊本身也不發文章的,這樣「暗中觀察」的同窗佔總用戶的比例是很大的。

2.數據模型簡單,消息時間,消息體,發佈人,訂閱人,不多會有須要關聯的場景

3.高併發,波峯波谷式訪問,Feed流系統屬於社交類系統,熱點來得快去得也快。

4.持久化可靠性存儲
每一個人發佈的內容都是須要永久存儲且不能丟失的,存儲量會隨着時間的推移會愈來愈大。須要系統有很強的擴展性和可靠性。

5.消息排序,HBase的rowKey按字典序排序正好適用於這個場景。好比rowkey能夠設計成這樣

<userId><timestamp><feedId>

這樣獲取某個用戶發佈的消息時就能夠指定時間範圍來scan,性能不錯的同時還能保證時間線正確。

總結

從上面feed數據的特性能夠看出,HBase是適合作feed流系統的,實際生產中也確實有feed流應用是用HBase來作的存儲,

我這裏只是一個初步的討論,實際上仍是有不少細節要考慮的,光靠HBase來實現確定是遠遠不夠的,它也有不少不適用的地方,要靠開發者本身去判斷,

沒有最好的只有最合適的,但願對你們有幫助。

相關文章
相關標籤/搜索