Doris使用必读

最近吃了doris不少亏,不是cpu被打满,就是io居高不下,最终结果就是无法进行streamload和查询,导致下游业务不可用,频繁被业务投诉,每次收到doris报警,都无比紧张。

那产生这些问题的原因是什么呢?根据这一段时间的教训,总结下来主要有以下几点:

  • 高频、小数量导入数据:导致doris事务压力飙升,fe变慢甚至阻塞,be产生大量的临时文件,compaction压力剧增,compaction累积必然造成be节点cpu、io持续增高。

  • 查询设计随意:查询支持的字段设计随意,大量查询无法命中分区、分桶和索引,从而导致扫描数据量巨大,每个be节点执行大量的文件读取,查询延迟增加,进一步增加be节点cpu、io的消耗。

  • 数据划分不合理:数据分布不均匀,导致个别分区、分桶数据量过大,从而导致查询时,数量扫描数据量过大,造成io居高不下。

  • 数据结构设计不合理:单条数据,尤其是训练数据,居然高达10M+以上,streamload性能急剧下降,compaction负载剧增,同时查询效率暴跌,一个查询可能要扫描GB级别数据,从而给内存和io带来巨大的压力。

归根结底,并不是doris性能不好,而是在技术选型时,没有对doris以及支撑的业务做充分的评估和调研,最终导致了现在这种频繁出问题,服务不能达到高可用的现状。

如何做到doris的高效写入、查询和稳定,那需要对doris有一个全面且深入的了解,下面就把最近了解到的一些知识分享给你,希望能够帮助到正在使用和即要使用doris的同学。

1、集群选择

doris从3.0开始支持存算分离架构,也就是说,最新版本我们可以有两个选择,存算一体+存算分离,具体选择哪一种,取决于自己的业务特点,概括来说:

存算一体:性能强,延迟低,在线服务首选。

图片

存算一体架构

存算分离:成本低,容量大,大数据仓库首选。

图片

存算分离架构

2、数据存储方式

了解doris数据存储方式,对于doris表设计、查询有非常大的帮助,能够最大程度的让你避免后续遇到cpu、io居高不下的问题,doris的数据存储,需要了解三个概念:

  • 分区

  • 分桶

  • 索引

在使用doris之前,你必须要深入了解和学习这三个概念,这样才能保证数据存储和查询方案的科学和高效,如下图:

合理的分区、分桶以及索引设计才能保证数据的稳定写入和高效查询

3、数据划分-分区

分区是数据组织的第一层逻辑划分,用于将表中的数据划分为更小的子集,doris 支持两种分区类型:

  • Range 分区:根据分区列的值范围将数据行分配到对应分区。

  • List 分区:根据分区列的具体值将数据行分配到对应分区。

三种分区模式:

  • 手动分区:用户手动创建分区(如建表时指定或通过  ALTER 语句增加)。

  • 动态分区:系统根据时间调度规则自动创建分区,但写入数据时不会按需创建分区。

  • 自动分区:数据写入时,系统根据需要自动创建相应的分区,使用时注意将数据生成过多的分区。

对于每个分区大小最佳值,doris 官方没有给出明确的数值,根据社区的最佳实践,分区大小:10G-50G。

4、数据划分-分桶

分桶是数据组织的第二层逻辑划分,用于在分区内将数据行进一步划分到更小的单元。Doris 支持以下两种分桶方式:

  • Hash 分桶:通过计算分桶列值的 crc32 哈希值,并对分桶数取模,将数据行均匀分布到分片中。

  • Random 分桶:随机分配数据行到分片中。使用 Random 分桶时,可以使用load_to_single_tablet 优化小规模数据的快速写入。

桶数量的设计,推荐为 be 节点数量的整数倍。

理想分桶列: 查询常用字段 + 高离散度字段(可组合)

推荐大小:1-5G为理想值。

5、索引设计

doris的索引,在2.X版本上bitmap索引已经没有了,已经完全被倒排索引替代,这点同学们要注意。

6、写入策略

简单来说,doris的写入,不能像mysql、redis这种存储介质一样,接收大流量、小数据量数据的在线写写入,Doris 的存储引擎(LSM-Tree 变体)和查询引擎是为大批量、低频率的批量写入设计的。高频小写入与其底层优化方向背道而驰,会引发一系列连锁问题:

  • Compaction 严重过载:数据合并任务堆积,内存和io消耗巨大。

  • 查询性能恶化:一个查询需要打开、扫描和合并海量的小文件,元数据开销和IO次数暴增,查询延迟(Latency)急剧上升,吞吐量下降,且查询时需要维护更多的迭代器和上下文,内存占用更高。

  • 资源耗尽:上述的 Compaction 压力、内存压力、文件描述符耗尽等,最终可能导致整个 BE 节点甚至集群不稳定,服务不可用。

