Doris 数据模型与存储结构

Doris-07-索引的详细介绍(前缀索引、Ordinal索引、Zone Map索引、Bitmap索引、Bloom Filter索引、NGram BloomFilter索引、倒排索引) Apache Doris 存储引擎采用类似LSM树的结构提供快速的数据写入支持。进行数据导入时,数据会先写入 Tablet 对应的 MemTable 中,当 MemTable 写满之后,会将 MemTable 里的数据刷写(Flush)到磁盘,生成一个个不超过 256MB 的不可变的 Segment 文件。MemTable 采用SkipList的数据结构,将数据暂时保存在内存中,SkipList 会按照 Key 对数据行进行排序,因此,刷写到磁盘上的 Segment 文件也是按 Key 排序的。 阅读详情

Doris 数据模型

特点

1. 键值对特点

Doris中的数据都被分成两列 : 键列和值列。

user_name

pv_count

数据人

3

user_name为键列(可多列)。

pv_count为值列(可多列)。

键(key)列用于快速查找,值(value)列可根据特定的聚合类型用于内部数据聚合。

键列全局有序排列,查询时方便快速定位查找

Key列是全局惟一的,因此对于相同的键值有不同的值,然后随后的数据自动与之前的数据聚合(sum、min、max、replace),下面会提到。

2. 按列存储特点

  • 按列存储的,每一列单独存放。
  • 查询时,只访问涉及的列,提高查询效率。
  • 数据的列类型一致,统一方便压缩。
  • 数据建索引,提高了查询效率。

3. 物化视图特点

什么是物化视图

视图是一个虚拟表,基于它创建时指定的查询语句返回的结果集。每次访问它都会导致这个查询语句被执行一次。为了避免每次访问都执行这个查询,可以将这个查询结果集存储到一个物化视图。

物化视图与普通的视图相比不同的是:物化视图是建立的副本,它类似于一张表,需要占用存储空间。而对一个物化视图查询的执行效率与查询一个表是一样的。

归纳: 物化视图是提取特定维度以创建对用户透明但具有真实数据的视图表的组合。

Doris物化视图特点

Doris的物化视图确保用户在更新时直接更新原始表,Doris将确保原始表和物化视图自动生效。查询时,用户只需要指定原始表,Doris将根据查询的具体条件选择适当的物化视图来完成查询。既能对原始明细数据的任意纬度分析,也能快速的对固定纬度进行分析查询。总结几点就是以下:

1. 对于那些经常重复的使用相同的子查询结果的查询性能大幅提升。

2. Doris自动更新物化视图的数据,保证原始表和物化视图表的数据一致性。无需额外的维护成本。

3. 查询的时候也可以自动匹配最优的物化视图。

数据模型种类

aggregate key

key相同时,新旧记录将会进行聚合操作,目前支持sum,min,max,replace。

sum:求和,多行的 value 进行累加。

replace:替代,下一批数据中的 value 会替换之前导入过的行中的 value。

max:保留最大值。

min:保留最小值。

aggregate key模型可以提前聚合数据,适合报表和多维度业务。

举一小例子

CREATE TABLE pv
(
    user_name    VARCHAR(32),
    pv_ccount BIGINT   SUM DEFAULT '0'
)
aggregate key(user_name)
distributed by hash(user_name) buckets 6;

insert into pv values('数据人',1);
insert into pv values('数据人',1);
insert into pv values('数据人',1);

select * from pv;

结果

user_name

pv_count

数据人

3

unique key

key相同时,新记录覆盖旧记录。目前unique key和aggregate

适用于有更新需求的业务。

举一小例子

CREATE TABLE user
(
    user_name    VARCHAR(32),
    age      BIGINT DEFAULT '0'
)
unique key(user_name)
distributed by hash(user_name) buckets 6;

insert into user values('数据人',1);
insert into user values('数据人',2);
insert into user values('数据人',3);

select * from user;

结果

user_name

age

数据人

3

duplicate key

只指定排序列,相同的行并不会合并。

