Doris分区-分桶规范

Doris库-表使用规范
一、字符集规范
1、数据库字符集指定UTF-8,并且只支持UTF-8。
2、库名统一使用小写方式,中间用下划线()分割,长度62字节内。
3、表名称大小写敏感,统一使用小写方式,中间用下划线(
)分割,长度64字节内。

二、库表规范
1、确保每个tablet大小为1-3G之间。
2、不要使用Auto Bucket,按照自己的数据量来进行分区分桶,Auto Bucket会造成tablet数量过多,造成大量小文件的问题。
3、如果分桶字段存在30%以上的数据倾斜,则禁止使用Hash分桶策略,改使用RANDOM分桶策略。
4、1000w-2亿以内数据为了方便可以不设置分区,直接用分桶策略。(不设置其实Doris内部会有个默认分区)。
5、2000kw以内数据禁止使用动态分区(动态分区会自动创建分区,而小表用户客户关注不到,会创建出大量不使用分区分桶)。
6、5亿以上的数据必须设置分区分桶策略。
7、维度表:缓慢增长的,可以使用单分区,在分桶策略上使用常用查询条件(这个字段数据分步相对均衡)分桶,
100M以内:1个buckets
100M-1G:3-5个Buckets
大于1G-3G:5-7个buckets
3-5G:7-10个buckets
8、事实表
8.1、没有办法分区的,数据又缓慢增长的:单个tablet数据量保持在1-3G。
8.2、没有办法分区的,数据又较快增长的,没办法按照时间动态分区,可以适当放大一下你的bucket数量,按照你的数据保存周期(180天)数据总量,来估算你的bucket数量应该是多少,建议还是单个bucket大小在1-3G。
8.2.1、避免数据倾斜的问题:
一个是对分桶字段进行加盐处理,业务上查询的时候也是要同样的加盐策略,这样能利用到分桶数据剪裁能力。
一个是数据随机分桶,这种缺点是没办法利用数据分桶剪裁能力,数据分布会很均匀。
9、对于有大量历史分区数据,但是历史数据比较少,或者不均衡,或者查询概率的情况,将所有历史数据放到对应分区里创建历史分区。
10、百兆左右的维表Tablet数量控制在3-5个,保证一定的并发数也不会产生过多的小文件。
11、单表物化视图不能超过6个,
11.1、单表物化视图是实时构建
11.2、在Unqiue模型上物化视图只能起到Key重新排序的作用,不能做数据的聚合,因为Unqiue模型的聚合模型是Replace
12、如果是时序场景,建议在建表时"compaction_policy"="time_series"加上这个表属性配置,在时序场景持续导入的情况下有效降低compact的写入放大率,注意需要配合倒排一起用。

分桶原则:
若是整体数据量较小,则分桶数不要设置过多
若是整体数据量较大,则应使桶数跟总的磁盘块数相关,充分利用每台BE机器和每块磁盘的能力

分桶数据计算方法:
1、根据数据量得出一个桶数-N
数据量 < 100MB,则取 N=1
数据量 < 1GB,则取 N=2
数据量 > 1GB,则每一个GB,一个分桶

2、根据BE节点数和每个BE节点的磁盘容量,计算出桶数-M
M = BE节点数磁盘块数(一块磁盘块大小/50GB)

3、计算一个中间值-X
X = min(M, N, 128)

4、最终分桶数-Y

  1. X<N && X<BE节点数 --> 最终分桶Y = BE节点个数
  2. 否则,最终分桶数Y = X

int N = 计算N值;(数据量<100MB,则取N=1; 数据量<1GB,则取N=2; 数据量>1GB,则每一个GB,一个分桶)
int M = 计算M值;(BE节点数磁盘块数(一块磁盘块大小/50GB))
int y = BE节点个数;
int x = min(M, N, 128);
if (x < N && x < y){
return y;
}
return x;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值