全量构建与增量构建性能
全量构建集群
对数据模型中没有指定分割时间列信息的Cube,Kylin会采用全量构建,即每次从Hive中读取所有的数据来开始构建。一般它适用于如下两种情形。
事实表的数据不是按时间增加的。
事实表的数据比较小或更新频率很低,全量构建不会形成太大的开销。请求
增量构建数据
Kylin每次都会从Hive中读取一个时间范围内的数据,而后进行计算,并以一个Segment的形式进行保存。下次再构建的时候,会自动以上次结束的时间为起点时间,再选择新的终止时间进行构建。通过屡次构建,Cube中将会有多个Segment依次按时间顺序进行排列,如Seg-1,Seg-2,…,Seg-N。查询的时候,Kylin会查询一个或多个Segment而后再作聚合计算,以便返回正确的结果给请求者。
使用增量构建的好处是,每次只须要对新增数据进行计算,从而避免了对历史数据进行重复计算。对于数据量很大的Cube,使用增量构建是很是有必要查询
增量构建引起的问题时间
历史数据刷新分割
Cube构建完成之后,若是某些历史数据发生了改动,那么须要针对相应的Segment进行从新计算,这种构建称为刷新。刷新一般只针对增量构建的Cube而言,由于全量构建的Cube只要从新所有构建就能够获得更新;而增量更新的Cube由于有多个Segment,所以须要先选择要刷新的Segment,而后再进行刷新。模型
在刷新的同时,Cube仍然能够被查询,只不过返回的是陈旧数据。当Segment刷新完毕时,新的Segment会当即生效,查询开始返回最新的数据。老Segment则成为垃圾,等待回收。ab
Cube合并管理
随着时间的迁移,Cube中可能会存在较多数量的Segment,使得查询性能降低,而且会给HBase集群管理带来压力。对此,须要适时地将一些Segment进行合并,将若干个小Segment合并成较大的Segment。
合并的好处具体以下:
1)合并相同的Key,从而减小Cube的存储空间。
2)因为Segment减小了,所以能够减小查询时的二次聚合,提升了查询性能。
3)HTable的数量得以减小,更便于集群的管理。