适用于数据无需提前聚合的分析业务。

举一小例子

CREATE TABLE order_info
(
    order_id     BIGINT,
    user_id      BIGINT,
    amount       BIGINT DEFAULT '0'
)
duplicate key(order_id)
DISTRIBUTED BY HASH(order_id) BUCKETS 6;

insert into order_info values(1111,1,1000);
insert into order_info values(2222,1,1000);
insert into order_info values(3333,1,1000);

select * from user;

查询当然是全部

存储结构

存储以Segment V2文件存储,为什么是v2呢?

新版SegmentV2存储格式参考了Parquet的设计思路,引入了基于Page的最小数据存储单元,并将数据文件划分为数据区、索引区和元数据区三个部分。针对不同的列类型、索引格式实现了不同的Page编码方式,显著提升了数据的读写效率,并增强了数据格式的可扩展性。

Segment V2文件结构

介绍一下,后面单个细说

Data Region

用于存储各个列的数据信息,这里的数据是按需分page加载的。

Index Region

Doris中将各个列的index数据统一存储在Index Region,这里的数据会按照列粒度进行加载,所以跟列的数据信息分开存储。

Footer信息

  • SegmentFooterPB:定义文件的元数据信息
  • 4个字节的FooterPB内容的checksum
  • 4个字节的FileFooterPB消息长度,用于读取FileFooterPB
  • 8个字节的MAGIC CODE,之所以在末位存储,是方便不同的场景进行文件类型的识别

Data Region

Data Page结构

压缩与编码

针对不同的字段类型采用了不同的编码,默认采用LZ4F格式对数据进行压缩。

数据类型

编码

tinyint/smallint/int/bigint/largeint

bit_shuffle

float/double/decimal

bit_shuffle

char/varchar

dict

bool

rle

date/datetime

bit_shuffle

hll/object

plain

Index Region

Ordinal Index(一级索引)

功能

Ordinal Index索引提供了通过行号来查找Column Data Page数据页的物理地址。

Ordinal Index能够将按列存储数据按行对齐,可以形象理解为所谓的一级索引。

Column Data Page是由Ordinal index进行管理,Ordinal index记录了每个Column Data Page的位置offset、大小size和第一个数据项行号信息,即Ordinal。这样每个列具有按行信息进行快速扫描的能力。

生成规则与查询

Short Key Index(前缀索引)

功能

数据查询时,会打开Segment文件,从footer中获取Short Key Page的offset以及大小,然后从Segment文件中读取Short Key Page中的索引数据,并解析出每一条前缀索引项。

如果查询过滤条件包含前缀字段时,就可以使用前缀索引进行快速地行过滤。

前缀索引又是稀疏索引,不能精确定位到key所在的行,只能粗粒度地定位出key可能存在的范围,然后使用二分查找算法精确地定位key的位置。

生成规则与查询

ZoneMap Index

功能

ZoneMap索引存储了Segment和每个列对应每个Page的统计信息。这些统计信息可以帮助在查询时提速,减少扫描数据量,统计信息包括了Min最大值、Max最小值、HashNull空值、HasNotNull不全为空的信息。

生成规则与查询

Bloom Filte Index

功能

Doris支持对取值区分度比较大的字段添加Bloom Filter索引。数据查询时,查询条件在设置有Bloom Filter索引的字段进行过滤,当某个Data Page的Bloom Filter没有命中时,表示该Data Page中没有需要的数据,这样可以对Data Page进行快速过滤,减少不必要的数据读取。

生成规则与查询

BitMap Index

功能

为了加速数据查询,Doris可以为某些字段添加Bitmap索引。

  • 有序字典:有序保存一列中所有的不同取值。
  • 字典值的位图:保存有序字典中每一个取值的位图,表示字典值在列中的行号。

生成规则与查询

结构

Footer信息段在文件的尾部,存储了文件的整体结构,包括数据域的位置,索引域的位置等信息。

