前言:
这几天基于师兄 给的《Apache+Kylin权威指南》一书已初步对Kylin有所了解,并对其预计算的设计思想叹为观止,但其以空间换时间的设计如若不进行合理的优化,cube会因为维度较多而急剧膨胀,导致消耗巨大的本不必要消耗的空间,因此,合理的优化可以构建出体积更小、查询速度更快的 cube。cube的优化主要包括cuboid的剪枝优化(减少cuboid的数量)、并发粒度的优化、Rowkeys优化、降低度量精度以及及时清理无用的Segment。本文将主要介绍 cuboid的剪枝优化。初涉Kylin,必有差错,烦请读者指正。
1、为什么要剪枝?
我们知道,给定一个数据模型,我们可以对其上的所有维度进行组合。对于N个 维度来说,组合的所有可能性共有2^N 种,假设有4个维度,我们可能最终会 有2^ 4 =16个Cuboid需要计算。但在现实情况中,用户的维度数量一般远远大于4个,而如 果用户有20个维度,那么Cube中总共会存在2 ^20 =1048576个Cuboid。虽然 每个Cuboid的大小存在很大的差异,但是单单想到Cuboid的数量就足以 让人想象到这样的Cube对构建引擎、存储引擎来说压力有多么巨大。
2、如何剪枝?(参考《Apache+Kylin权威指南》机械工业出版社版,第6章第2节,P234)
官方提供了两种剪枝工具,即使用衍生维度和使用聚合组。