实时OLAP分析利器Druid介绍
文章目錄
前言
Druid介紹
主要特性
基礎(chǔ)概念
數(shù)據(jù)格式
數(shù)據(jù)攝入
數(shù)據(jù)存儲
數(shù)據(jù)查詢
查詢類型
架構(gòu)
運維
OLAP方案對比
使用場景
使用建議
參考
近期主題
?
前言
項目早期、數(shù)據(jù)(報表分析)的生產(chǎn)、存儲和獲取業(yè)務(wù),MySQL基本上可以滿足需要,但是隨著業(yè)務(wù)的快速增長,數(shù)據(jù)量翻至億為單位時,MySQL無法滿足例如:快速實時返回“分組+聚合計算+排序聚合指標”查詢需求。記得還是2017年之后,對當時的幾款OLAP進行了調(diào)研,用線上數(shù)據(jù)訓練。當時Druid在性能和功能上基本上能夠滿足需要,下面介紹一下Apache Druid。
Druid介紹
Apache Druid 是一個高性能實時分析數(shù)據(jù)庫,在復雜的海量數(shù)據(jù)下進行交互式實時數(shù)據(jù)展現(xiàn)的OLAP工具。能夠處理TB級別數(shù)據(jù),毫秒級響應(yīng)。目前國內(nèi)在使用的公司有:阿里、滴滴、知乎、360、eBay,Hulu等。官方網(wǎng)址:http://druid.io
主要特性
基礎(chǔ)概念
數(shù)據(jù)格式
? ? 數(shù)據(jù)源:datasource,datasource的結(jié)構(gòu)有:時間列(timestamp)、維度列(Dimension)和指標列(Metric)
? ? 時間列:將時間相近的一些數(shù)據(jù)聚合在一起,查詢的時候指定時間范圍
? ? 維度列:標識一些統(tǒng)計的維度,比如:名稱、類別等
? ? 指標列:用于聚合和計算的列,比如:訪問總數(shù)、合計金額等
| timestamp | demensions | metric | ||||
| date | userid | username | age | sex | visits | costs |
| 2020-01-01T00:00:00Z | 100001 | 張三 | 20 | 男 | 201 | 20.10 |
| 2020-01-01T00:00:00Z | 100002 | 李四 | 21 | 男 | 160 | 16.00 |
| 2020-01-01T00:00:00Z | 100003 | 王五 | 20 | 女 | 100 | 10.00 |
數(shù)據(jù)攝入
? ? 同時支持流式和批量數(shù)據(jù)攝入。通常通過像 Kafka 這樣的消息總線(加載流式數(shù)據(jù))或通過像 HDFS 這樣的分布式文件系統(tǒng)(加載批量數(shù)據(jù))來連接原始數(shù)據(jù)源。
Druid 通過 Indexing 處理將原始數(shù)據(jù)以 segment 的方式存儲在數(shù)據(jù)節(jié)點,segment 是一種查詢優(yōu)化的數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)存儲
Druid 采用列式存儲。根據(jù)不同列的數(shù)據(jù)類型(string,number 等),Druid 對其使用不同的壓縮和編碼方式。Druid 也會針對不同的列類型構(gòu)建不同類型的索引。
類似于檢索系統(tǒng),Druid 為 string 列創(chuàng)建反向索引,以達到更快速的搜索和過濾。類似于時間序列數(shù)據(jù)庫,Druid 基于時間對數(shù)據(jù)進行智能分區(qū),以達到更快的基于時間的查詢。
不像大多數(shù)傳統(tǒng)系統(tǒng),Druid 可以在數(shù)據(jù)攝入前對數(shù)據(jù)進行預(yù)聚合。這種預(yù)聚合操作被稱之為 rollup,這樣就可以顯著的節(jié)省存儲成本。
數(shù)據(jù)查詢
? ? 支持兩種查詢:JSON-HTTP,SQL兩種方式
查詢類型
? ? Timeseries:基于時間范圍查詢的類型
? ? TopN:基于單維度的排名查詢
? ? GroupBy:基于多維度的分組查詢
架構(gòu)
運維
Druid是非常健壯的系統(tǒng),Druid 擁有數(shù)據(jù)副本、獨立服務(wù)、自動數(shù)據(jù)備份和滾動更新,以確保長期運行,并保證數(shù)據(jù)不丟失。
OLAP方案對比
| ? | Druid | Kylin | Elasticsearch | Spark SQL |
| 數(shù)據(jù)規(guī)模 | 超大 | 超大 | 中等 | 超大 |
| 查詢效率 | 高 | 高 | 中等 | 低 |
| 并發(fā)度 | 高 | 高 | 高 | 低 |
| SQL支持 | 中 | 高 | 中 | 高 |
| 靈活度 | 中 | 低 | 高 | 高 |
Druid:是一個實時處理時序數(shù)據(jù)的OLAP數(shù)據(jù)庫,因為它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。
Kylin:核心是Cube,Cube是一種預(yù)計算技術(shù),基本思路是預(yù)先對數(shù)據(jù)作多維索引,查詢時只掃描索引而不訪問原始數(shù)據(jù)從而提速。
ES:最大的特點是使用了倒排索引解決索引問題。根據(jù)研究,ES在數(shù)據(jù)獲取和聚集用的資源比在Druid高。
Spark SQL:基于Spark平臺上的一個OLAP框架,基本思路是增加機器來并行計算,從而提高查詢速度。
使用場景
- 廣告數(shù)據(jù)分析
- 風控分析
- 服務(wù)器指標存儲
- 應(yīng)用性能指標
- 實時在線分析系統(tǒng) OLAP
- 實時報表分析
- 離線+實時數(shù)據(jù)源
- 行為數(shù)據(jù)分析
使用建議
另外、Druid在項目中已經(jīng)投產(chǎn)多年,用OLAP方案解決業(yè)務(wù)上的問題,整理技術(shù)點為了方便相似業(yè)務(wù)同學參考和使用。
參考
https://druid.apache.org/docs/latest/design/
近期主題:
-
Druid在數(shù)據(jù)分析需求中的學習和應(yīng)用
-
Druid多種應(yīng)用場景的實戰(zhàn)
-
定時任務(wù)到分布式服務(wù)的演變
?
總結(jié)
以上是生活随笔為你收集整理的实时OLAP分析利器Druid介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go语言 Yaml编码和解码
- 下一篇: Druid 分析报表中的实战(一)