其中FooterPB主要包含了column meta信息、index meta信息,short key index信息、总行数。

Doris三种数据模型Aggregate、Uniq、Duplicate使用 3. ⽤户进⾏查询时,在BE后端可能不同insert批次的数据未进⾏聚合,此时会对符合查询条件的数据进⾏内部聚合(不⽤⽤户调 ⽤group by,会扫描所有列的数据)后,再返回给客户端。根据user_id, username这2个key进⾏数据的聚合,其余字段按replace⽅式进⾏聚合。->作⽤于Aggregate和Uniq数据模型:key为聚合的键,value为聚合的值。Aggregate数据模型:key为聚合的键,value为聚合的值。Uniq数据模型:key为聚合的键,value为聚合的值。 阅读详情

相关推荐

【Doris入门】Doris表模型完全指南:明细、聚合、主键模型的选择与优化技巧

Apache Doris作为一款现代化的MPP架构分析型数据库,凭借其高性能、易用性和实时分析能力,在数据仓库和BI分析领域获得了广泛应用。对于Doris这样的分析型数据库而言,数据模型直接影响着查询性能、存储效率和数据处理能力。对于Key列相同的行,Value列会按照指定的聚合方式进行自动计算,从而减少存储空间并提升查询性能。它保证对于相同的Key值,只保留最新写入的数据,自动实现数据去重和更新功能。Duplicate模型是Doris的默认数据模型,也是最简单的模型。,不会对数据进行任何聚合或去重处理。

IT成长日记的博客 1636

Doris存储层设计介绍1——存储结构设计解析(索引底层结构)

Doris存储层设计介绍1——存储结构设计解析(索引底层结构)

爱吃辣条的博客 1万+

列式存储实战:从MySQL到ClickHouse的OLAP改造之路

在大数据分析和数据仓库场景中,查询性能的瓶颈往往不在SQL本身,而在于底层存储结构。传统行式存储以行为单位组织数据,面对海量数据时会产生大量无效I/O,压缩率低,难以支撑秒级聚合分析。列式存储将同一列连续存放,配合投影下推、谓词下推和高级压缩算法,可大幅减少数据扫描量和存储成本。ClickHouse、Parquet、ORC等列式技术已成为OLAP领域的主流选择,尤其适用于离线报表、用户行为分析和指标平台等业务。本文从列式存储的核心原理出发,结合一个从MySQL迁移到ClickHouse的完整改造案例,对比行

weixin_29051245的博客 200

【大数据】Doris 架构

Doris 的架构很简洁,只设 FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维,FE、BE 都可线性扩展。

Data · Model · Agent · Repeat 967

Doris 与 Elasticsearch:谁更适合你的数据分析需求?

Doris 和 Elasticsearch 都是非常强大的工具,但它们在数据模型、存储方式、查询语言和应用场景上存在显著差异。如果你需要处理结构化数据,并且需要进行复杂的聚合查询,Doris 是更好的选择。如果你需要进行全文搜索,并且需要快速检索文本内容,Elasticsearch 是更好的选择。希望这篇文章能帮助你更好地理解 Doris 和 Elasticsearch 的区别,并根据你的需求做出合适的选择。如果有任何问题,欢迎随时提问!

weixin_41544125的博客 1875

Doris知识点总结1&FAQ盘点

Doris——(1)基础概念& FAQ盘点

爱吃辣条的博客 1546

Doris与ClickHouse的对比

dorisck多主结构所有的写操作都发生在主 FE(例如,创建表,导入数据等),然后这些操作的元数据信息会从主 FE 复制到从 FE(通过 binlog 的方式),这样就能在各个 FE 之间保证一致性从节点可以接受读请求,实现集群的负载均衡observer节点作用与从节点类似,但是主挂之后不会升级成主节点所有节点平等,均可提供服务。分布式表中所有分片以及其副本均可支持查询和写入。数据之间借助zookeeper 节点通知机制进行同步。

m0_56861313的博客 4161

【Doris入门】Doris数据表模型:聚合模型(Aggregate Key Model)详解

