Kylin - 剪枝优化及其方法

为什么要进行剪枝优化?

在没有采取任何的优化措施的时候,Kylin会对每一个维度组合进行预计算,若有4个维度,则会有将近2^4 = 16个Cuboid需要进行计算。但是我们知道很多维度是:

  • 1.不需要参与计算或者说不常用的
  • 2.与其他的维度有一定的包含关系的
  • 3.一定会跟其他维度一起进行查询的

    如果有10个维度那会有2^10=1024个Cuboid需要进行计算,虽然每个Cuboid的大小存在很大的差异,但是单单想到Cuboid的数量就足以让人想象这样大小的Cube对于构建引擎、存储引擎的压力会有多么巨大,所以在构建维度较多的Cube时,剪枝优化是非常重要的。

剪枝优化效率检测

  1. 检查Cube的数量 -> 检查被物化的Cube数量 (Meterialized)
  2. 检查Cube的大小 -> expansion Rate (0-1000%是一个较为正常的数字)

剪枝优化的方法

1. 使用衍生维度

即使用维度表的主键(也就是事实表的外键)来代替维度表的非主键维度,这种方式牺牲一部分运行时间性能来节省Cube的空间占用目的。

2. 使用聚合组

聚合组假设一个Cube的所有维度均可以根据业务需求划分为若干组(或者一个组),由于同一组合内更有可能被同一查询到,因此会表现出更强大的内在关联

每一个组内,会包含三种可选的维度:

1.强制维度(Mandatory)

若为强制维度,则该分组中每一个Cubiod都会包含这个维度,若该维度一定会出现在查询中,则应当将其设置为强制维度

2.层级维度(Hierachy)

每一个层级中应包含2-n个维度,这n个维度会以()、(N1)、(N1,N2)、…、(N1, N2,…,Nn)这N+1种情况进行组合

3.联合维度(Joint)

每一个联合维度包括两个或者更多的维度,联合维度内的维度,要么不出现,要么必须一起出现。不同的联合之间不应当有共同的维度

3. 粒度优化

粒度优化对应的是提高Cube的并发度,其设置是在自定义属性中的
一共有三个属性可以提高并发度。
1.kylin.hbase.region.cut(共使用几个分区)
2.kylin.hbase.region.count.min(最少使用几个分区)
3.kylin.hbase.region.count.max(最多使用几个分区)

根据相对应的情况调高最少使用分区,降低最大使用分区,能够有效增加系统的并行度。

4. (其他)RowKey优化

和Hbase 的RowKey优化类似
1.在查询的过程中,被用作过滤条件的维度可能放在其他维度的前面
2.经常出现的维度应该放在前面
3.基数比较大的维度应该放在前面

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值