实时OLAP分析利器Druid介绍
文章目录
前言
项目早期、数据(报表分析)的生产、存储和获取业务,MySQL基本上可以满足需要,但是随着业务的快速增长,数据量翻至亿为单位时,MySQL无法满足例如:快速实时返回“分组+聚合计算+排序聚合指标”查询需求。记得还是2017年之后,对当时的几款OLAP进行了调研,用线上数据训练。当时Druid在性能和功能上基本上能够满足需要,下面介绍一下Apache Druid。
Druid介绍
Apache Druid 是一个高性能实时分析数据库,在复杂的海量数据下进行交互式实时数据展现的OLAP工具。能够处理TB级别数据,毫秒级响应。目前国内在使用的公司有:阿里、滴滴、知乎、360、eBay,Hulu等。官方网址:http://druid.io
主要特性
- 开源、列式存储,预聚合
- 实时流式和批量数据摄入
- 灵活的数据模式、支持SQL查询
- 扩展方便,容易运维
- TB,PB级别的数据处理
基础概念
数据格式
数据源:datasource,datasource的结构有:时间列(timestamp)、维度列(Dimension)和指标列(Metric)
时间列:将时间相近的一些数据聚合在一起,查询的时候指定时间范围
维度列:标识一些统计的维度,比如:名称、类别等
指标列:用于聚合和计算的列,比如:访问总数、合计金额等
|
timestamp |
demensions |
metric |
||||
|
date |
userid |
username |
age |
sex |
visits |
costs |
|
2020-01-01T00:00:00Z |
100001 |
张三 |
20 |
男 |
201 |
20.10 |
|
2020-01-01T00:00:00Z |
100002 |
李四 |
21 |
男 |
160 |
16.00 |
|
2020-01-01T00:00:00Z |
100003 |
王五 |
20 |
女 |
100 |
10.00 |
数据摄入
同时支持流式和批量数据摄入。通常通过像 Kafka 这样的消息总线(加载流式数据)或通过像 HDFS 这样的分布式文件系统(加载批量数据)来连接原始数据源。
Druid 通过 Indexing 处理将原始数据以 segment 的方式存储在数据节点,segment 是一种查询优化的数据结构。
数据存储
Druid 采用列式存储。根据不同列的数据类型(string,number 等),Druid 对其使用不同的压缩和编码方式。Druid 也会针对不同的列类型构建不同类型的索引。
类似于检索系统,Druid 为 string 列创建反向索引,以达到更快速的搜索和过滤。类似于时间序列数据库,Druid 基于时间对数据进行智能分区,以达到更快的基于时间的查询。
不像大多数传统系统,Druid 可以在数据摄入前对数据进行预聚合。这种预聚合操作被称之为 rollup,这样就可以显著的节省存储成本。
数据查询
支持两种查询:JSON-HTTP,SQL两种方式
查询类型
Timeseries:基于时间范围查询的类型
TopN:基于单维度的排名查询
GroupBy:基于多维度的分组查询
架构
运维
Druid是非常健壮的系统,Druid 拥有数据副本、独立服务、自动数据备份和滚动更新,以确保长期运行,并保证数据不丢失。
OLAP方案对比
|
Druid |
Kylin |
Elasticsearch |
Spark SQL |
|
|
数据规模 |
超大 |
超大 |
中等 |
超大 |
|
查询效率 |
高 |
高 |
中等 |
低 |
|
并发度 |
高 |
高 |
高 |
低 |
|
SQL支持 |
中 |
高 |
中 |
高 |
|
灵活度 |
中 |
低 |
高 |
高 |
Druid:是一个实时处理时序数据的OLAP数据库,因为它的索引首先按照时间分片,查询的时候也是按照时间线去路由索引。
Kylin:核心是Cube,Cube是一种预计算技术,基本思路是预先对数据作多维索引,查询时只扫描索引而不访问原始数据从而提速。
ES:最大的特点是使用了倒排索引解决索引问题。根据研究,ES在数据获取和聚集用的资源比在Druid高。
Spark SQL:基于Spark平台上的一个OLAP框架,基本思路是增加机器来并行计算,从而提高查询速度。
使用场景
- 广告数据分析
- 风控分析
- 服务器指标存储
- 应用性能指标
- 实时在线分析系统 OLAP
- 实时报表分析
- 离线+实时数据源
- 行为数据分析
使用建议
- 时序化数据:所有行记录中必须有日期指标
- OLAP并发有限,不适合OLTP查询,建议首次回源加Cache
- 目前不支持JOIN操作,不支持数据更新
- 离线数据替换前一天实时数据
- 分页支持的不够完善
另外、Druid在项目中已经投产多年,用OLAP方案解决业务上的问题,整理技术点为了方便相似业务同学参考和使用。
参考
https://druid.apache.org/docs/latest/design/
近期主题:
Druid在数据分析需求中的学习和应用
Druid多种应用场景的实战
定时任务到分布式服务的演变

