mondrian 源码研究之 缓存数据的加载、初始化

24 篇文章 0 订阅

前言:

在mondrian中,所有数据的来源都是聚集层,储存层把mdx语句生成的sql执行完后,再到聚集层中做整理,存入外部缓存。

今天要讲的类:

SegmentLoader.java。

主要说下  loadImpl()方法中主要方法的主要作用。

1. createExecuteSql( ) 生成sql。

2. processData( ) ,将维度每一列的值都加载到 axisValueSets属性中,他为sortedSet,值有序不重复。axisContainsNull 为此列是否为空的标识(这里我认为是有bug的)。返回值即为所有维度、度量的值。

3. setAxisDataAndDecideSparseUse( ),axes参数中即为多个SegmentAxis对象,每一个对象对应一个维度列。mapKeyToOffset为真正的值,空值为 #null。

4. createDataSetsForGroupingSets( ),整理以上个属性。

5. loadDataToDataSets( ) ,创建pos坐标,这是为每一个维度值在结果中的顺序坐标,这个是后面从缓存中取数据的关键,只要有一个坐标值对不上,那就取不出数据。axis.getOffset((Comparable) o) ,这个方法是关键。

6. setDataToSegments( )这个方法主要是把数据存到外部缓存,核心方法:cacheSegment(cacheMgr, segment.star, header, body),segmentWithData 就是附带数据的每一个段,一个度量对应一个段(segement)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值