1.基本概念
Doris的Compaction 策略决定什么时候将哪些小文件合并成大文件。适当的调整 Compaction 的策略,可以极大地提升导入效率和查询效率。Doris 当前提供了 2种 compaction 策略,通过表属性的 compaction_policy
参数指定。
①size_based compaction 策略:默认策略,对大多数场景适用。
("compaction_policy" = "size_based")
②time_series compaction 策略:是为日志、时序等场景优化的策略。它利用时序数据具有时间局部性的特点,将相邻时间写入的小文件合并成大文件,每个文件只会参与一次 compaction 就合并成比较大的文件,减少反复 compaction 带来的写放大。
("compaction_policy" = "time_series")
2.使用实践
默认策略就不说了,主要是time_series compaction 策略针对主键模型和聚合模型使用。我们分别将个别主键模型和清洗日志的聚合模型的Compaction 策略调整为time_series。
起初可以看到Compaction Score 有明显的下降。但是随着时间越来越长。大概在一周后,我们发现主键模型的查询效率越来越低,清洗日志的聚合模型几乎没有影响。
3.分析总结
①分析
为什么主键模型查询效率越来越低呢?基于time_series compaction 策略的基本概念,它将相邻时间写入的小文件合并成大文件,每个文件只会参与一次 compaction。在主键模型使用time_series策略的时候,每个文件只会参与一次 compaction,那么同一个主键的数据会compaction到多个文件,无法真正merge。时间越长,版本就越多,查询效率越来越低。
日志聚合模型为什么没有影响呢?因为日志聚合模型的主键和时间相关,并且日志聚合模型同一天的数据不会重复出现。所以日志聚合模型的版本不会有太大影响。
②总结
Doris的time_series compaction 策略只适用于日志实时消费的模型,不要轻易使用,特别是需要覆盖属性的主键模型不能使用time_series compaction 策略。
标签:策略,series,模型,实践,compaction,time,主键,doris,Compaction From: https://blog.csdn.net/weixin_71195617/article/details/142053705