【每日五分鐘搞定大資料】系列,hbase第一篇
講完了zookeeper, 接下來我們來說下google三駕馬車之一bigtable的開源實現:hbase,要講得內容如下:1. 寫密集型應用,每天寫入量巨大,而相對讀數量較小的應用2. 不需要複雜查詢條件來查詢資料的應用使用rowkey,單條記錄或者小範圍的查詢效能不錯,大範圍的查詢由於分布式的原因,可能在效能上有點影響。
使用hbase的過濾器的話效能比較差。
3. 不需要關聯的場景,hbase為nosql無法支援join
4. 可靠性要求高
master支援主備熱切。
資料持久化在hdfs,預設3份,hdfs保證資料可靠性。
記憶體的資料若丟失可以通過wal預寫日誌恢復。
5. 資料量較大,而且增長量無法預估的應用
kylin的底層用的是hbase的儲存,看中的是它的高併發和海量儲存能力。kylin構建cube的過程會產生大量的預聚合中間資料,資料膨脹率高,對資料庫的儲存能力有很高要求。
phoenix是構建在hbase上的乙個sql引擎,通過phoenix可以直接呼叫jdbc介面操作hbase,雖然有upsert操作,但是更多的是用在olap場景,缺點是非常不靈活。
opentsdb應用,記錄以及展示指標在各個時間點的數值,一般用於監控的場景,是hbase上層的乙個應用。
動態列,稀疏列的特性。用於描述使用者特徵的維度數是不定的且可能會動態增長的(比如愛好,性別,住址等);不是每個特徵維度都會有資料
強一致性,良好的讀效能,至於hbase如何保證強一致性的後面的文章會詳細說明。
見下面的一波分析。
前幾天據說支援八個一線明星併發出軌的微博掛了....蹭個熱度,上面的系統我就不一一說了,大家應該知道微博是典型的feed流系統,那我們來詳細說下feed流系統。feed流系統有三個概念,如圖(來自雲棲社群)
乙個終端發布的一些內容
比如你在微博發了條動態,那這條動態就是feed
feeds流;
feeds流就是系統實時推送的根據了一定規則排序的資訊流
比如你刷了下微博,在你的首頁出現了按時間排好序的一堆新訊息,那這就是feed流
feeds訂閱;
這個比較簡單,就是你通過應用,微博,朋友圈這些,關注了某個人,那就是訂閱了ta的feeds
feed流系統中需要儲存的內容大致可以分為兩部分,
其實有很多方案實現,但是這篇說的是hbase,那我們就說說如何用hbase實現。
資料的特點:
2.資料模型簡單,訊息時間,訊息體,發布人,訂閱人,很少會有需要關聯的場景
3.高併發,波峰波谷式訪問,feed流系統屬於社交類系統,熱點來得快去得也快。
4.持久化可靠性儲存
每個人發布的內容都是需要永久儲存且不能丟失的,儲存量會隨著時間的推移會越來越大。需要系統有很強的擴充套件性和可靠性。
5.訊息排序,hbase的rowkey按字典序排序正好適用於這個場景。比如rowkey可以設計成這樣
這樣獲取某個使用者發布的訊息時就可以指定時間範圍來scan,效能不錯的同時還能保證時間線正確。
從上面feed資料的特性可以看出,hbase是適合做feed流系統的,實際生產中也確實有feed流應用是用hbase來做的儲存,
我這裡只是乙個初步的討論,實際上還是有很多細節要考慮的,光靠hbase來實現肯定是遠遠不夠的,它也有很多不適用的地方,要靠開發者自己去判斷,
沒有最好的只有最合適的,希望對大家有幫助。
Hbase的應用場景
首先,要確認有足夠多的資料存入hbase。hbase是乙個高可靠性 高效能 列儲存 可伸縮 實時讀寫的分布式資料庫系統。如 果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選 擇,這種情況下應當選擇傳統的關...
應用場景之 區別篇
是否存在區別 is dir 存在資料夾,返回true if file 存在檔案,返回true file exists is dir is file 可以判斷目錄存在.和檔案存在 執行效率非常低 類是否存在 class exists 方法是否存在function exists 存在就把時區傳遞過去,先...
設計模式應用場景
設計模式應用場景 1 command 建立和執行事務 實體上的解耦 時間上的解耦 undo方法 2 active object模式 該模式與command模式結合 實現多執行緒控制的一項古老的技術,為許多任務業系統提供了乙個簡單的多工核心。3 template method 與 strategy 分...