Doris 2.0 导入性能提升2-8倍的优化手段

本文详细阐述了Doris存储引擎如何通过优化MemTable的写入、并行下刷机制,以及引入单副本导入功能来提升数据导入性能,特别是针对多副本导入场景,性能提升可达2-8倍。

目录

一、概述

二、MemTable 优化

2.1 写入优化

2.2 并行下刷

2.3  优化效果

三、单副本导入优化

3.1 原理和实现

3.2 如何开启

3.3 优化效果

3.3.1 单并发导入

3.3.2 多并发导入

一、概述

   为提供快速的数据写入支持,Doris存储引擎采用了类LSM Tree结构。在进行数据导入时,数据会先写入Tablet对应的MemTable中,MemTable采用SkipList的数据结构,当MemTable写满之后,会将其中的数据刷写(Flush)到磁盘。数据从MemTable刷写到磁盘的过程中分为两个阶段,第一个阶段将MemTable中的行存结构在内存中转换成列存结构,并为每一列生成对应的索引结构;第二阶段是将转换后的列存结构写入磁盘,生成Segment文件。

  具体而言,Doris在导入流程中会把BE模块分为上游和下游上游BE对数据的处理分为Scan和Sink两个步骤:首先Scan过程对原始数据进行解析,然后Sink过程将数据组织并通过RPC分发给下游BE。当下游BE接受数据后,首先在内存结构MemTable中进行数据攒批,对数据进行排序、聚合、并最终下刷成数据文件(也称作Segment文件)到磁盘上来进行持久化存储。

 在实际的数据导入过程中,可能会出现以下问题:

  • 因上游 BE 跟下游 BE 之间的 RPC 采用 Ping-Pong 的模式,即下游 BE 一个请求处理完成并回复到上游 BE 后,上游 BE 才会发送下一个请求。如果下游 BE 在 MemTable 的处理过程中消耗了较长的时间,那么上游 BE 将会等待 RPC 返回的时间也会变长,这就会影响到数据传输的效率。
  • 当对多副本的表导入数据时,需要在每个Tablet副本上重复执行MemTable的处理过程。然而,这种方式使每个Tablet副本所在节点都会消耗一定的内存和 CPU 资源,不仅如此,冗长的处理流程也会影响执行效率。

为解决以上问题,为进一步提高数据导入性能,Doris-2.0版本对导入过程中MemTable的攒批、排序和落盘等流程进行优化,来提高上下游之间数据传输的效率。此外还提供了单副本导入的数据分发模式,面对Tablet多副本数据导入时,无需在多个BE上重复进行MemTable工作,有效提升集群计算和内存资源的利用率,进行提升导入的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值