小树不修不直溜,Cube不修性能堪忧

404 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…

小树不修不直溜,Cube不修性能堪忧

坚持原创,写好每一篇文章

Apache Kylin的Cube的构建是根据维度来进行构建的,如果是m个维度,就会产生2的m次方个Cuboid,如果维度过多的话,产生的Cuboid也会增多,所以需要我们减少Cuboid,专业术语是Cube的剪枝,就像大树如果分支太多了就长不高,需要我们进行剪枝。那么对于Apache Kylin的Cube剪枝的手段有哪些呢?这篇文章就为大家讲一下

联合维度

使用联合维度组可以减少Cuboid的生成,所谓联合组就是将几个维度绑定在一起,比如维度a和b是一个联合组,c和d是一个联合组,那么a和c就不会组合在一起了,这样Cuboid就减少了。像一一对应的字段通常设置为联合维度

必需维度

必需维度就是group by 和where条件中出现的字段,以此作为的维度

衍生维度

什么是衍生维度,还是举个栗子🌰,有一个订单表,订单表中存储的是用户的id和订单金额,而用户表的数据有用户名、姓名、性别、出生年月等详细的信息,如何这些字段都用到的话将会产生非常多的Cuboid,而我们可以把用户名、姓名、性别等这些信息作为衍生维度,这些不会根据这些字段作为维度构建Cuboid数据了,从而减少Cuboid的生成,当查询的时候会根据这些衍生维度,找到对应的主键,从而获得相应的数据。

层级维度

层级维度也是我们经常遇到的,像省市县一层一层的树形结构的数据,省市县这样的数据可以将这个三个维度设置为层级维度,这样形成的Cuboid为以省为维度的Cuboid、以省市为维度的Cuboid和以省市县为维度的Cuboid。

总结

这篇文章我们讲了Cube剪枝的操作,如果不进行剪枝的话,m个维度就会组成2的m次方个Cuboid,有些Cuboid我们在查询的时候根本用不到,因此就有了对Cube剪枝的操作,具体有联合维度、必需维度、衍生维度和层级维度这些操作,通过这些操作可以减少Cuboid的数量,数量减少了构建Cube的过程也会变得很快,存储空间也大大减少。所以我们在构建的时候选择合适的维度进行合适维度类型的选择。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。