Druid【基础 01】是什么+主要特点+设计原则+架构+数据结构(简单入门Druid)

news2024/11/15 5:09:50

Druid入门

  • 1. 是什么
  • 2. 主要特点
  • 3. 三个设计原则
  • 4. Architecture 架构
  • 5. 数据结构
    • 5.1 DataSource 结构
    • 5.2 Segment 结构

Druid 非中文官网,内容不少且介绍的挺详细的,需要英文阅读能力或者翻译工具进行辅助。

1. 是什么

先看看官网怎么说:

Apache Druid is an open source distributed data store. Druid’s core design combines ideas from data warehouses, timeseries databases, and search systems to create a high performance real-time analytics database for a broad range of use cases. Druid merges key characteristics of each of the 3 systems into its ingestion layer, storage format, querying layer, and core architecture.

在这里插入图片描述
Druid 是一个分布式的支持实时分析的数据存储系统(Data Store)。Druid 设计之初的想法就是为分析而生,它在处理数据的规模、数据处理的实时性方面,比传统的OLAP 系统有了显著的性能改进,而且拥抱主流的开源生态,包括Hadoop 等。

Druid应用最多的是类似于广告分析创业公司MetaMarkets中的应用场景,如广告分析、互联网广告系统监控以及网络监控等。当业务中出现以下情况时,Druid是一个很好的技术方案选择:

  • 需要交互式聚合和快速探究大量数据时;
  • 具有大量数据时,如每天数亿事件的新增、每天数10T数据的增加;
  • 对数据尤其是大数据进行实时分析时;
  • 需要一个高可用、高容错、高性能数据库时。

2. 主要特点

官网的8大特点:

  1. Column-oriented storage 列式存储格式。Druid使用面向列的存储,这意味着,它只需要加载特定查询所需要的列。这为只差看几列的查询提供了巨大的速度提升。此外,每列都针对其特定的数据类型进行优化,支持快速扫描和聚合。
  2. Native search indexes 本地化的搜索索引。Druid为字符串值创建反向索引,使用CONCISE或Roaring压缩位图索引来创建索引,这些索引可以快速过滤和跨多个列搜索。
  3. Streaming and batch ingest 实时或批量摄取。提供 Apache Kafka, HDFS, AWS S3,流处理器等的开箱即用连接器。可以实时摄取数据(实时获取的数据可立即用于查询)或批量处理数据。

在这里插入图片描述
4. Flexible schemas 模式灵活。Druid优雅地处理演进的模式和嵌套的数据。

在这里插入图片描述
5. Time-optimized partitioning 实时优化分区。Druid基于时间和基于时间的查询智能地划分数据,比传统数据库快得多。
6. SQL support SQL支持。除了原生的基于JSON的语言,Druid还通过HTTP或JDBC使用SQL。Druid支持通过 json over http 和SQL查询数据。除了标准SQL操作符外,Druid还支持独特的操作符,这些操作符利用其近似算法套件来提供快速计数、排序和分位数。

在这里插入图片描述

  1. Horizontal scalability 水平伸缩(可扩展的分布式系统)。Druid通常部署在数十到数百台服务器的集群中,并且提供数百万条/秒的摄取率,保留数百万条记录,以及亚秒级到几秒钟的查询延迟。
  2. Easy operation 操作简单。集群扩展和缩小,只需添加或删除服务器,集群将在后台自动重新平衡,无需任何停机时间。容错架构围绕服务器故障进行路由。

可以提炼出的特点:

Druid可以在整个集群中进行大规模的并行查询。支持原生云、容错的架构,不会丢失数据。一旦Druid吸收了您的数据,副本就安全地存储在深度存储中(通常是云存储、HDFS或共享文件系统)。即使每个Druid服务器都失败,也可以从深层存储恢复数据。对于仅影响少数Druid服务器的更有限的故障,复制确保在系统恢复时仍然可以执行查询。

