java 类的存储结构设计_Doris存储层设计介绍1——存储结构设计解析

1 整体介绍

Doris是基于MPP架构的交互式SQL数据仓库,主要用于解决了近实时的报表和多维分析。Doris高效的导入、查询离不开其存储结构精巧的设计。本文主要通过阅读Doris BE模块代码,详细分析了Doris BE模块存储层的实现原理,阐述和解密Doris高效的写入、查询能力背后的核心技术。其中包括Doris列存的设计、索引设计、数据读写流程、Compaction流程、Tablet和Rowset的版本管理、数据备份等功能。这里会通过三篇文章来逐步进行介绍,分别为《Doris存储层设计介绍1——存储结构设计解析》、《Doris存储层设计介绍2——读写、compaction流程分析》、《Doris存储层设计介绍3——Tablet管理、数据备份》。

Doris 微信公众号:

本文为第一篇《Doris存储层设计介绍1——存储结构设计解析》,文章介绍了Segment V2版本的存储层结构,包括了有序存储、稀疏索引、前缀索引、位图索引、BloomFilter等丰富功能,可以应对各种复杂的场景提供极速的查询能力。

2 设计目标

批量导入,少量更新

绝大多数的读请求

宽表场景,读取大量行,少量列

非事务场景

良好的扩展性

3 存储文件格式

3.1 存储目录结构

存储层对存储数据的管理通过storage_root_path路径进行配置,路径可以是多个。存储目录下一层按照分桶进行组织,分桶目录下存放具体的tablet,按照tablet_id命名子目录。

Segment文件存放在tablet_id目录下按SchemaHash管理。Segment文件可以有多个,一般按照大小进行分割,默认为256MB。其中,Segment v2文件命名规则为:${rowset_id}_${segment_id}.dat。具体存储目录存放格式如下图所示:

6ca76ef90161a93df7f15ad15dd07a2e.png

3.2 Segment v2文件结构

Segment整体的文件格式分为数据区域,索引区域和footer三个部分,如下图所示:

ac0d3a9377049a78ba09dc3402d0422b.png

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

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

Footer信息

SegmentFooterPB:定义文件的元数据信息

4个字节的FooterPB内容的checksum

4个字节的FileFooterPB消息长度,用于读取FileFooterPB

8个字节的MAGIC CODE,之所以在末位存储,是方便不同的场景进行文件类型的识别

下面分布介绍各个部分的存储格式的设计。

4 Footer信息

Footer信息段在文件的尾部,存储了文件的整体结构,包括数据域的位置,索引域的位置等信息,其中有SegmentFooterPB,CheckSum,Length,MAGIC CODE 4个部分。

SegmentFooterPB数据结构如下:

1af1b6b1fddf8a3b308e5e3778086229.png

SegmentFooterPB采用了PB格式进行存储,主要包含了列的meta信息、索引的meta信息,Segment的short key索引信息、总行数。

4.1 列的meta信息

ColumnId:当前列在schema中的序号

UniqueId:全局唯一的id

Type:列的类型信息

Length:列的长度信息

Encoding:编码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值