对于每个分组内部的维度,用户可以使用如下三种可选的方式定义,它们之间的关系,具体如下 。
1)强制维度(Mandatory),如果一个维度被定义为强制维度,那么这个分组产生的所有Cuboid中每一个Cuboid都会包含该维度 。每个分组中都可以有0个、1个或多个强制维度 。如果根据这个分组的业务逻辑,则相关的查询一定会在过滤条件或分组条件中,因此可以在该分组中把该维度设置为强制维度 。

文章插图
2)层级维度(Hierarchy),每个层级包含两个或更多个维度 。假设一个层级中包含D1,D2…Dn这n个维度,那么在该分组产生的任何Cuboid中,这n个维度只会以(),(D1),(D1,D2)…(D1,D2…Dn)这n+1种形式中的一种出现 。每个分组中可以有0个、1个或多个层级,不同的层级之间不应当有共享的维度 。如果根据这个分组的业务逻辑,则多个维度直接存在层级关系,因此可以在该分组中把这些维度设置为层级维度 。

文章插图
3)联合维度(Joint),每个联合中包含两个或更多个维度,如果某些列形成一个联合,那么在该分组产生的任何Cuboid中,这些联合维度要么一起出现,要么都不出现 。每个分组中可以有0个或多个联合,但是不同的联合之间不应当有共享的维度(否则它们可以合并成一个联合) 。如果根据这个分组的业务逻辑,多个维度在查询中总是同时出现,则可以在该分组中把这些维度设置为联合维度 。

文章插图
这些操作可以在Cube Designer的Advanced Setting中的Aggregation Groups区域完成,如下图所示 。

文章插图
聚合组的设计非常灵活,甚至可以用来描述一些极端的设计 。假设我们的业务需求非常单一,只需要某些特定的Cuboid,那么可以创建多个聚合组,每个聚合组代表一个Cuboid 。具体的方法是在聚合组中先包含某个Cuboid所需的所有维度,然后把这些维度都设置为强制维度 。这样当前的聚合组就只能产生我们想要的那一个Cuboid了 。
再比如,有的时候我们的Cube中有一些基数非常大的维度,如果不做特殊处理,它就会和其他的维度进行各种组合,从而产生一大堆包含它的Cuboid 。包含高基数维度的Cuboid在行数和体积上往往非常庞大,这会导致整个Cube的膨胀率变大 。如果根据业务需求知道这个高基数的维度只会与若干个维度(而不是所有维度)同时被查询到,那么就可以通过聚合组对这个高基数维度做一定的“隔离” 。我们把这个高基数的维度放入一个单独的聚合组,再把所有可能会与这个高基数维度一起被查询到的其他维度也放进来 。这样,这个高基数的维度就被“隔离”在一个聚合组中了,所有不会与它一起被查询到的维度都没有和它一起出现在任何一个分组中,因此也就不会有多余的Cuboid产生 。这点也大大减少了包含该高基数维度的Cuboid的数量,可以有效地控制Cube的膨胀率 。
Row Key优化
Kylin会把所有的维度按照顺序组合成一个完整的Rowkey,并且按照这个Rowkey升序排列Cuboid中所有的行 。
设计良好的Rowkey将更有效地完成数据的查询过滤和定位,减少IO次数,提高查询速度,维度在rowkey中的次序,对查询性能有显著的影响 。
Row key的设计原则如下:
1)被用作where过滤的维度放在前边 。

文章插图
2)基数大的维度放在基数小的维度前边 。

文章插图
并发粒度优化
当Segment中某一个Cuboid的大小超出一定的阈值时,系统会将该Cuboid的数据分片到多个分区中,以实现Cuboid数据读取的并行化,从而优化Cube的查询速度 。具体的实现方式如下:构建引擎根据Segment估计的大小,以及参数“kylin.hbase.region.cut”的设置决定Segment在存储引擎中总共需要几个分区来存储,如果存储引擎是HBase,那么分区的数量就对应于HBase中的Region数量 。kylin.hbase.region.cut的默认值是5.0,单位是GB,也就是说对于一个大小估计是50GB的Segment,构建引擎会给它分配10个分区 。用户还可以通过设置kylin.hbase.region.count.min(默认为1)和kylin.hbase.region.count.max(默认为500)两个配置来决定每个Segment最少或最多被划分成多少个分区 。
推荐阅读
- Linux 软链接的使用和具体演示
- 程序员也需了解的主流云计算网络架构
- web应用防火墙是做什么的?与传统网络设备的区别
- 搞微服务用阿里开源的 Nacos 真香啊
- 萨摩耶毛发黄怎么办 萨摩耶的毛变黄是为什么
- 在国外狗算家庭成员吗 狗在美国的地位
- 软件开发人员应该了解的2021年技术趋势
- 怎样预防近视的方法 眼睛近视怎么纠正
- 小金毛刚到家怎么照顾 我家的小金毛
- 金铲铲斗士 金铲铲怎么合斗士