Druid包括用于近似计数、近似排序以及计算近似直方图和分位数的算法。这些算法提供了有限的内存使用,并且通常比精确计算快得多。对于准确度比速度更重要的情况,Druid还提供精确的计数-明确和准确的排名。

插入数据时自动聚合。Druid可选地支持摄取时的数据自动汇总。预先汇总了您的数据,并且可以导致巨大的成本节约和性能提升。

3. 三个设计原则

1️⃣ Fast Query 快速查询:部分数据的聚合(Partial Aggregate)+ 内存化(In-emory)+ 索引(Index)。

  对于数据分析场景,大部分情况下,我们只关心一定粒度聚合的数据,而非每一行原始数据的细节情况。因此,数据聚合粒度可以是1 分钟、5 分钟、1 小时或1 天等。部分数据聚合(Partial Aggregate)给Druid 争取了很大的性能优化空间。
  数据内存化也是提高查询速度的杀手锏。内存和硬盘的访问速度相差近百倍,但内存的大小是非常有限的,因此在内存使用方面要精细设计,比如Druid 里面使用了Bitmap 和各种压缩技术。
另外,为了支持Drill-Down 某些维度,Druid 维护了一些倒排索引。这种方式可以加快AND 和OR 等计算操作。

2️⃣ Horizontal Scalability 水平扩展能力:分布式数据(Distributed Data)+ 并行化查询(Parallelizable Query)。

  Druid 查询性能在很大程度上依赖于内存的优化使用。数据可以分布在多个节点的内存中,因此当数据增长的时候,可以通过简单增加机器的方式进行扩容。为了保持平衡,Druid按照时间范围把聚合数据进行分区处理。对于高基数的维度,只按照时间切分有时候是不够的(Druid 的每个Segment 不超过2000 万行),故Druid 还支持对Segment 进一步分区。
  历史Segment 数据可以保存在深度存储系统中,存储系统可以是本地磁盘、HDFS 或远程的云服务。如果某些节点出现故障,则可借助Zookeeper 协调其他节点重新构造数据。
  Druid 的查询模块能够感知和处理集群的状态变化,查询总是在有效的集群架构中进行。集群上的查询可以进行灵活的水平扩展。

3️⃣ Realtime Analytics 实时分析:不可变的过去,只追加的未来(Immutable Past,Append-Only Future)这个特点跟HBase很像。

  Druid 提供了包含基于时间维度数据的存储服务,并且任何一行数据都是历史真实发生的事件,因此在设计之初就约定事件一但进入系统,就不能再改变。
  对于历史数据Druid 以Segment 数据文件的方式组织,并且将它们存储到深度存储系统中,例如文件系统或亚马逊的S3 等。当需要查询这些数据的时候,Druid 再从深度存储系统中将它们装载到内存供查询使用。

4. Architecture 架构

【官网介绍】基于微服务的体系结构,可以看作是一个可分解的数据库。Druid中的每个核心服务(摄取、查询和协调)可以单独或联合部署在商用硬件上。Druid明确地命名了每个主要服务,允许操作员根据用例和工作负载对每个服务进行微调。例如,如果工作负载需要,操作员可以将更多的资源分配给Druid的摄取服务,而将更少的资源分配给Druid的查询服务。Druid服务可以独立故障而不影响其他服务的操作。

在这里插入图片描述
Druid总体包含 5️⃣ 类节点:

  1. MiddleManager Node 中间管理节点:及时摄入实时数据,已生成Segment数据文件。
  2. Historical Node 历史节点:加载已生成好的数据文件,以供数据查询。historical 节点是整个集群查询性能的核心所在,因为historical会承担绝大部分的segment查询。
  3. Broker Node 查询节点:接收客户端查询请求,并将这些查询转发给Historicals和MiddleManagers。当Brokers从这些子查询中收到结果时,它们会合并这些结果并将它们返回给调用者。
  4. Coordinator Node 协调节点:主要负责历史节点的数据负载均衡,以及通过规则(Rule)管理数据的生命周期。协调节点告诉历史节点加载新数据、卸载过期数据、复制数据、和为了负载均衡移动数据。
  5. Overlord Node 统治者:进程监视MiddleManager进程,并且是数据摄入Druid的控制器。他们负责将提取任务分配给MiddleManagers并协调Segement发布。