以上六点,如果设计科学、合理,在使用doris的过程中,必然不会出现写入错误、查询耗时严重,最终导致cpu、io打满doris无法工作的问题。


最后,希望本篇文章能够帮助到大家~~~。


求个关注,一起写写代码、学学历史、跑跑步~~~,偶尔也可以扯扯淡、聊聊天,这才是生活~~~~😄😄😄😄😄😄。

往期推荐

解析高驰(COROS)、佳明(Garmin)Fit运动数据(go-echarts生成曲线),看看你的跑步能力提升了吗?

在Gin中使用go-echarts,实现折线、柱状图、饼图等图表的在线绘制

学会它,让你在Go中轻松绘制精美图表

测出这组数据,就可以放心使用RabbitMQ了

golang模板的详细使用方法

自动驾驶数仓-Base时间片与多个交集时间片的多维度合并算法

自动驾驶数仓开发,一定要知道时间片交集的这几种情况。

Golang泛型使用入门

Web开发的身份证:JWT(json web token)令牌使用方法

Web服务压力测试工具hey(golang)学习二:架构设计(源码学习)

Web服务压力测试工具hey学习一:使用方法

云端【多维度限流】技术方案设计,为服务稳定保驾护航

自动驾驶数据仓库:对时间片进行合并的小算法。

一个有线上问题带来的知识点:Python日志打印

一个实际上线的项目:Elastic检索库历史数据清理

Elastic:索引生命周期管理(Index Lifecycle Management)-减轻ES存储压力

Elasticsearch:delete_by_query使用方法

Python Tortoise ORM库的基础操作介绍

RabbitMq:消费侧未限流导致的rabbitmq报错异常,消息不能正常消费。

一个读写excel的简单程序(golang)

一个异步架构设计:批量消费RabbitMQ,批量写入Elasticsearch(golang实现)

命令行参数的艺术:Python、Golang、C++技术实现

supervisor,你理应知道。

借助tritonserver完成gpt2模型的本地私有化部署

微信小程序文章列表焕新颜:从丑小鸭到白天鹅的华丽蜕变

趴菜就是趴菜,捯饬3天,才搞出小程序头部banner,还是个半成品

小程序实现文章列表点击跳转公众号详情页

前端小趴菜终于把公众号和开发的不能再磕碜的小程序首页关联上了

【续】开发triton客户端,访问clip-vit-large-patch14模型抽取图片特征。

NVIDIA tritonserver实现CLIP-ViT模型工程化:轻松获取图片特征(by grpc or http)

Elasticsearch的pit(point in time)到底是个啥玩意?

一文揭秘:Golang+Elasticsearch轻松搭建AI时代的图片搜索服务

吭哧一天才搞定:elasticsearch向量检索需要的数据集以及768维向量生成

protobuf c++开发快速上手指南

项目踩坑记--RabbitMq连接过多导致的内存打满

RabbitMQ-死信队列(golang)

ElasticSearch向量检索技术方案实现

golang操作mysql之利器-gorm

golang线程池ants-实现架构

RabbitMQ-topic exchange使用方法

RabbitMQ-直连交换机(direct)使用方法

RabbitMQ-发布/订阅模式(扇形交换机)

RabbitMQ消息中间件使用之-傻瓜模式

golang线程池ants-你会用了吗

golang的heap profile是抽风了吗

tfrecord文件介绍、读取、写入介绍

条件变量的使用(golang)

学到心理学的这3个知识点,让你在辅导孩子作业时不再鸡飞狗跳,一地鸡毛。

人生,当活成他的样子:竹林七贤之首-嵇康

读《崇祯皇帝传》之一:夹缝求生,初登大宝

2025越山向海张家口站:从草原天路到崇礼142.6公里,我们一起跑过。

大同华严寺:受人民爱戴的耿市长还会回来吗?薄伽教藏的合掌漏齿菩萨你知道是谁吗?

云冈石窟:翻开这本距今1565年、与天地同久长的石头史书,感受北魏王朝雕刻艺术的巅峰之作。

历经沧桑的应县木塔,在风雨中已等你969年。

从北京到大同,走过600里,跨越1000年。

跑步的第六年,才真正了解运动的意义

武汉抗疫英雄汪勇:平凡人的非凡之举。

李白:为何两次选择做了上门女婿?

2025年,我要做个自我介绍

我在百度的这10年~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值