本文参考斯坦福著名论文:implementing data cubes efficiently。
在kylin(麒麟)中,有一项关键技术叫做预计算:简单的说,我们预先计算出用户可能查询的结果,每一种可能我们称之为一个cuboid,所有的cuboid组合起来叫一个cube。我们把cube存储起来,当用户需要查询数据的时候,就不用查找原始数据表,直接查询cube就能得到想要的数据,这是让kylin能在秒级甚至亚秒级查询亿级以上的数据保证。
一个原始表n个dimension(维度),理论上就有2^n个cuboid
所以,存在一个问题,一个原始表的维度可能很多,我们不可能将所有的可能都存储起来,这将极大的耗费资源,为此我们需要将需要的cuboid创建出来,优化kylin系统
在这里介绍一个概念:rollup
在TCP-D 数据库中有三个属性(dimension):part,supplier,customer和measure:total sales。我们有八种可能聚合这些属性.
1、part,supplier,customer(6M,600万行)
2、part,supplier(0.8M)
3、part,customer(6M)
4、supplier,customer(6M)
5、part(0.2M)
6、supplier(0.1M)
7、custo