時序數據庫 druid 簡介 之技術點 位圖索引

前面介紹了數序數據的特點, 往往是有大量的維度(dimension)。每個具體的位圖, 其可能的取值相對於數據總量來說往往並不多, 但是查詢經常涉及到很多維度的組合。舉個例子, 假設數據是中國的人口數據, 有一個維度是年齡。 那麼這個維度的可能值不會超過150個, 還有一個維度是所在區域, 如果省級區域的話也就三十來個。維度本身的取值不多, 可是查詢的時候往往是一種組合。 比如青海省20-30歲之間的人。 那麼能快速適應這類查詢的技術就是位圖索引。 下面介紹一下位圖索引。請大家注意, 我們討論過程假設數據和索引都在內存, 因爲如果涉及機械盤的隨機IO, 情況就會發生變化。

假設我們有64條數據編號分別爲1到64,每條數據都表示一個人口信息, 有這個人的年齡, 所屬區域, 性別等屬性。那麼我們可以對所有在青海地區的人建立一個位圖索引。使用一個64爲的int, 每一位對應一條數據, 如果這個人是青海的, 對應的位就置1, 否則置0. 然後我們再對這組數據的性別建立位圖索引, 同理, 男的置1,女的置0.

現在我們要查詢青海地區的男性, 怎麼做呢? 只要上面兩個位圖做&操作就可以了。位圖索引可以很方便的完成這些操作, 可是位圖索引太大了, 屬性值上大部分數據都是0, 所以位圖索引可以壓縮。好消息是隻要壓縮方法得當, 壓縮後的位圖索引仍舊能夠進行位操作。 詳細信息請查詢相關文獻(去google 上搜 concise compress)。

特別提到大家要考慮數據和索引都在內存中, 這是因爲數據本身無法做到按照維度連續存儲(維度太多了, 不可能讓數據冗餘那麼多份)。所以通過位圖索引查找後, 取元數據的過程還是一個隨機訪問過程。而磁盤的隨機IO性能實在太差。

大家回顧一下druid 總體介紹的時候提到 historical node 會把數據從 deep storage 中 load 到本地。除非你本地使用ssd, 不然還是配置足夠的內存,保證 historical node 可以把數據都 load 到內存中吧。


廣告插播:

大數據處理招聘:

要求算法,數據結構等基礎知識紮實

具有良好的編程功底

瞭解大數據解決方案

有過高併發高壓力系統設計開發經驗

熟練使用Linux系統,瞭解Linux內核


工作地點: 大連

工作內容: line 相關大數據處理

聯繫方式 簡歷發送至    dl_server_developer_recruit%nhn.com


喜歡工作上有壓力有挑戰, 生活上愜意舒適的朋友, 大連歡迎你


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章