Druid还包含 3️⃣ 类外部依赖:

  1. Deep Storage 数据文件存储库:存放生成的Segment数据文件,并供历史服务器下载,对于单节点集群可以是本地磁盘,而对于分布式集群一般是HDFS。
  2. Metadata Store 元数据库:存储Druid集群的元数据信息,比如Segment的相关信息,一般用MySQL或PostgreSQL。
  3. Zookeeper :为Druid集群提供以执行协调服务。如内部服务的监控,协调和领导者选举。

5. 数据结构

与Druid架构相辅相成的是其基于DataSource与Segment的数据结构,它们共同成就了Druid的高性能优势。

5.1 DataSource 结构

与传统的关系型数据库管理系统比较,Druid的DataSource可以理解为 RDBMS 中的表Table。DataSource的结构包含以下几个方面:

在这里插入图片描述

  1. Timestamp 时间列:表明每行数据的时间值,默认使用 UTC时间格式且精确到毫秒级别。这个列是数据聚合与范围查询的重要维度。跟HBase的时间戳类似。
  2. Dimensions 维度列:维度来自于 OLAP 的概念,用来标识数据行的各个类别信息。
  3. Metrics 指标列:指标对应于 OLAP 概念中的 Fact,是用于聚合和计算的列。这些指标列通常是一些数字,计算操作通常包括 Count、Sum 和 Mean等。

在这里插入图片描述

无论是实时数据消费还是批量数据处理, Druid在基于DataSource结构存储数据时即可选择对任意的指标列进行聚合( RollUp)操作。该聚合操作主要基于维度列与时间范围两方面的情况。下图显示的是执行聚合操作后 DataSource的数据情况。

在这里插入图片描述
相对于其他时序数据库, Druid在数据存储时便可对数据进行聚合操作是其一大特点,该特点使得 Druid不仅能够节省存储空间,而且能够提高聚合查询的效率。

5.2 Segment 结构

DataSource是一个逻辑概念, Segment却是数据的实际物理存储格式, Druid正是通过 Segment 实现了对数据的横纵向切割( Slice and Dice)操作。从数据按时间分布的角度来看,通过参数 segmentGranularity 的设置,Druid将不同时间范围内的数据存储在不同的 Segment数据块中,这便是所谓的数据横向切割。

在这里插入图片描述

这种设计为 Druid 带来一个显而易见的优点:按时间范围查询数据时,仅需要访问对应时间段内的这些 Segment数据块,而不需要进行全表数据范围查询,这使效率得到了极大的提高。

通过 Segment将数据按时间范围存储,同时,在 Segment中也面向列进行数据压缩存储,这便是所谓的数据纵向切割。而且在 Segment中使用了 Bitmap等技术对数据的访问进行了优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#初级——基础语法

前言 学习Unity游戏编程开发会使用到两种语言,一种是C#,另一种是Javascript。有学习C语言基础和想学unity游戏开发的萌新一般都推荐学习C#基础编程,以此来快速上手unity的学习。 本次学习使用到的工具为:VS2022 环境安装 首先&a…

对比预测编码表示学习

对比预测编码表示学习 引言 文章主要提出如下几点:首先将高维数据压缩到更加紧凑的潜在嵌入(latent embdding)空间,在这个空间中条件预测更容易被建模。第二,在这个潜在空间中使用自回归模型,以对未来的多…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行,LLMs(大语言模型)再次进入人们的视野。然而,在处理特定领域查询时,大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

【C++11】智能指针深度详解(什么是智能指针?为什么需要智能指针?如何使用智能指针?)

目录 一、前言 二、 智能指针的引入 --- 内存泄露 💢什么是内存泄漏?💢 💢内存泄漏有那些危害?💢 💢内存泄漏的原因?💢 💢解决内存泄漏的方法 &#x…

go-kratos 学习笔记(3) google buf 管理proto

