druid的資料結構
druid資料儲存結構可以分為三層: 1. datasource 2. chunk 3. segment
datasource相當於傳統資料庫的按時間分割槽的表,chunk相當於mysql中的按時間分割槽的表乙個分割槽,但是chunk不是乙個實體,只是乙個虛擬的概念,乙個chunk中可以有多個segment。 在最終落地的檔案結構(可以存在本地檔案、hdfs中)中,乙個datasource占用乙個目錄,該目錄下包含若干個segment檔案,segment檔名中包含該segment所屬的datasource名、內含資料的時間區間、分割槽序號,每個segment都是乙個壓縮檔案。 druid的datasource本身不維護元資料,每乙個segment內部包含了該segment的所有列資訊;乙個datasource下的各segment的字段可以不同,druid允許在同乙個datasource下存放不同字段數、欄位名的segment,在做資料入庫的時候不做格式合法性檢查,查詢的時候針對缺失字段提供預設行為(缺失的數值型字段取預設值0,缺失的字串型字段取預設值null)。
segment的資料結構
segment的字段分為三類: 1. timestamp 2. dimension 3. metric
timestamp是固定字段,每個segment都必須有乙個timestamp型別字段,欄位名可以由使用者指定;dimension是維度字段,可以是數值型、字串型;metric是指標字段,必須是數值型。 druid的資料是按列儲存的,每一列的所有資料都儲存在一段連續的檔案位址內,執行查詢的時候只需要訪問相關的列即可,而且由於列內資料的儲存位址是連續的,所以讀取每一列的資料都很快。 timestamp和metric型別的列的儲存格式都比較簡單,只是單純地把所有資料按照lz4的格式壓縮儲存而已,而dimension型別的列的儲存格式比較複雜,包含如下結構: 1. 乙個把所有取值(不管dimension是什麼型別,儲存時都被視為是字串型別)和連續的數字id一一匹配的字典 2. 該列的所有行的取值對應的數字id按順序儲存 3. 乙個倒排索引字典,key是該列的所有取值,value是乙個列表,如果第n行的該列取值為key,則該列表的第n項就是1,否則是0
這些資料結構都是為提高查詢速度而服務的,第一條是基礎,第二條在處理groupby/topn這類查詢時效率很高,第三條(倒排索引)在處理查詢的and/or的聯合篩選時效率很高。 示例如下:
1: dictionary that encodes column values
"justin bieber": 0,
"ke$ha": 1
2: column data
[0,0,
1,1]
3: bitmaps - one for each unique value of the column
value="justin bieber": [1,1,0,0]
value="ke$ha": [0,0,1,1]
druid字段級 Druid中sql解析
基於druid解析查詢sql,在jdbc api基礎上進行外掛程式開發的時候需要。import com.alibaba.druid.sql.sqlutils import com.alibaba.druid.sql.ast.statement.sqlselect import com.alibaba...
Druid是什麼和Druid的介紹
druid的簡介 druid首先是乙個資料庫連線池。druid是目前最好的資料庫連線池,在功能 效能 擴充套件性方面,都超過其他資料庫連線池,包括dbcp c3p0 bonecp proxool jboss datasource。druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規...
Druid是什麼和Druid的介紹
druid的簡介 druid首先是乙個資料庫連線池。druid是目前最好的資料庫連線池,在功能 效能 擴充套件性方面,都超過其他資料庫連線池,包括dbcp c3p0 bonecp proxool jboss datasource。druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規...