一、Druid是什么

Druid 单词来源于西方古罗马的神话人物,中文常常翻译成德鲁伊。

玩过魔兽世界,暗黑破坏神,Dota,炉石传说,Dota自走棋的朋友,对这个词一定不陌生。

本文中所介绍的Druid是一个分布式的支持实时分析的数据存储系统。通俗一点:高性能实时分析数据库。它由美国广告技术公司MetaMarkets于2011年创建,并且于2012年开源。MetaMarkets是一家专门为在线媒体公司提供数据服务的公司,主营是DSP广告运营推送平台,由于对实时性要求非常高,公司不得不放弃原始的大数据方案,Druid也就应运而生。

Druid的官方网站地址是:http://druid.io/

目前Druid已基于Apache License 2.0协议开源,正在由Apache孵化,代码托管于Github。

最新官网地址为:

https://druid.apache.org/

阿里曾开源过一个项目叫做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已经大屏等领域大放异彩!

静下心来,努力的提升自己,永远都没有错。更多实时计算相关博文,欢迎关注实时流式计算

什么是Druid的更多相关文章

  1. Spring + SpringMVC + Druid + MyBatis 给你一个灵活的后端解决方案

    生命不息,折腾不止. 折腾能遇到很多坑,填坑我理解为成长. 两个月前自己倒腾了一套用开源框架构建的 JavaWeb 后端解决方案. Spring + SpringMVC + Druid + JPA(H ...

  2. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

    最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...

  3. 学记:spring boot使用官网推荐以外的其他数据源druid

    虽然spring boot提供了4种数据源的配置,但是如果要使用其他的数据源怎么办?例如,有人就是喜欢druid可以监控的强大功能,有些人项目的需要使用c3p0,那么,我们就没办法了吗?我们就要编程式 ...

  4. druid连接池获取不到连接的一种情况

    数据源一开始配置: jdbc.initialSize=1jdbc.minIdle=1jdbc.maxActive=5 程序运行一段时间后,执行查询抛如下异常: exception=org.mybati ...

  5. druid配置数据库连接使用密文密码

    spring使用druid配置dataSource片段代码 dataSource配置 <!-- 基于Druid数据库链接池的数据源配置 --> <bean id="data ...

  6. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  7. 技术杂记-改造具有监控功能的数据库连接池阿里Druid,支持simple-jndi,kettle

    kettle内置的jndi管理是simple-jndi,功能确实比较简单,我需要监控kettle性能,druid确实是很不错的选择,但没有提供对应的支持,我改进了druid源码,实现了simple-j ...

  8. sql 连接数不释放 ,Druid异常:wait millis 40000, active 600, maxActive 600

    Hibernate + Spring + Druid 数据库mysql 由于配置如下 <bean id="dataSource" class="com.alibab ...

  9. druid sql黑名单 报异常 sql injection violation, part alway true condition not allow

    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...

  10. 从零开始学 Java - 数据库连接池的选择 Druid

    我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

随机推荐

  1. neo4j-查询示例

    查找名为"Cloud Atlas"的电影 match(cloudAtlas {title:"Cloud Atlas"}) return cloudAtlas 查 ...

  2. CentOS6.5升级NTP

    二.安装依赖包 yum -y install gcc libcap libcap-devel glibc-devel 三.升级Ntp 1.tar zxf /tmp/ntp-4.2.8p10.tar.g ...

  3. $SP703\ Mobile\ Service\ DP$

    洛谷 Sol 首先状态是已经完成的请求数量 这题只有三个员工跑来跑去,只有三个.... 一般像这种人数特别少的DP题就会把它们都放到状态里去 于是:f[i][x][y][z]表示现在已经完成了i个请求 ...

  4. 理解 RESTful API 设计规范

    RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计.从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest. REST与技术无关,它代表的是一种软件架构风格,RES ...

  5. License for package Android SDK Build-Tools 28.0.3 not accepted

    License for package Android SDK Build-Tools 28.0.3 not accepted 用flutter进行编写时出现了标题的错误,不是配置的原因,而是需要接受 ...

  6. PPP协议 PAP认证

       

  7. rsync配置两台服务器之间的文件备份(同步)

    rsync配置两台服务器之间的文件备份(同步) 前情提要 环境: 192.168.1.2 主服务器 centos 7.7 192.168.1.3 备份服务器 centos 7.7 rsync 安装(两 ...

  8. 大数据框架开发基础之Sqoop(1) 入门

    Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle , ...

  9. input值

    input里面的值为字符串(string)类型,所以用作数的计算的时候需要用Number(mInput.value)进行转换成数值Numbei()类型才可以计算 例如: mInput1.value + ...

  10. vue 移动端在div上绑定click事件 失效

    在.vue的文件中使用了better-scroll,在div标签上绑定click事件后,无效. 原因:使用了better-scroll,默认它会阻止touch事件.所以在配置中需要加上click: t ...