Druid 單詞來源於西方古羅馬的神話人物,中文經常翻譯成德魯伊。 git
玩過魔獸世界,暗黑破壞神,Dota,爐石傳說,Dota自走棋的朋友,對這個詞必定不陌生。github
本文中所介紹的Druid是一個分佈式的支持實時分析的數據存儲系統。通俗一點:高性能實時分析數據庫。它由美國廣告技術公司MetaMarkets於2011年建立,而且於2012年開源。MetaMarkets是一家專門爲在線媒體公司提供數據服務的公司,主營是DSP廣告運營推送平臺,因爲對實時性要求很是高,公司不得不放棄原始的大數據方案,Druid也就應運而生。算法
Druid的官方網站地址是:http://druid.io/sql
目前Druid已基於Apache License 2.0協議開源,正在由Apache孵化,代碼託管於Github。數據庫
最新官網地址爲:apache
阿里曾開源過一個項目叫作Druid是一個數據庫鏈接池。與本文所述Driud只是名字相同,並無什麼聯繫,Github上二者都有相應的版本庫。segmentfault
本文說的Druid是Apache Druid服務器
Github地址:https://github.com/apache/druid/ 已經有9k+star 最新release版本已經到0.17 正處於上升期。網絡
Druid主要解決的問題就是傳統數據庫沒法解決的大數據量查詢性能的問題。
因此她的本質就是一個分佈式支持實時數據分析的數據存儲系統。
可以快速的實現查詢與數據分析,高可用,高擴展能力。
1.快速查詢:druid提供了快速的聚合能力以及快速OLAP查詢能力,多租戶的設計,是面向用戶分析應用的理想方式。druid的數據聚合粒度能夠是1分鐘,5分鐘,1小時或者1天等。數據的內存化提升了druid的查詢速度。
OLAP:與之相對的是OLTP,這裏經過一個在線商城舉例,好比在一個在線商城中二者都是作什麼呢?
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中通常保存的是聚合後的數據。
druid在數據攝入以前,首先須要定義一個數據源也就是Datasource,這個dataSource的結構是 時間列(TimeStamp),維度列(Dimension)和指標列(Metric)。
時間列:druid會將時間相近的一些數據聚合在一塊兒,查詢的時候指定時間範圍。
維度列:做爲標識一些統計的維度,好比各類類型。
指標列:就是用於聚合和計算的列,包括count,sum等等。
druid提供了兩種數據攝入方式,實時和批處理。
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常見應用領域包括:
Druid能夠用於,點擊流,視圖流,活動流。
準確地和近似地計算用戶指標,計算出平常活動用戶之類的平均指標,以查看整體趨勢,或者精確計算以呈現給運營部門。
Druid經常使用於存儲和查詢在線廣告數據。這些數據一般來自廣告服務器,對於衡量和了解廣告系列的效果,點擊率,轉化率(損耗率)等等。
Druid一般用於BI,與Hive之類的SQL-on-Hadoop引擎不一樣,Druid專爲高併發性和亞秒級查詢而設計,可經過UI進行交互式數據探索。
總之,在實時計算應用愈來愈普遍的今天,druid將憑藉着她的高性能和OLAP的優點,在實時的BI已經大屏等領域大放異彩!
靜下心來,努力的提高本身,永遠都沒有錯。更多實時計算相關博文,歡迎關注實時流式計算