什麼是Druid ?
Apache Druid是一個實時分析數據庫,旨在對大型數據集進行快速的切片和切分分析(“ OLAP ”查詢)。Druid最常用作數據庫,以支持對實時攝取,快速查詢性能和高正常運行時間很重要的用例。因此,Druid通常用於爲分析應用程序的GUI提供支持,或用作需要快速聚合的高併發API的後端。Druid最適合面向事件的數據。
Druid的常見應用領域包括:
- 點擊流分析(網絡和移動分析)
- 網絡遙測分析(網絡性能監控)
- 服務器指標存儲
- 供應鏈分析(製造指標)
- 應用程序性能指標
- 數字營銷/廣告分析
- 商業智能/ OLAP
Druid的核心架構結合了數據倉庫,時序數據庫和日誌搜索系統的思想。它的的一些主要功能是:
- 列式存儲格式。Druid使用面向列的存儲,這意味着它僅需要加載特定查詢所需的確切列。這極大地提高了僅命中幾列的查詢的速度。此外,每列都針對其特定數據類型進行了優化存儲,從而支持快速掃描和聚合。
- 可擴展的分佈式系統。Druid通常部署在數十到數百臺服務器的集羣中,並且可以提供每秒數百萬條記錄的接收速率,數萬億條記錄的保留以及亞秒級到幾秒的查詢延遲。
- 大規模並行處理。Druid可以在整個集羣中並行處理查詢。
- 實時或批量攝取。Druid可以實時(攝取的數據可立即用於查詢)或批量攝取數據。
- 自我修復,自我平衡,易於操作。作爲操作員,要擴展或擴展集羣,只需添加或刪除服務器,集羣就會在後臺自動重新平衡自身,而不會造成任何停機。如果任何Druid服務器發生故障,系統將自動繞過損壞的機器,直到可以更換這些服務器爲止。Druid設計爲24/7全天候運行,而無需出於任何原因而導致計劃內的停機,包括配置更改和軟件更新。
- 雲原生的容錯架構,不會丟失數據。一旦Druid攝取了數據,就會在在深度存儲(通常是雲存儲,HDFS或共享文件系統)中創建一個副本。即使全部的Druid服務器發生故障,也可以從深度存儲中恢復您的數據。對於僅影響少數Druid服務器的有限故障,可以通過複製確保在系統恢復時仍然可以進行查詢。
- 用於快速過濾的索引。Druid使用CONCISE或 Roaring壓縮的位圖索引來創建索引,以支持快速過濾和跨多列搜索。
- 基於時間的分區。Druid首先按時間對數據進行分區,然後可以根據其他字段進行分區。這意味着基於時間的查詢將僅訪問與查詢時間範圍匹配的分區。這將大大提高基於時間的數據的性能。
- 近似算法。德魯伊包括用於近似計數區別,近似排名以及近似直方圖和分位數計算的算法。這些算法提供有限的內存使用量,通常比精確計算要快得多。對於精度比速度更重要的情況,德魯伊還提供了精確的計數區別和精確的排名。
- 攝取時自動彙總。Druid可選地在攝取時支持數據彙總。這種彙總會部分地預先聚合您的數據,並可以節省大量成本並提高性能。
When should I use Druid? 什麼時候應該使用德魯伊?
許多公司都將Druid用於各種不同的用例。 Powered by Apache Druid頁面列出了一些公司的列表。
如果您的用例符合以下幾個描述符,則Druid可能是一個不錯的選擇:
- 插入率很高,但更新並不常見。
- 您的大多數查詢都是聚合查詢和報告查詢(“分組依據”查詢)。您可能還具有搜索和掃描查詢。
- 您將查詢延遲目標定爲100毫秒到幾秒鐘。
- 您的數據具有時間成分(Druid包括與時間特別相關的優化和設計選擇)。
- 您可能有多個表,但是每個查詢僅命中一個大的分佈式表。查詢可能會擊中多個較小的“查找”表。
- 您具有高基數數據列(例如URL,用戶ID),並且需要對其進行快速計數和排名。
- 您想從Kafka,HDFS,平面文件或Amazon S3之類的對象存儲中加載數據。
如果存在下面的情況,您可能會不希望使用德魯伊包括:
- 您需要使用主鍵對現有記錄進行低延遲更新。Druid支持流插入,但不支持流更新(使用後臺批處理作業完成更新)。
- 您正在構建一個脫機報告系統,其中查詢延遲不是很重要。
- 您想要進行“大”聯接(將一個大事實表連接到另一個大事實表),並且可以花很長時間來完成這些查詢。