Doris中compaction的策略有哪些?

提问者:帅平 问题分类:数据库
Doris中compaction的策略有哪些?
3 个回答
心尖爱人
心尖爱人
主要有两种方式:
1、size_based compaction 策略是默认策略,对大多数场景适用。
"compaction_policy" = "size_based"
2、time_series compaction 策略
time_series compaction 策略是为日志、时序等场景优化的策略。它利用时序数据具有时间局部性的特点,将相邻时间写入的小文件合并成大文件,每个文件只会参与一次 compaction 就合并成比较大的文件,减少反复 compaction 带来的写放大。
"compaction_policy" = "time_series"
两个配置都是在建表的时候配置即可,例如:
CREATE TABLE `orders` (
  `order_id` int NULL,
  `user_id` int NULL
) ENGINE=OLAP
DUPLICATE KEY(`order_id`)
DISTRIBUTED BY HASH(`order_id`) BUCKETS 2
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"enable_single_replica_compaction" = "true",
"compaction_policy" = "time_series"
);
使用show create table tablename,只能看到time_series,如果是size_based(默认),则看不到
发布于:4个月前 (12-17) IP属地:四川省
吹南风
吹南风
使用time_series哈尅添加参数,例如:
#详见注释部分的参数
CREATE TABLE `orders` (
  `order_id` int NULL,
  `user_id` int NULL
) ENGINE=OLAP
DUPLICATE KEY(`order_id`)
DISTRIBUTED BY HASH(`order_id`) BUCKETS 2
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"enable_single_replica_compaction" = "true",
"compaction_policy" = "time_series",
-- 设置未合并的文件大小超过多少,单位是:M  (默认是1GB)
"time_series_compaction_goal_size_mbytes" = "1024",
-- 设置未合并的文件个数超过多少,单位是:个( 默认是2000个)
"time_series_compaction_file_count_threshold" = "1000",
-- 设置距离上次合并的时间超过多少,单位是:秒 
"time_series_compaction_time_threshold_seconds" = "3600"
);
这里只要满足这3个条件中任意一个都会触发小文件合并。
发布于:4个月前 (12-17) IP属地:四川省
我来回答