文章目錄
- 前言
- Druid
- 主要特性
- 基礎(chǔ)概念
-- 數(shù)據(jù)格式
-- 數(shù)據(jù)攝入
-- 數(shù)據(jù)存儲(chǔ)
-- 數(shù)據(jù)查詢
-- 查詢類型
-- 架構(gòu)
-- 運(yùn)維 - OLAP方案對(duì)比
- 使用場(chǎng)景
- 使用建議
- 參考
- 近期主題
前言
項(xiàng)目早期、數(shù)據(jù)(報(bào)表分析)的生產(chǎn)潦匈、存儲(chǔ)和獲取業(yè)務(wù)眼姐,MySQL基本上可以滿足需要喊暖,但是隨著業(yè)務(wù)的快速增長(zhǎng)初肉,數(shù)據(jù)量翻至億為單位時(shí)析校,MySQL無(wú)法滿足例如:快速實(shí)時(shí)返回“分組+聚合計(jì)算+排序聚合指標(biāo)”查詢需求皿哨。記得還是2017年之后映琳,對(duì)當(dāng)時(shí)的幾款OLAP進(jìn)行了調(diào)研机隙,用線上數(shù)據(jù)訓(xùn)練蜘拉。當(dāng)時(shí)Druid在性能和功能上基本上能夠滿足需要,下面介紹一下Apache Druid有鹿。
Druid介紹
Apache Druid 是一個(gè)高性能實(shí)時(shí)分析數(shù)據(jù)庫(kù)旭旭,在復(fù)雜的海量數(shù)據(jù)下進(jìn)行交互式實(shí)時(shí)數(shù)據(jù)展現(xiàn)的OLAP工具。能夠處理TB級(jí)別數(shù)據(jù)葱跋,毫秒級(jí)響應(yīng)持寄。目前國(guó)內(nèi)在使用的公司有:阿里、滴滴娱俺、知乎稍味、360、eBay荠卷,Hulu等模庐。官方網(wǎng)址:http://druid.io
主要特性
- 開(kāi)源、列式存儲(chǔ)油宜,預(yù)聚合
- 實(shí)時(shí)流式和批量數(shù)據(jù)攝入
- 靈活的數(shù)據(jù)模式掂碱、支持SQL查詢
- 擴(kuò)展方便,容易運(yùn)維
- TB慎冤,PB級(jí)別的數(shù)據(jù)處理
基礎(chǔ)概念
數(shù)據(jù)格式
數(shù)據(jù)源:datasource疼燥,datasource的結(jié)構(gòu)有:時(shí)間列(timestamp)、維度列(Dimension)和指標(biāo)列(Metric)
時(shí)間列:將時(shí)間相近的一些數(shù)據(jù)聚合在一起粪薛,查詢的時(shí)候指定時(shí)間范圍
維度列:標(biāo)識(shí)一些統(tǒng)計(jì)的維度悴了,比如:名稱、類別等
指標(biāo)列:用于聚合和計(jì)算的列违寿,比如:訪問(wèn)總數(shù)湃交、合計(jì)金額等
數(shù)據(jù)攝入
同時(shí)支持流式和批量數(shù)據(jù)攝入。通常通過(guò)像 Kafka 這樣的消息總線(加載流式數(shù)據(jù))或通過(guò)像 HDFS 這樣的分布式文件系統(tǒng)(加載批量數(shù)據(jù))來(lái)連接原始數(shù)據(jù)源藤巢。
?
Druid 通過(guò) Indexing 處理將原始數(shù)據(jù)以 segment 的方式存儲(chǔ)在數(shù)據(jù)節(jié)點(diǎn)搞莺,segment 是一種查詢優(yōu)化的數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)存儲(chǔ)
Druid 采用列式存儲(chǔ)掂咒。根據(jù)不同列的數(shù)據(jù)類型(string才沧,number 等),Druid 對(duì)其使用不同的壓縮和編碼方式绍刮。Druid 也會(huì)針對(duì)不同的列類型構(gòu)建不同類型的索引温圆。
類似于檢索系統(tǒng),Druid 為 string 列創(chuàng)建反向索引孩革,以達(dá)到更快速的搜索和過(guò)濾岁歉。類似于時(shí)間序列數(shù)據(jù)庫(kù),Druid 基于時(shí)間對(duì)數(shù)據(jù)進(jìn)行智能分區(qū)膝蜈,以達(dá)到更快的基于時(shí)間的查詢锅移。
不像大多數(shù)傳統(tǒng)系統(tǒng)熔掺,Druid 可以在數(shù)據(jù)攝入前對(duì)數(shù)據(jù)進(jìn)行預(yù)聚合。這種預(yù)聚合操作被稱之為 rollup非剃,這樣就可以顯著的節(jié)省存儲(chǔ)成本置逻。
數(shù)據(jù)查詢
支持兩種查詢:JSON-HTTP,SQL兩種方式
查詢類型
Timeseries:基于時(shí)間范圍查詢的類型
TopN:基于單維度的排名查詢
GroupBy:基于多維度的分組查詢
架構(gòu)
運(yùn)維
Druid是非常健壯的系統(tǒng)备绽,Druid 擁有數(shù)據(jù)副本券坞、獨(dú)立服務(wù)、自動(dòng)數(shù)據(jù)備份和滾動(dòng)更新疯坤,以確保長(zhǎng)期運(yùn)行报慕,并保證數(shù)據(jù)不丟失。
OLAP方案對(duì)比
Druid:是一個(gè)實(shí)時(shí)處理時(shí)序數(shù)據(jù)的OLAP數(shù)據(jù)庫(kù)压怠,因?yàn)樗乃饕紫劝凑諘r(shí)間分片眠冈,查詢的時(shí)候也是按照時(shí)間線去路由索引。
Kylin:核心是Cube菌瘫,Cube是一種預(yù)計(jì)算技術(shù)蜗顽,基本思路是預(yù)先對(duì)數(shù)據(jù)作多維索引,查詢時(shí)只掃描索引而不訪問(wèn)原始數(shù)據(jù)從而提速雨让。
ES:最大的特點(diǎn)是使用了倒排索引解決索引問(wèn)題雇盖。根據(jù)研究,ES在數(shù)據(jù)獲取和聚集用的資源比在Druid高栖忠。
Spark SQL:基于Spark平臺(tái)上的一個(gè)OLAP框架崔挖,基本思路是增加機(jī)器來(lái)并行計(jì)算,從而提高查詢速度庵寞。
使用場(chǎng)景
- 廣告數(shù)據(jù)分析
- 風(fēng)控分析
- 服務(wù)器指標(biāo)存儲(chǔ)
- 應(yīng)用性能指標(biāo)
- 實(shí)時(shí)在線分析系統(tǒng) OLAP
- 實(shí)時(shí)報(bào)表分析
- 離線+實(shí)時(shí)數(shù)據(jù)源
- 行為數(shù)據(jù)分析
使用建議
- 時(shí)序化數(shù)據(jù):所有行記錄中必須有日期指標(biāo)
- OLAP并發(fā)有限狸相,不適合OLTP查詢,建議首次回源加Cache
- 目前不支持JOIN操作捐川,不支持?jǐn)?shù)據(jù)更新
- 離線數(shù)據(jù)替換前一天實(shí)時(shí)數(shù)據(jù)
- 分頁(yè)支持的不夠完善
另外脓鹃、Druid在項(xiàng)目中已經(jīng)投產(chǎn)多年,用OLAP方案解決業(yè)務(wù)上的問(wèn)題古沥,整理技術(shù)點(diǎn)為了方便相似業(yè)務(wù)同學(xué)參考和使用瘸右。
參考
https://druid.apache.org/docs/latest/design/
近期主題:
Druid在數(shù)據(jù)分析需求中的學(xué)習(xí)和應(yīng)用
Druid多種應(yīng)用場(chǎng)景的實(shí)戰(zhàn)
-
定時(shí)任務(wù)到分布式服務(wù)的演變
image