apache kylin 是hadoop大資料平台的乙個開源olap引擎。採用多位立方體預計算技術,可以將大資料sql查詢速度達到亞秒級別。其實就是資料立方的一種實現,可以參考韓家偉的《資料探勘·概念與技術》裡面對資料立方有詳細介紹。
簡單來說資料立方就是以空間換時間,通過定義一系列的緯度,對每個緯度的組合進行預先計算並儲存。有n個緯度,就會有2的n次種組合。所以最好控制好緯度的數量,因為儲存量會隨著緯度的增加**式的增長。後面文章會寫下cube的總結(假裝有鏈結)。
1. 強制維度:如果乙個維度被定義為強制維度,那麼這個分組產生的所有cuboid中每乙個cuboid都會包含這個維度。
2.層級維度:假設乙個層級中包含d1,d2,...dn這n個維度,那麼該分組產生的任何cuboid中,這n個維度只會以(),(d1),(d1,d2)....(d1,d2,....dn)這n+1種形式中的一種出現。
1.date 三位元組
2.time 四位元組
3.integer 需要提供「length」來代表需要多少個位元組
4.dict 會為該維度建立乙個字典,適合基數小且長度較大情況
5.fixed-length
幾個重要的概念: 維度:觀察資料的角度,資料庫中的乙個屬性。(如時間,地區,商品id)
度量:度量就是被聚合的統計值。(如count,sum)
緯度的基數(cardinality):該緯度在資料集中出現不同值的個數。
事實表(fact table):真正儲存資料的表
維度表(dimension table)
kylin只支援星型模型,即一張事實表對應多張緯度表
一般用外來鍵建立對映關係
建立方式有:全量構建,增量構建,流式構建
剪枝優化的工具有:使用聚合組,使用衍生維度
聚合組:假設乙個cube所有的維度均可以根據業務需求劃分成若干組,由於同一組內維度更可能同時被同乙個查詢用到,因此會表現出更加緊密的內在聯絡。對於每個分組內部的維度,使用者可以使用如下三種方式定義他們之間的關係:
衍生維度(derived):某些維度(如周)是可以從其他維度推導而來,設為衍生維度不會在cube中直接存在,而是具體計算,利用時間換空間。
rowkey優化:最終儲存到hbase的資料,rowkey和值,rowkey由各個維度拼接而成,資料就是度量。所以用得多的維度盡量放到前面,基數高的維度,如果查詢會有這個維度的過濾,則向前調
編碼:按維度分片:預設情況下分片(region)策略是隨機的,我們無法控制哪些行會被分到同乙個分片中。這種策略能夠提高提取的併發程度,但是仍然有優化空間。按維度分片提供了一種更加高效的分片策略,簡單地說,如果cuboid中某兩行的shard by dimension的值相同,那麼無論這個cuboid最終會被劃分成多少個分片,這兩行資料必然會被分配到同乙個分片中。
度量精度:當業務可以接受較低的一些精度時,可以對度量精度進行配置以優化,減少占用空間和執行開銷。
併發粒度優化:當segment中某個cuboid大小超過一定閾值時,系統會將該cuboid的資料分片到多個分割槽中,以實現cuboid資料讀取的並行化,從而優化查詢速度。引數: kylin.hbase.region.out ,也可以設範圍:kylin.hbase.region.out.min和kylin.hbase.region.out.max
可擴充套件性。1.3版本以前kylin極度依賴於hive,mr,hbase。1.5版本後對介面進行了剝離,利用介面卡模式可以修改資料來源,計算引擎,儲存。
MySQL的一些重要概念
1 索引 主鍵 primary key 唯一鍵 unique 的區別 1 主鍵就是索引與唯一的結合 2 索引是為了讓資料檢索更快。3 唯一鍵約束此欄位不能有相同值,這樣能優化索引。4 全文搜尋是為了like關鍵字設計的 2 合理建立索引的建議 1 越小的資料型別通常更好 越小的資料型別通常在磁碟 記...
13 一些重要的概念 2019 05 22
1 source 預設情況下,elasticsearch 裡面有2份內容,乙份是原始文件,也就是 source 欄位裡的內容,我們在 elasticsearch 中搜尋文件,檢視的文件內容就是 source 中的內容。另乙份是倒排索引,倒排索引中的資料結構是倒排記錄表,記錄了詞項和文件之間的對應關係...
一些TDD概念總結
回歸 新新增的 破壞了應用原本可以正常使用的功能 意外失敗 測試時意外失敗了,意味著測試中又錯誤,或者測試的時候發現了乙個回歸,因此要在 中修正 遇紅 變綠 重構 tdd 流程的一種描述方式 先編寫 測試看他失敗 遇紅 然後寫少量 讓他通過 變綠 最後重構,改進實現方式 三角法 新增乙個測試,專門為...