Druid索引與查詢原理簡析

2021-08-18 03:07:34 字數 974 閱讀 8129

druid 是乙個為在大資料集之上做實時統計分析而設計的開源資料儲存。這個系統集合了乙個面向列儲存的層,乙個分布式、shared-nothing的架構,和乙個索引結構,來達成在秒級以內對十億行級別的表進行任意的探索分析。

由於druid儲存的是時間序列資料,按列的型別,上述資料可以分為以下三類:

我們用下面一組資料來演示整個的索引和查詢原理:

druid會在匯入階段對資料進行rollup,將維度相同組合的資料進行聚合處理。rollup會使用其設定的聚合器進行聚合。

按天聚合後的資料如下(聚合後的datasource為ad_areauser):

對於聚合後的資料,如何對錶建立索引,快速的進行查詢?

我們知道資料庫常用的索引是利用b+樹建立聯合索引,但是在以上資料中,比如按area進行查詢,由於該列的基數非常低,這樣無論該錶有多少行,b+數的葉子結點都比較少,所以查詢索引的效率很低,並不一定比得上全表掃瞄。

那麼如何通過建立索引來解決這類問題呢?答案是建立位圖索引。

索引如下所示:

其實索引位圖可以看作是hashmap。該map中的key就是維度的取值,value就是該表中對應的行是否有該維度的值。

以sql查詢為例:

1)boolean條件查詢:

也就是說,符合條件的列是第一行和第二行,這兩行的metric(value)的和為26.

2)group by 查詢:

該查詢與上面的查詢不同之處在於將符合條件的列

取出來,然後在記憶體中做分組聚合。結果為:北京:26, 上海:13.

jQuery原理簡析

jquery原理簡析 function selector,context function jquery selector,context if typeof selector function 我們想要 selector 時就獲得乙個元素,且裡面有一些方法。這些方法要繫結在原型prototype上...

Android handler(原理簡析)

顯示到我們的螢幕上。此時乙個android新手上來說,那簡單啊,直接寫上網路請求獲取就行了,獲取到了再將直接放到對應的控制項上就行了啊,這有什麼值得思考的啊?修改ui只能在主 ui 執行緒中 1.我們把需要傳送的訊息打包成message物件 2.handler將打包好的message物件傳送給mes...

https原理簡析

https的工作原理 https在傳輸資料之前需要客戶端 瀏覽器 與服務端 之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。tls ssl協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,tls ssl中使用了非對稱加密,對稱加密以及hash演算法。握手過程的簡單描...