实时OLAP分析利器Druid介绍的更多相关文章
- 腾讯云EMR大数据实时OLAP分析案例解析
OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...
- 唯品会海量实时OLAP分析技术升级之路
本文转载自公众号 DBAplus社群 , 作者:谢麟炯 谢麟炯,唯品会大数据平台高级技术架构经理,主要负责大数据自助多维分析平台,离线数据开发平台及分析引擎团队的开发和管理工作,加入唯品会以来还曾负责 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)
介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...
- Flink+Druid构建实时OLAP的探索
场景 k12在线教育公司的业务场景中,有一些业务场景需要实时统计和分析,如分析在线上课老师数量.学生数量,实时销售额,课堂崩溃率等,需要实时反应上课的质量问题,以便于对整个公司的业务情况有大致的了解. ...
- 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...
- Druid介绍2
Druid的发送数据和查询数据 Druid 开篇 - 大数据实时探索性分析平台 官网 Druid 一次海量数据实时处理的实践 使用HDFS作为Druid的deepStorage 在哪里下载druid ...
- Druid介绍
Druid (大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储.这个系统集合了一个面向列存储的层,一个分布式.shared-nothing的架构,和一 ...
- ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)
使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...
随机推荐
- Contest 157
2019-10-06 12:15:28 总体感受:总体难度一般,dfs和dp题花了点时间,最后一题dp有思路,但是实现上不够好. 注意点:首先是hard问题的覆盖度依然是很大的问题,其次是要注意审题. ...
- 李宏毅老师机器学习课程笔记_ML Lecture 2: Where does the error come from?
引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...
- 浏览器与DNS解析过程
浏览器解析 1.地址栏输入地址后,浏览器检查自身DNS缓存 地址栏输入chrome://net-internals/#dns 查看. 2.浏览器缓存中未找到,那么Chrome会搜索操作系统自身的DNS ...
- 汉诺塔Java实现
public class Hanoi { public static void main(String[] args ) { Hanoi hanoi = new Hanoi(); hanoi.hano ...
- 如何设置mysql远程访问
如何设置mysql远程访问 Mysql默认是不可以通过远程机器访问的,通过下面的配置可以开启远程访问 在MySQL Server端: 执行mysql 命令进入mysql 命令模式, mysql> ...
- C语言自学网官方微信相关功能使用方法
一.微信扫描关注微信公众账号(C语言自学网),我们会不定时更新关于编程的技术文章和相关资讯,了解大佬的成长之路. 二.回复“C语言学习资料”,将显示由我们精心整理的全套C语言学习资料的下载地址及链接. ...
- rabbitmq++:RabbitMQ的消息确认ACK机制介绍
1):什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持 ...
- JS 剑指Offer(五) 二叉树的重建
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 题目分析:已知二叉树的前序和中序遍历,根据前序遍历和中序遍历的规则,前序遍历的第一 ...
- 通用mapper常用注解
通用mapper的作用: 自动实现单表的增删改查 常用注解使用 @Table 作用:建立实体类和数据库表之间的对应关系. 默认规则:实体类类名首字母小写作为表名.Employee 类→employee ...
- Spring Boot整合Servlet,Filter,Listener,访问静态资源
目录 Spring Boot整合Servlet(两种方式) 第一种方式(通过注解扫描方式完成Servlet组件的注册): 第二种方式(通过方法完成Servlet组件的注册) Springboot整合F ...