Kylin
会把所有的维度按照顺序组合成一个完整的
Rowkey
,并且按照这个
Rowkey
升序
排列
Cuboid
中所有的行。
设计良好的
Rowkey
将更有效地完成数据的查询过滤和定位,减少
IO
次数,提高查询
速度,维度在
rowkey
中的次序,对查询性能有显著的影响。
Row key
的设计原则如下:
1
)被用作过滤的维度放在前边。
2)基数大的维度放在基数小的维度前边。
4
并发粒度优化
当
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
最少或最多被划分成多少个分区。
由于每个
Cube
的并发粒度控制不尽相同,因此建议在
Cube Designer
的
Configuration
Overwrites
(上图所示)中为每个
Cube
量身定制控制并发粒度的参数。假设将把当前
Cube
的
kylin.hbase.region.count.min
设置为
2
,
kylin.hbase.region.count.max
设置为
100
。这样无论
Segment
的大小如何变化,它的分区数量最小都不会低于
2
,最大都不会超过
100
。相应地,
这个
Segment
背后的存储引擎(
HBase
)为了存储这个
Segment
,也不会使用小于两个或超
过
100
个的分区。我们还调整了默认的
kylin.hbase.region.cut
,这样
50GB
的
Segment
基本上
会被分配到
50
个分区,相比默认设置,我们的
Cuboid
可能最多会获得
5
倍的并发量。
(注:相关优化,概念性描述,有一些抽象,不太容易理解,可以查阅相关kyline的资料)