其中,聚合模型(Aggregate Key Model)是Doris中最为核心和特色的数据模型之一,它通过预聚合机制大幅提升了查询性能,特别适合报表分析、统计汇总等场景。聚合模型的核心思想是在数据写入时就进行预聚合,将相同Key的数据按照指定的聚合函数进行合并,只存储聚合后的结果。在建表时,通过AGGREGATE KEY关键字指定聚合模型,并明确指定Key列用于聚合Value列。替代,下一批数据中的Value会替换之前导入过的行中的Value。BITMAP类型的列的聚合方式,进行位图的并集聚合。

IT成长日记的博客 1472

Drois

Drois

shan19920501的博客 4286

Doris学习笔记

Doris学习笔记 doris主从结构 fe负责客户端交互,存储维护元数据,生成逻辑查询计划 fe分为follower和observer,follower选举leader,follower负责备份元数据。 采用 Paxos 协议以及 Memory + Checkpoint + Journal 的机制来确保元数据的高性能及高可靠。 observer负责分担查询。 be负责物理存储数据,物理执行查询计划。 doris两层分区 在逻辑上进行分区,物理上进行分桶。 1.分区可以按照时间进行划分,方便区分冷热数据,使

weixin_44012322的博客 1164

大数据Doris(二):Doris原理篇

在SQL优化器中最重要的一个组件是查询优化器(Query Optimization),在海量数据分析中一条SQL生成的执行计划搜索空间非常庞大,查询优化器的目的就是对执行计划空间进行裁剪减少搜索空间的代价,查询优化器对于SQL的执行来说非常重要,不管是关系型数据库系统Oracle、MySQL还是大数据领域中的Hive、SparkSQL、Flink SQL都会有一个查询优化器进行SQL执行计划优化。从寄存器中访问数据的速度,是从内存访问数据速度的300倍,是从磁盘中访问数据速度的30万倍。

Lansonli(蓝深李)的博客 4083

Doris常用的存储模型?常见的数据库处理模式有哪些?如何分类和理解数据库的处理场景?你知道doris属于那种处理模式吗?mysql呢?

Doris常用的存储模型?

jj89929665的博客 908

数据库 vs 数据仓库

数据库与数据仓库核心区别摘要: 数据库(DB)面向日常业务处理(OLTP),强调实时增删改查和高并发事务,采用行式存储和范式化设计,代表产品如MySQL。数据仓库(DW)则面向分析决策(OLAP),专注历史数据聚合查询,采用列式存储和反范式模型,适合批量处理,代表工具包括Hive、ClickHouse等。关键差异在于:数据库处理细粒度实时操作,数据仓库管理粗粒度历史分析。正规数仓通常不用MySQL,因其行式存储不适合海量数据分析,而采用列式存储的OLAP专用系统(如Hive)通过ETL从业务库同步数据。简记

echo的博客 376

【Doris基础】Apache Doris数据模型全面解析:选择最适合你的数据组织方式

Duplicate模型,顾名思义,是允许数据重复的模型了,在这种模型下,Doris不会对导入的数据进行任何形式的去重或聚合处理,而是完整保留原始数据的所有细节。Aggregate模型是Doris中最具特色的数据模型,它通过在数据加载时进行预聚合,显著提高聚合查询的性能,这种模型适合有大量聚合分析需求的场景。Unique模型确保主键唯一性,相同主键的数据会自动进行覆盖(类似于UPSERT操作),这种模型适合需要保证数据唯一性且有更新需求的场景。:在复杂系统中,可以同时使用多种模型。:选择Unique模型。

IT成长日记的博客 1259

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4863

PCIe设备内存访问实战:从ioremap到DMA映射的完整流程解析

本文深入解析了PCIe设备内存访问的完整流程,涵盖从CPU通过ioremap访问设备寄存器,到设备通过DMA映射高效读写主机内存的核心机制。详细探讨了虚拟地址、物理地址与总线地址的转换关系,对比了一致性与流式DMA映射的适用场景及同步要点,并阐述了IOMMU在安全与效率中的作用,为驱动开发者提供了实战代码与关键陷阱分析。

