druid 概述

2023-11-13

1 什么样的业务适合用 Druid?

时序化数据:Druid 可以理解为时序数据库,所有的数据必须有时间字段。
实时数据接入可容忍丢数据(tranquility):目前 tranquility 有丢数据的风险,所以建议实时和离线一起用,实时接当天数据,离线第二天把今天的数据全部覆盖,保证数据完备性。
OLAP 查询而不是 OLTP 查询:Druid 查询并发有限,不适合 OLTP 查询。
非精确的去重计算:目前 Druid 的去重都是非精确的。
无 Join 操作:Druid 适合处理星型模型的数据,不支持关联操作。
数据没有 update 更新操作,只对 segment 粒度进行覆盖:由于时序化数据的特点,Druid 不支持数据的更新。

2 如何设置合理的 Granularity?

首先解释下 segmentGranularity 和 queryGranularity,前者是 segment 的组成粒度,后者是 segment 的聚合粒度。

queryGranularity  决定查询最小粒度,决定roll up粒度;
segmentGranularity  决定分块文件粒度;

要求 queryGranularity 小于等于 segmentGranularity,然后在数据导入时,按照下面的规则进行设置。 segmentGranularity(离线数据导入的设置):

导入的数据是天级别以内的:“hour”或者“day”。
导入的数据是天级别以上的:“day”。
导入的数据是年级别以上的:“month”。
需要说明的是,这里我们仅仅是简单的通过 intervals 进行 segmentGranularity 的设置,更加合理的做法应该是结合每个 segment 的大小以及查询的复杂度进行综合衡量。

考虑到 tranquility 实时任务的特殊性和数据的安全性,我们建议实时数据导入时,segmentGranularity 设置成“hour”。

queryGranularity:根据业务查询最小粒度和查询复杂度来定,假设查询只需要到小时粒度,则该参数设置为“hour”。

3 需要去重的维度到底需不需要定义到维度列中?

如果去重的维度只需要去重计算,没有其他的作用,譬如进行过滤或者作为分组字段,我们建议不要添加到维度列中,因为不添加的话,这样数据的预聚合效果更好。

4 druid底层技术

除了 MPP 架构外,它还运用到了四点重要的技术,分别是:

  • 预聚合

  • 列式存储

  • 字典编码

  • 位图索引

5  底层数据结构

https://blog.csdn.net/BeiisBei/article/details/107758269?share_token=c039acd0-fa51-4696-83ca-b50dfefacdd9

http://hbasefly.com/2018/06/19/timeseries-database-8/?jqdajo=dz6ta&jqrghm=hkl243&cmhmdi=6cwh03

三种数据结构

(1)一个字典:将值从字符串(所有的dimension列的数值都被当做字符串处理)映射到整数id
(2)一个值的列表(正排数据):把列中的数值通过字典编码以后,将数字id存储在列表里面
(3)一个bitmap倒排索引:对于列里面的每个不同的值,都对应存储为一个bitmap,用来表示哪一行数据包含该值

为什么我们需要这三种数据结构呢?
1.通过字典将字符串映射成数字id,数字id通常比字符串更小,因此可以被更紧凑的存储。
2.第三点中的bitmap,通常被称为倒排索引,用于支持快速的过滤操作(bitmap对AND和OR操作的速度非常快)。
3.最后,第二点中的值列表将用于支持group by和topN查询,而普通的查询只需要根据filter出来的行去来聚合相应的metirc就可以了,而不需要访问上述2中的值列表。

注意:bitmap跟其他两种数据结构不同,其他两种数据结构都是跟随数据量的增长而线性增长的(最差情况下),而 bitmap的大小=数据的总行数 * 列中值的种类数 (也就是字典的size)。这就意味着如果值得的种类很多,那么bitmap中为1的数量将会非常稀疏,这种情况下bitmap有可能被大幅压缩。Druid针对这种情况,采用了特殊的压缩算法,比如roaring bitmap压缩算法。

1.编码了列值的字典:
{
    'Justin Bieber': 0,
    'Ke$ha':         1
}
 
2.列值数据(正排):
[0, 0, 1, 1](第一个和第二个0代表第一,二行数据编码,即上述字典中的'Justin BieBer',第三个和第四个代表第三四行数据,即上述字典中的'Ke$ha')
 
3. Bitmaps:字典中的每个值对应一个bitmap
value='Justin Bieber': [1, 1, 0, 0]
value='Ke$ha': [0, 0, 1, 1]

6 roll up

 生产环境中,每天会有成百上千亿的原始数据(raw data)进入到Druid中,Druid最小粒度支持毫秒级别的事件,但是在一般使用场景中,我们很少会关注如此细粒度的数据集。

总结,roll-up对什么范围内的数据进行第一步的聚合,是由"queryGranularity" : "minute"来决定的。
queryGranularity:默认为None,允许查询的时间粒度,单位与segmentGranularity相同,如果为None那么允许以任意时间粒度进行查询。

注意:当设定roll-up为true时,会带来信息量的丢失,因为roll-up的粒度会变成最小的数据可视化粒度,即毫秒级别的原始数据,如果按照分钟粒度进行roll-up,那么入库之后我们能够查看数据的最小粒度即为分钟级别。

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

druid 概述 的相关文章