google buf 管理proto,以及从新归档文件的目录结构 什么是 BSR? BSR 将 Protobuf 文件作为版本化模块进行存储和管理,以便个人和组织可以轻松使用和发布他们的 API。 BSR 带有可浏览的 UI、依赖项管理、API 验证、版本控制、生成的文档以及…

手把手教你CrossOver 24.0.0 for Mac 破解版安装激活2024图文教程

兔八哥爱分享要和大家分享的是一款可以让我们直接在Mac上安装和运行Windows软件和游戏的软件——CrossOver。兔八哥爱分享这次带来的是24.0.0 测试版本。 CrossOver已支持相当多的Windows应用,如Office、AutoCAD、Windows Media Player 9、Photoshop、Dreamweaver、…

Java并发的笔记

打算记录自己的学习情况,尽量不摆烂,另外一件事要有始有终,要弄完 如果多个线程处理同一个变量,读跟写都保证不了 2024.7.22》》》》》》》》》》》》 2.1.1volatile的实现原理 volatile不会引起线程上下文的切换和调度 一致性更…

《0基础》学习Python——第十八讲__爬虫/<1>

一、什么是爬虫 爬虫是一种网络数据抓取的技术。通过编写程序(通常使用Python),爬虫可以自动化地访问网页,解析网页内容并提取出所需的数据。爬虫可以用于各种用途,如搜索引擎的索引,数据分析和挖掘&#x…

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.7安全架构

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析(重点) 课程补充 灰度测试(基于功能):先发布部分功能,然后看用户的反馈,再去发布另外一部分的功能更新。 A/B测…

Qt绘制指南针(仪表盘绘制封装使用)

指南针是一种用来确定方向的工具。它由一个磁针制成,其一端被磁化,可以自由旋转。当放置在水平面上时,磁针会指向地球的磁北极。通过观察磁针的指向,我们可以确定地理北方的方向。本示例是在Qt中绘制一个指南针,通过继…

基于springboot+vue+uniapp的宿舍管理系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

C++学习笔记02-结构基础(问题-解答自查版)

前言 以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。 本文对读者可以用作自查,答案在后面&#xff0…

Git的使用教程

仓库分区 Git本地有三个工作区域:工作目录(Working Directory),暂存区(Stage/Index),资源库(Repository或Git Directory)。如果再加上远程的git仓库(Remove Directory)就…

SAP PP 物料主数据字段状态控制

参考 https://zhuanlan.zhihu.com/p/452823415 物料主数据里面的状态 由 1、行业 2、工厂 3、物料类型 4、事务代码 5、采购相关字段 6、客制 优先级 隐藏->显示->必输->可选

Go基础编程 - 11 - 函数(func)

接口(interface) 函数1. 函数定义1.1. 函数名1.2. 参数列表1.3. 返回值列表 2. 匿名函数3. 闭包、递归3.1 闭包3.1.1 函数、引用环境3.1.2 闭包的延迟绑定3.1.3 goroutine 的延迟绑定 3.2 递归函数 4. 延迟调用(defer)4.1 defer特…

C语言中的控制语句(三):while 和 do while 语句

文章目录 [toc] 🍊自我介绍🍊while语句🍊do...while循环🍊🍊 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello…

单调栈(随缘复习到了,顺手刷了)

也是不知道为什么突然又复习到单调栈了,所以顺手刷了三道题,总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路:这题是要求每个子区间里面的最大值和最小值的差,我们一开始想的必然是纯暴力呀,但是一看这数据&#…

主流硬派SUV齐聚尼三锅,方程豹豹5成功冲顶

随着汽车的飞速普及,越来越多的车主都喜欢上了越野。 而在浩瀚无垠的沙漠腹地,尼三锅以其独特的地理形态,成为了无数越野爱好者心中的圣地与试炼场。 近日,众多汽车博主携自己的爱车普拉多、方程豹豹5、牧马人、坦克400、坦克700、…

图书馆座位管理系统 /图书馆座位预约系统/图书馆管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…