weixin_29201933的博客 505

【Doris入门】Doris数据表模型使用指南:核心注意事项与实践

通过合理的数据模型选择和优化,Doris能够为各种大数据分析场景提供卓越的性能支持,助力企业构建高效的数据分析平台。每种数据模型都有其特定的适用场景和局限性,正确选择和使用数据模型对于系统性能和业务需求满足至关重要。正确选择和使用Doris数据表模型是充分发挥其性能优势的关键。性能最优,支持高效count。保留所有数据,包括重复数据。保留最新数据,覆盖旧数据。频繁count(*)查询。按聚合函数处理重复数据。灵活Ad-hoc查询。

IT成长日记的博客 1211

一文详解声码器

声码器(Vocoder)是语音信号处理领域的核心技术,其本质是通过“分析 - 参数化 - 合成” 的闭环流程,实现语音的高效编码、转换或生成。它不仅是早期语音通信的关键工具,更是现代 AI 语音技术(如 TTS、语音转换)的核心组件。以下从原理、技术分类、关键模块、应用及发展趋势展开详细解析。

weixin_41413777的博客 1351

doris 记录

doris

qq_15138049的博客 6945

便携式水下动态实时视频色彩还原设备,一键快速实现对水下偏色视频和图像的色彩还原处理

便携式水下动态实时视频色彩还原,一键快速对水下图像进行色彩校正,清晰度提升和亮度均衡处理,为水下资源勘探和科学考古,海洋生态环境监测,水下机器作业等应用提供有力的协助

weixin_43518680的博客 633

从零搭建风电场:手把手教你用WAsP+WindPRO完成风资源评估全流程

本文详细介绍了从零开始搭建风电场的全流程,重点讲解如何使用WAsP和WindPRO进行风资源评估和风场布局优化。内容包括软件配置、数据采集规范、风图谱建模实战、机组选型策略以及常见问题解决方案,帮助工程师掌握风电开发的核心技术,提升项目成功率。

year5的博客 370

Doris 数据库更新指南:高效与灵活的完美结合

咱们就深入了解下,Doris 究竟有哪些数据更新的 “绝招”,又是怎么操作的呢?

一入大数据深似海?别怕!“数据极客圈”就是你的救生圈,走对圈子跟对人,趣析数据、畅聊趋势,快进圈子! 1390

SAR成像概述

1. 发展概述 雷达是英文Radar(Radio detection and ranging)的音译,原意为“无线电探测与测距”。雷达的发明是无线电发展史上的里程碑,二战时,英国急需通过雷达探测空中金属物体来帮助搜寻德国飞机,这期间,雷达技术飞速发展,发展出了地对空、空对地轰炸、空对空火控、敌我识别等功能。雷达在第二次世界大战中发挥了重大作用,至今仍是军用和许多民用领域的重要传感器。 早期雷达系统通过时间延迟来测距,通过天线指向来测角,通过多普勒频移测速。1951年,Carl Wiley发现,通..

5069

Apache Doris 入门 10 问

本文解答了Apache Doris 在读写流程、副本一致性机制、 存储机制、高可用机制等方面的常见疑问点,欢迎订阅。

SelectDB 1952

2023年GESP12月认证C++五级真题解析

例如,如果a=4,那么4是最⼩的幸运数,而1不是,但我们可以连续对1做3次+1操作,使其变为4,所以我们可以说,1幸运化后的结果是 4。【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。前一个数字,下标是j的数字是偶数,后面的数字下标是j+1的是奇数,按照要求,偶数在奇数的后面,要交换。A函数时间复杂度是O(n/2),B函数算法是O(sqrt(n)),大部分情况后者是优的,值更小。

lan_in的博客 1006

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 885
上一篇: Apache Doris 为分析而生:Doris 架构
下一篇: Doris 读写流程
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值