随机推荐

  • 全面解析JavaScript中对于字符串子串的查询方法

    一 基本应用场景 Q1 给定字符串a xxx 给定字符串b xxxxxx 判定a是否为b的子串 基础手写实现方法 function checkHas longStr shortStr for let i 0 i lt longStr len
  • 基于遗传算法GA算法优化BP神经网络(Python代码实现)

    一 概述 BP GA算法的设计 基于遗传算法的BP神经网络算法 以下简称BP GA 就是在BP神经网络的学习过程中 将权重和阀值描述为染色体 并选取适宜的适应函数 然后进行GA迭代 直到某种意义上的收敛 与普通BP学习算法相比 算法 BP一
  • redis 主从配置

    转 https blog csdn net github 26672553 article details 69568259 redis主从配置初步 2个节点主从 如果我们redis的压力很大 如果我们的并发高到我们读数据和写数据都有了很大
  • 二维码的生意几乎革掉了钱包的命

    刷脸支付无需结账台 无需手机 如果说说二维码让手机成为了钱包 那刷脸支付则索性让钱包这个东西都直接革掉 而这也点燃了国内的新零售浪潮 二维码 革命的祸首在移动支付普及 线上线下建立联系这件事上 二维码其实功不可没 在此之前 线上的归线上 线
  • Cmake 官方中文教程

    CMake官方教程 2018年04月03日 22 00 21 SoftGit 阅读数 23072 很好的一个官方教程翻译文档 CMake简介 CMake是一个跨平台的 开源的构建工具 cmake是makefile的上层工具 它们的目的正是为
  • Node js 项目启动报错,错误码,events.js:141,throw er; //Unhandled 'error' event,解决办法

    Node js 项目启动报错 错误码 events js 141 throw er Unhandled error event 解决办法 当我遇到这个问题的时候 我纠结了好半天 找了好多资料 都说是端口占用 必须杀死端口重新启动 确实是这样
  • 上架发布应用市场资料填写规则限制

    应用名称填写时 名字长度有没有限制呢 1 名称 1 字数限制 iOS 30 Android 64 2 应用市场显示的名称 2 副标题 1 字数限制 iOS 30 2 应用市场显示的副标题 宣传文本填写时 可以编写多少个字 1 字数限制 iO
  • 目标检测分块知识总结 2

    tags 目标检测 1 FSAF 论文题目 Feature Selective Anchor Free Module for Single Shot Object Detection 2019 文章主要解决在进行多尺度检测的时候 利用特征金
  • C语言数据类型32位和64位不同

    http blog csdn net kongdefei5000 article details 38866985 C语言编程需要注意的64位和32机器的区别 一 数据类型特别是int相关的类型在不同位数机器的平台下长度不同 C99标准并不
  • linux修改启动内核版本

    cd etc default sudo gedit grub 编辑grub文件 修改grub文件如下 GRUB DEFAULT 1 gt 9 其中 1 代表开机启动界面中 选择 Advancded options for Ubuntu 选项
  • 初学黑客攻防[1]--禁止其他电脑访问本地电脑的80端口

    首先 win10家庭版需添加 本地安全策略 后进行该练习 1 打开 记事本 输入以下代码 echo off pushd dp0 dir b SystemRoot servicing Packages Microsoft Windows Gr
  • xilinx axi_iic IP使用分享

    仿真环境 例化了两组axi iic 的IP 一个slv一个mst slv地址固定为0x33 7bit模式 iic总线速率为4000K 仿真发现每次只能发送3byte数据 和实际不符 仿真仅作参考 由于iic为双向端口 通过例化顶层将IO连接
  • rsync实时监控以及守护进程

    rsync守护进程模式 服务端的操作 1 安装 root backup yum install y rsync 2 修改配置文件 下面有配置文件详解 root m01 vim etc rsyncd conf uid rsync gid rs
  • 关于jax,tensorflow的安装详细教程

    jax在下面pycharm中有提示你在哪里下载 所以如果下次遇到有什么要下载的包都可以尝试这种方式去下载 在找找pycharm有没有提示 然后直接点网站看教程 这嘎是官网的教程 很详细 为了下载一个版本只有JAX的cpu 可能要用到当地的开
  • 第四章 云原生架构之Kubernetes基础知识

    1 K8S整体架构 1 1 概述 Kubernetes是一个可移植 可扩展的开源平台 用于管理容器化的工作负载和服务 简称 K8S K8S的本质是一组服务器集群 可以在对应服务器集群的每个节点上运行程序 来对节点中的容器进行管理 类似Mas
  • 图形编程丨图形绘制基础imgui篇—D3D9 HOOK 创建内部Imgui窗口

    作者 小阿栗 Imgui又称为Dear ImGui 它是与平台无关的C 轻量级跨平台图形界面库 没有任何第三方依赖 可以将Imgui的源码直接加到项目中使用 也可以编译成dll Imgui使用DX或者OpenGL进行界面渲染 Imgui主要
  • Redis三种集群模式-主从模式

    一 引言 Redis有三种集群模式 第一个就是主从模式 第二种 哨兵 模式 第三种是Cluster集群模式 第三种的集群模式是在Redis 3 x以后的版本才增加进来的 我们今天就来说一下Redis第一种集群模式 主从集群模式 二 配置说明
  • Beauty of the soul is the essential beauty(183词 批改网91)

    What proves universally acknowledged is that essential beauty has triggered widespread public attention Undoubtedly the
  • Hive(5) Hive的数据类型

    HIve 2 Hive的数据类型 数据类型 基本数据类型 Hive数据类型 对应Java数据类型 长度 byte 举例 tinyint byte 1 10 smallint short 2 20 int int 4 30 bigint lo
  • druid 概述

    1 什么样的业务适合用 Druid 时序化数据 Druid 可以理解为时序数据库 所有的数据必须有时间字段 实时数据接入可容忍丢数据 tranquility 目前 tranquility 有丢数据的风险 所以建议实时和离线一起用 实时接当天