什么是Druid
⼀、Druid是什么
Druid 单词来源于西⽅古罗马的神话⼈物,中⽂常常翻译成德鲁伊。
玩过魔兽世界,暗⿊破坏神,Dota,炉⽯传说,Dota⾃⾛棋的朋友,对这个词⼀定不陌⽣。
本⽂中所介绍的Druid是⼀个分布式的⽀持实时分析的数据存储系统。通俗⼀点:⾼性能实时分析数据库。它由美国⼴告技术公司MetaMarkets于2011年创建,并且于2012年开源。MetaMarkets是⼀家专门为在线媒体公司提供数据服务的公司,主营是DSP⼴告运营推送平台,由于对实时性要求⾮常⾼,公司不得不放弃原始的⼤数据⽅
案,Druid也就应运⽽⽣。
⽬前Druid已基于Apache License 2.0协议开源,正在由Apache孵化,代码托管于Github。
最新官⽹地址为:
阿⾥曾开源过⼀个项⽬叫做Druid是⼀个数据库连接池。与本⽂所述Driud只是名字相同,并没有什么联系,Github上两者都有相应的版本库。
本⽂说的Druid是Apache Druid
⼆、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拥有丰富的社区,供⼤家学习。
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常见应⽤领域包括:
点击流分析(⽹络和移动分析)
风险/欺诈分析
⽹络遥测分析(⽹络性能监控)
服务器指标存储
供应链分析(制造指标)
应⽤程序性能指标
商业智能/ OLAP
Druid可以⽤于,点击流,视图流,活动流。
准确地和近似地计算⽤户指标,计算出⽇常活动⽤户之类的平均指标,以查看总体趋势,或者精确计算以呈现给运营部门。
Druid常⽤于存储和查询在线⼴告数据。这些数据通常来⾃⼴告服务器,对于衡量和了解⼴告系列的效果,点击率,转化率(损耗率)等等。
datasource是什么意思
Druid通常⽤于BI,与Hive之类的SQL-on-Hadoop引擎不同,Druid专为⾼并发性和亚秒级查询⽽设计,可通过UI进⾏交互式数据探索。
总之,在实时计算应⽤越来越⼴泛的今天,druid将凭借着她的⾼性能和OLAP的优势,在实时的BI已经⼤屏等领域⼤放异彩!
⼤数据流动专注于⼤数据实时计算,数据治理,数据可视化等技术分享与实践。
请在后台回复关键字下载相关资料。相关学习交流已经成⽴,欢迎加⼊~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论