一、Druid是什麼 Druid 單詞來源於西方古羅馬的神話人物,中文常常翻譯成德魯伊。 玩過魔獸世界,暗黑破壞神,Dota,爐石傳說,Dota自走棋的朋友,對這個詞一定不陌生。 本文中所介紹的Druid是一個分散式的支持實時分析的數據存儲系統。通俗一點:高性能實時分析資料庫。它由美國廣告技術公司M ...
一、Druid是什麼
Druid 單詞來源於西方古羅馬的神話人物,中文常常翻譯成德魯伊。
玩過魔獸世界,暗黑破壞神,Dota,爐石傳說,Dota自走棋的朋友,對這個詞一定不陌生。
本文中所介紹的Druid是一個分散式的支持實時分析的數據存儲系統。通俗一點:高性能實時分析資料庫。它由美國廣告技術公司MetaMarkets於2011年創建,並且於2012年開源。MetaMarkets是一家專門為線上媒體公司提供數據服務的公司,主營是DSP廣告運營推送平臺,由於對實時性要求非常高,公司不得不放棄原始的大數據方案,Druid也就應運而生。
Druid的官方網站地址是:http://druid.io/
目前Druid已基於Apache License 2.0協議開源,正在由Apache孵化,代碼托管於Github。
最新官網地址為:
阿裡曾開源過一個項目叫做Druid是一個資料庫連接池。與本文所述Driud只是名字相同,並沒有什麼聯繫,Github上兩者都有相應的版本庫。
本文說的Druid是Apache Druid
Github地址:https://github.com/apache/druid/ 已經有9k+star 最新release版本已經到0.17 正處於上升期。
二、Druid特性與基本概念
Druid主要解決的問題就是傳統資料庫無法解決的大數據量查詢性能的問題。
所以她的本質就是一個分散式支持實時數據分析的數據存儲系統。
能夠快速的實現查詢與數據分析,高可用,高擴展能力。
特性
1.快速查詢:druid提供了快速的聚合能力以及快速OLAP查詢能力,多租戶的設計,是面向用戶分析應用的理想方式。druid的數據聚合粒度可以是1分鐘,5分鐘,1小時或者1天等。數據的記憶體化提高了druid的查詢速度。
OLAP:與之相對的是OLTP,這裡通過一個線上商城舉例,比如在一個線上商城中兩者都是做什麼呢?
- OLTP就是商品瀏覽,交易,用戶數據。必須支持事務,頻繁查詢修改。 OLTP(聯機事務處理),傳統資料庫的主要應用,面向最基本的CRUD操作,特點是實時性高,數據量小,可以修改刪除數據,要求有嚴格的事務。
- OLAP就是對商城數據進行分析,數據量大。 OLAP(聯機分析處理),支持複雜的分析操作,對決策的支持,特點是數據量大,吞吐量大,只支持查詢。
2.實時數據註入:druid支持流數據的註入,並提供了數據的事件驅動,保證在實時和離線環境下事件的實效性和統一性。歷史數據不改變,實時數據實時接入。
3.可擴展的PB級存儲:druid集群可以很方便的擴容到PB的數據量,每秒百萬級別的數據註入。即便在加大數據規模的情況下,也能保證時其效性。druid可以按照時間範圍把聚合數據進行分區處理。
4.多環境部署:druid既可以運行在商業的硬體上,也可以運行在雲上。它可以從多種數據系統中註入數據,包括hadoop,spark,kafka,storm和samza等。
5.豐富的社區:druid擁有豐富的社區,供大家學習。
Metamarkets之前幾個druid開發者成立了一家叫做imply.io的新公司:https://imply.io/
Druid與其他OLAP方案對比:
使用場景
根據Druid的特性可知,druid適合的場景:
查詢多修改很少
查詢以聚合或分組為主
快速查詢
需要支持離線和實時的數據源
由此可見Druid在實時計算中,作為實時報表和實時大屏的查詢環節非常的合適。
而且druid具有非常好的性能:
高擴展使用列式存儲的分散式系統;高容錯,自平衡,保證查詢延遲和數據完整性;自動聚合,索引數據,提供多種演算法優化查詢效率。
所以druid中一般保存的是聚合後的數據。
基本概念
1、數據格式
druid在數據攝入之前,首先需要定義一個數據源也就是Datasource,這個dataSource的結構是 時間列(TimeStamp),維度列(Dimension)和指標列(Metric)。
時間列:druid會將時間相近的一些數據聚合在一起,查詢的時候指定時間範圍。
維度列:作為標識一些統計的維度,比如各種類型。
指標列:就是用於聚合和計算的列,包括count,sum等等。
2、數據攝入
druid提供了兩種數據攝入方式,實時和批處理。
3、數據查詢
druid支持兩種查詢,原生和sql
sql查詢大同小異
[ EXPLAIN PLAN FOR ]
[ WITH tableName [ ( column1, column2, ... ) ] AS ( query ) ]
SELECT [ ALL | DISTINCT ] { * | exprs }
FROM table
[ WHERE expr ]
[ GROUP BY exprs ]
[ HAVING expr ]
[ ORDER BY expr [ ASC | DESC ], expr [ ASC | DESC ], ... ]
[ LIMIT limit ]
[ UNION ALL <another query> ]
druid的原生查詢採用json方式,通過http傳送。
一個druid查詢groupby的例子,指定了時間範圍,聚合粒度,數據源等。
{
"queryType": "groupBy",
"dataSource": "sample_datasource",
"granularity": "day",
"dimensions": ["country", "device"],
"limitSpec": { "type": "default", "limit": 5000, "columns": ["country", "data_transfer"] },
"filter": {
"type": "and",
"fields": [
{ "type": "selector", "dimension": "carrier", "value": "AT&T" },
{ "type": "or",
"fields": [
{ "type": "selector", "dimension": "make", "value": "Apple" },
{ "type": "selector", "dimension": "make", "value": "Samsung" }
]
}
]
},
"aggregations": [
{ "type": "longSum", "name": "total_usage", "fieldName": "user_count" },
{ "type": "doubleSum", "name": "data_transfer", "fieldName": "data_transfer" }
],
"postAggregations": [
{ "type": "arithmetic",
"name": "avg_usage",
"fn": "/",
"fields": [
{ "type": "fieldAccess", "fieldName": "data_transfer" },
{ "type": "fieldAccess", "fieldName": "total_usage" }
]
}
],
"intervals": [ "2012-01-01T00:00:00.000/2012-01-03T00:00:00.000" ],
"having": {
"type": "greaterThan",
"aggregation": "total_usage",
"value": 100
}
}
三、應用場景
druid常見應用領域包括:
- 點擊流分析(網路和移動分析)
- 風險/欺詐分析
- 網路遙測分析(網路性能監控)
- 伺服器指標存儲
- 供應鏈分析(製造指標)
- 應用程式性能指標
- 商業智能/ OLAP
用戶行為分析
Druid可以用於,點擊流,視圖流,活動流。
準確地和近似地計算用戶指標,計算出日常活動用戶之類的平均指標,以查看總體趨勢,或者精確計算以呈現給運營部門。
數字營銷
Druid常用於存儲和查詢線上廣告數據。這些數據通常來自廣告伺服器,對於衡量和瞭解廣告系列的效果,點擊率,轉化率(損耗率)等等。
OLAP和BI
Druid通常用於BI,與Hive之類的SQL-on-Hadoop引擎不同,Druid專為高併發性和亞秒級查詢而設計,可通過UI進行互動式數據探索。
總之,在實時計算應用越來越廣泛的今天,druid將憑藉著她的高性能和OLAP的優勢,在實時的BI已經大屏等領域大放異彩!
靜下心來,努力的提升自己,永遠都沒有錯。更多實時計算相關博文,歡迎關註實時流式計算