文章目录

前言

Druid介绍

主要特性

基础概念

数据格式

数据摄入

数据存储

数据查询

查询类型

架构

运维

OLAP方案对比

使用场景

使用建议

参考

近期主题


前言

项目早期、数据(报表分析)的生产、存储和获取业务,MySQL基本上可以满足需要,但是随着业务的快速增长,数据量翻至亿为单位时,MySQL无法满足例如:快速实时返回“分组+聚合计算+排序聚合指标”查询需求。记得还是2017年之后,对当时的几款OLAP进行了调研,用线上数据训练。当时Druid在性能和功能上基本上能够满足需要,下面介绍一下Apache Druid。

Druid介绍

Apache Druid 是一个高性能实时分析数据库,在复杂的海量数据下进行交互式实时数据展现的OLAP工具。能够处理TB级别数据,毫秒级响应。目前国内在使用的公司有:阿里、滴滴、知乎、360、eBay,Hulu等。官方网址:http://druid.io

主要特性

  1. 开源、列式存储,预聚合
  2. 实时流式和批量数据摄入
  3. 灵活的数据模式、支持SQL查询
  4. 扩展方便,容易运维
  5. 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
  • 实时报表分析
  • 离线+实时数据源
  • 行为数据分析

使用建议

  1. 时序化数据:所有行记录中必须有日期指标
  2. OLAP并发有限,不适合OLTP查询,建议首次回源加Cache
  3. 目前不支持JOIN操作,不支持数据更新
  4. 离线数据替换前一天实时数据
  5. 分页支持的不够完善

另外、Druid在项目中已经投产多年,用OLAP方案解决业务上的问题,整理技术点为了方便相似业务同学参考和使用。

参考

https://druid.apache.org/docs/latest/design/

近期主题:

  • Druid在数据分析需求中的学习和应用

  • Druid多种应用场景的实战

  • 定时任务到分布式服务的演变

实时OLAP分析利器Druid介绍的更多相关文章

  1. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  2. 唯品会海量实时OLAP分析技术升级之路

    本文转载自公众号 DBAplus社群 , 作者:谢麟炯 谢麟炯,唯品会大数据平台高级技术架构经理,主要负责大数据自助多维分析平台,离线数据开发平台及分析引擎团队的开发和管理工作,加入唯品会以来还曾负责 ...

  3. druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)——分析框架如hive或者redshift(MPPDB)、ES等

    介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...

  4. druid.io 海量实时OLAP数据仓库 (翻译+总结) (1)

    介绍 我是NDPmedia公司的大数据OLAP的资深高级工程师, 专注于OLAP领域, 现将一个成熟的可靠的高性能的海量实时OLAP数据仓库介绍给大家: druid.io NDPmedia在2014年 ...

  5. Flink+Druid构建实时OLAP的探索

    场景 k12在线教育公司的业务场景中,有一些业务场景需要实时统计和分析,如分析在线上课老师数量.学生数量,实时销售额,课堂崩溃率等,需要实时反应上课的质量问题,以便于对整个公司的业务情况有大致的了解. ...

  6. 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用

    https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...

  7. Druid介绍2

    Druid的发送数据和查询数据 Druid 开篇 - 大数据实时探索性分析平台 官网 Druid 一次海量数据实时处理的实践 使用HDFS作为Druid的deepStorage 在哪里下载druid ...

  8. Druid介绍

    Druid (大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储.这个系统集合了一个面向列存储的层,一个分布式.shared-nothing的架构,和一 ...

  9. ElasticSearch做实时OLAP框架~实时搜索、统计和OLAP需求,甚至可以作为NOSQL来使用(转)

    使用ElasticSearch作为大数据平台的实时OLAP框架 – lxw的大数据田地 http://lxw1234.com/archives/2015/12/588.htm 一直想找一个用于大数据平 ...

随机推荐

  1. 1. postman使用

    postman使用教程: https://blog.csdn.net/fxbin123/article/details/80428216 http://bayescafe.com/tools/use- ...

  2. mac开发错误:errSecInternalComponent

    errSecInternalComponent Command CodeSign failed with a nonzero exit code 修改方法: Build Settings -> ...

  3. python浅学【网络服务中间件】之Celery

    一.关于Celery: 什么是任务队列: 任务队列一般用于线程或计算机之间分配工作的一种机制. 任务队列的输入是一个称为任务的工作单元,有专门的工作进行不断的监视任务队列,进行执行新的任务工作. 什么 ...

  4. 北邮OJ-257- 最近公共祖先-软件14 java

    思路分析:思路应该比较简单也很容易想的来,就是比较两个节点的最近的祖先节点,要对每个节点依次记录下他的所有祖先节点,包括其自己,因为自己也算自己的祖先节点,这一点题目中没有明确指出 所以比较坑. 我们 ...

  5. 【NLP面试QA】激活函数与损失函数

    目录 Sigmoid 函数的优缺点是什么 ReLU的优缺点 什么是交叉熵 为什么分类问题的损失函数为交叉熵而不能是 MSE? 多分类问题中,使用 sigmoid 和 softmax 作为最后一层激活函 ...

  6. 模块 string 常用序列字符

    自从知道string模块后再也不用abcd了 >>> string.digits #数字 '0123456789' >>> string.ascii_letters ...

  7. SQL实战(六)

    一. 题目描述 查找排除当前最大.最小salary之后的员工的平均工资avg_salary.CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,`s ...

  8. Openresty+Lua+Kafka实现日志实时采集

    简介 在很多数据采集场景下,Flume作为一个高性能采集日志的工具,相信大家都知道它.许多人想起Flume这个组件能联想到的大多数都是Flume跟Kafka相结合进行日志的采集,这种方案有很多他的优点 ...

  9. NKOJ3775 数列操作

    问题描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...

  10. Pytest系列(7) - skip、skipif跳过用例

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 pytest.mark.sk ...