Druid是什么
Apache Druid是一個(gè)實(shí)時(shí)分析型數(shù)據(jù)庫(kù)钉鸯,旨在對(duì)大型數(shù)據(jù)集進(jìn)行快速的查詢分析("OLAP"查詢)庸毫。Druid最常被當(dāng)做數(shù)據(jù)庫(kù)來(lái)用以支持實(shí)時(shí)攝取、高性能查詢和高穩(wěn)定運(yùn)行的應(yīng)用場(chǎng)景基协,同時(shí)匈织,Druid也通常被用來(lái)助力分析型應(yīng)用的圖形化界面,或者當(dāng)做需要快速聚合的高并發(fā)后端API弦蹂,Druid最適合應(yīng)用于面向事件類型的數(shù)據(jù)。
Druid通常應(yīng)用于以下場(chǎng)景:
點(diǎn)擊流分析(Web端和移動(dòng)端)
網(wǎng)絡(luò)監(jiān)測(cè)分析(網(wǎng)絡(luò)性能監(jiān)控)
服務(wù)指標(biāo)存儲(chǔ)
供應(yīng)鏈分析(制造類指標(biāo))
應(yīng)用性能指標(biāo)分析
數(shù)字廣告分析
商務(wù)智能 / OLAP
Druid的核心架構(gòu)吸收和結(jié)合了數(shù)據(jù)倉(cāng)庫(kù)强窖、時(shí)序數(shù)據(jù)庫(kù)以及檢索系統(tǒng))的優(yōu)勢(shì)盈匾,其主要特征如下:
列式存儲(chǔ),Druid使用列式存儲(chǔ)毕骡,這意味著在一個(gè)特定的數(shù)據(jù)查詢中它只需要查詢特定的列削饵,這樣極地提高了部分列查詢場(chǎng)景的性能。另外未巫,每一列數(shù)據(jù)都針對(duì)特定數(shù)據(jù)類型做了優(yōu)化存儲(chǔ)窿撬,從而支持快速的掃描和聚合。
可擴(kuò)展的分布式系統(tǒng)叙凡,Druid通常部署在數(shù)十到數(shù)百臺(tái)服務(wù)器的集群中劈伴,并且可以提供每秒數(shù)百萬(wàn)條記錄的接收速率,數(shù)萬(wàn)億條記錄的保留存儲(chǔ)以及亞秒級(jí)到幾秒的查詢延遲。
大規(guī)模并行處理跛璧,Druid可以在整個(gè)集群中并行處理查詢严里。
實(shí)時(shí)或批量攝取,Druid可以實(shí)時(shí)(已經(jīng)被攝取的數(shù)據(jù)可立即用于查詢)或批量攝取數(shù)據(jù)追城。
自修復(fù)刹碾、自平衡、易于操作座柱,作為集群運(yùn)維操作人員迷帜,要伸縮集群只需添加或刪除服務(wù),集群就會(huì)在后臺(tái)自動(dòng)重新平衡自身色洞,而不會(huì)造成任何停機(jī)戏锹。如果任何一臺(tái)Druid服務(wù)器發(fā)生故障,系統(tǒng)將自動(dòng)繞過(guò)損壞火诸。 Druid設(shè)計(jì)為7*24全天候運(yùn)行锦针,無(wú)需出于任何原因而導(dǎo)致計(jì)劃內(nèi)停機(jī),包括配置更改和軟件更新置蜀。
不會(huì)丟失數(shù)據(jù)的云原生容錯(cuò)架構(gòu)伞插,一旦Druid攝取了數(shù)據(jù),副本就安全地存儲(chǔ)在深度存儲(chǔ)介質(zhì)(通常是云存儲(chǔ)盾碗,HDFS或共享文件系統(tǒng))中。即使某個(gè)Druid服務(wù)發(fā)生故障舀瓢,也可以從深度存儲(chǔ)中恢復(fù)您的數(shù)據(jù)廷雅。對(duì)于僅影響少數(shù)Druid服務(wù)的有限故障,副本可確保在系統(tǒng)恢復(fù)時(shí)仍然可以進(jìn)行查詢京髓。
用于快速過(guò)濾的索引航缀,Druid使用CONCISE或Roaring壓縮的位圖索引來(lái)創(chuàng)建索引,以支持快速過(guò)濾和跨多列搜索堰怨。
基于時(shí)間的分區(qū)芥玉,Druid首先按時(shí)間對(duì)數(shù)據(jù)進(jìn)行分區(qū),另外同時(shí)可以根據(jù)其他字段進(jìn)行分區(qū)备图。這意味著基于時(shí)間的查詢將僅訪問(wèn)與查詢時(shí)間范圍匹配的分區(qū)灿巧,這將大大提高基于時(shí)間的數(shù)據(jù)的性能。
近似算法揽涮,Druid應(yīng)用了近似count-distinct抠藕,近似排序以及近似直方圖和分位數(shù)計(jì)算的算法。這些算法占用有限的內(nèi)存使用量蒋困,通常比精確計(jì)算要快得多盾似。對(duì)于精度要求比速度更重要的場(chǎng)景,Druid還提供了精確count-distinct和精確排序雪标。
攝取時(shí)自動(dòng)匯總聚合零院,Druid支持在數(shù)據(jù)攝取階段可選地進(jìn)行數(shù)據(jù)匯總溉跃,這種匯總會(huì)部分預(yù)先聚合您的數(shù)據(jù),并可以節(jié)省大量成本并提高性能告抄。
什么場(chǎng)景下應(yīng)該使用Druid
許多公司都已經(jīng)將Druid應(yīng)用于多種不同的應(yīng)用場(chǎng)景撰茎,詳情可查看Powered by Apache Druid頁(yè)面。
如果您的使用場(chǎng)景符合以下的幾個(gè)特征玄妈,那么Druid是一個(gè)非常不錯(cuò)的選擇:
數(shù)據(jù)插入頻率比較高乾吻,但較少更新數(shù)據(jù)
大多數(shù)查詢場(chǎng)景為聚合查詢和分組查詢(GroupBy),同時(shí)還有一定得檢索與掃描查詢
將數(shù)據(jù)查詢延遲目標(biāo)定位100毫秒到幾秒鐘之間
數(shù)據(jù)具有時(shí)間屬性(Druid針對(duì)時(shí)間做了優(yōu)化和設(shè)計(jì))
在多表場(chǎng)景下拟蜻,每次查詢僅命中一個(gè)大的分布式表绎签,查詢又可能命中多個(gè)較小的lookup表
場(chǎng)景中包含高基維度數(shù)據(jù)列(例如URL,用戶ID等)酝锅,并且需要對(duì)其進(jìn)行快速計(jì)數(shù)和排序
需要從Kafka诡必、HDFS、對(duì)象存儲(chǔ)(如Amazon S3)中加載數(shù)據(jù)
如果您的使用場(chǎng)景符合以下特征搔扁,那么使用Druid可能是一個(gè)不好的選擇:
根據(jù)主鍵對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行低延遲更新操作爸舒。Druid支持流式插入,但不支持流式更新(更新操作是通過(guò)后臺(tái)批處理作業(yè)完成)
延遲不重要的離線數(shù)據(jù)系統(tǒng)
場(chǎng)景中包括大連接(將一個(gè)大事實(shí)表連接到另一個(gè)大事實(shí)表)稿蹲,并且可以接受花費(fèi)很長(zhǎng)時(shí)間來(lái)完成這些查詢