druid字段级_Druid的数据结构
Druid的數(shù)據(jù)結(jié)構(gòu)
Druid數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)可以分為三層: 1. DataSource 2. Chunk 3. Segment
DataSource相當(dāng)于傳統(tǒng)數(shù)據(jù)庫(kù)的按時(shí)間分區(qū)的表,Chunk相當(dāng)于MySQL中的按時(shí)間分區(qū)的表一個(gè)分區(qū),但是Chunk不是一個(gè)實(shí)體,只是一個(gè)虛擬的概念,一個(gè)Chunk中可以有多個(gè)Segment。 在最終落地的文件結(jié)構(gòu)(可以存在本地文件、HDFS中)中,一個(gè)DataSource占用一個(gè)目錄,該目錄下包含若干個(gè)Segment文件,Segment文件名中包含該Segment所屬的DataSource名、內(nèi)含數(shù)據(jù)的時(shí)間區(qū)間、分區(qū)序號(hào),每個(gè)Segment都是一個(gè)壓縮文件。 Druid的DataSource本身不維護(hù)元數(shù)據(jù),每一個(gè)Segment內(nèi)部包含了該Segment的所有列信息;一個(gè)DataSource下的各Segment的字段可以不同,Druid允許在同一個(gè)DataSource下存放不同字段數(shù)、字段名的Segment,在做數(shù)據(jù)入庫(kù)的時(shí)候不做格式合法性檢查,查詢(xún)的時(shí)候針對(duì)缺失字段提供默認(rèn)行為(缺失的數(shù)值型字段取默認(rèn)值0,缺失的字符串型字段取默認(rèn)值null)。
Segment的數(shù)據(jù)結(jié)構(gòu)
Segment的字段分為三類(lèi): 1. TimeStamp 2. Dimension 3. Metric
TimeStamp是固定字段,每個(gè)Segment都必須有一個(gè)TimeStamp類(lèi)型字段,字段名可以由用戶(hù)指定;Dimension是維度字段,可以是數(shù)值型、字符串型;Metric是指標(biāo)字段,必須是數(shù)值型。 Druid的數(shù)據(jù)是按列存儲(chǔ)的,每一列的所有數(shù)據(jù)都存儲(chǔ)在一段連續(xù)的文件地址內(nèi),執(zhí)行查詢(xún)的時(shí)候只需要訪(fǎng)問(wèn)相關(guān)的列即可,而且由于列內(nèi)數(shù)據(jù)的存儲(chǔ)地址是連續(xù)的,所以讀取每一列的數(shù)據(jù)都很快。 TimeStamp和Metric類(lèi)型的列的存儲(chǔ)格式都比較簡(jiǎn)單,只是單純地把所有數(shù)據(jù)按照LZ4的格式壓縮存儲(chǔ)而已,而Dimension類(lèi)型的列的存儲(chǔ)格式比較復(fù)雜,包含如下結(jié)構(gòu): 1. 一個(gè)把所有取值(不管Dimension是什么類(lèi)型,存儲(chǔ)時(shí)都被視為是字符串類(lèi)型)和連續(xù)的數(shù)字ID一一匹配的字典 2. 該列的所有行的取值對(duì)應(yīng)的數(shù)字ID按順序存儲(chǔ) 3. 一個(gè)倒排索引字典,key是該列的所有取值,value是一個(gè)列表,如果第N行的該列取值為key,則該列表的第N項(xiàng)就是1,否則是0
這些數(shù)據(jù)結(jié)構(gòu)都是為提高查詢(xún)速度而服務(wù)的,第一條是基礎(chǔ),第二條在處理groupBy/topN這類(lèi)查詢(xún)時(shí)效率很高,第三條(倒排索引)在處理查詢(xún)的AND/OR的聯(lián)合篩選時(shí)效率很高。 示例如下:
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]
總結(jié)
以上是生活随笔為你收集整理的druid字段级_Druid的数据结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pp助手手机版两种安装方法 通过电脑版或
- 下一篇: 生成drl文件_我如何通过编程方式生成.