列式存儲、Hbase、Kylin


列式存儲: 區別於傳統的行式存儲,在存儲層,把同一列的數據放在一起,利於聚合查詢,不利於明細查詢、INSERT/UPDATE等。

 

Hbase: 列式存儲的一種實現

組成部件說明:

Row Key:    Table主鍵 行標識
Timestamp:    每次對數據操作對應的時間戳,即數據的version number(Hbase無法update,每次操作都是追加)
Column Family: 列簇,一個table在水平方向有一個或者多個列簇,列簇可由任意多個Column組成,可動態擴展,無須預定義數量及類型,二進制存儲,用戶需自行進行類型轉換

 

邏輯視圖:

概念視圖

物理視圖:

物理視圖 

 系統架構

  • Table中所有行都按照row key的字典序排列;
  • Table在行的方向上分割為多個Region;
  • Region按大小分割的,每個表開始只有一個region,隨着數據增多,region不斷增大,當增大到一個閥值的時候,region就會等分會兩個新的region,之后會有越來越多的region;
  • Region是Hbase中分布式存儲和負載均衡的最小單元,不同Region分布到不同RegionServer上。
  • Region是分布式存儲的最小單元,不是存儲的最小單元。在每台機器上Region由一個或者多個Store組成,每個store保存一個columns family;每個Strore又由一個memStore和0至多個StoreFile組成,StoreFile包含HFile;memStore存儲在內存中,StoreFile存儲在HDFS上。
  • MemStore 是放在內存里的,保存修改的數據即keyValues。當MemStore的大小達到一個閥值(默認64MB)時,MemStore會被Flush到文件,即生成一個快照。目前HBase會有一個線程來負責MemStore的Flush操作。
  • MemStore內存中的數據寫到文件后就是StoreFile,StoreFile底層是以HFile的格式保存。
  • HFile,HBase中KeyValue數據的存儲格式,是Hadoop的二進制格式文件。 

 

    

 

 

Kylin: 以hbase為存儲,維度做RowKey,指標做列族,支持SQL查詢的預計算服務

Rowkey可以理解為“索引”,如:0001111是把維度ABCD作為索引的一份數據集,1110001是把維度AEFG作為索引的一份數據集....

每一種“索引”都包含了全量數據,稱之為一個cuboid,如:原數據集大小為1G,有7個維度,那么預計算所有維度的結果集大小將是128G

正常的業務生產中不可能需要預計算所有維度,並且維度與維度間有可能還有內在關系(如:省市區),所以維度爆炸的問題可以通過kylin的剪枝策略避免

剪枝策略是基於業務場景和維度間的關系等多種因素減少cuboid個數的一種思路,目前Kylin可以使用的維度優化手段有以下幾種:

  • 聚集組
  • 衍生緯度(如:cityName之於cityId)
  • 強制維度(如:很多業務場景都是按天查詢的,datekey便可設為強制維度,可以把cuboid的個數由128直接降為64)
  • 層次維度(如:省-市-區)
  • 聯合維度(類似於聯合索引,業務上一定會一起作為條件去查詢的幾個維度)
  • Extended Column

 

待學習補充:

列式存儲中的壓縮存儲、非精確去重、hyperloglog、bitmap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM