(学习记录 个人理解 不一定对)
1. PBI主要有导入模式、direct query、混合模式。
导入模式数据存储模式-基于Vertipaq,数据存储在pbi中
direct query 将查询翻译成sql语句返回数据源进行查询;
混合模式下 导入/直连的表 按照各自的连接模式 有各自的存储方式,不同连接模式下的表 无法直接join(可以建立关系写dax之类的 但是引擎层面无法join)
2. Vertipaq
数据存储在pbi模型中,包括数据内容、模型关系、度量值等。
3. Direct query
数据保留在数据源那,pbi就是建立一个联系 去连接数据源。
4. Vertipad引擎
分为公式引擎(FE)和存储引擎(SE)
1 ) 公式引擎 (FE)接受请求、处理它、生成查询计划并最终执行它; 类似大脑
2 ) 存储引擎 (SE)从表格模型中提取数据以满足公式引擎生成的查询中发出的请求;类似肌肉
从最左侧开始,由图可知,tabular model接收查询语句(DAX/MDX),然后传递到模型里的FE。
FE负责解析公式,计算值。但是FE无法接触到数据。因此SE开始发挥作用。
因为有不同的存储模式,所以SE发挥作用的方式不同。
如果是导入模式,那么SE直接访问vertipaq存储的数据即可;如果是直连模式,那么SE接收查询语句后,又将这个传递到数据源,数据源产生结果后返回给两个引擎。
如果是复合模式(同时有导入和直连),那么各自的SE运算完结果后,返回给FE,由FE将结果join在一起。SE中两种模式 完全不可能连接。
因此,如果是复合模型,计算相同存储模式的表内的measure 运算较快;但如果涉及到不同存储模式的表,对FE的消耗很大,性能差。
5. 为什么vertipaq存储引擎性能快
列式存储pbi导入数据后,会将数据源转换成列式结构,没有行的概念,每一列都与其他列物理分开。
同时,pbi对列进行优化,为每一列建立索引和字典并进行优化压缩。
压缩时,vertipaq主要采用哈希编码和值编码进行优化。哈希编码指为列中值创建字典,然后用字典中的索引值代替真实值。值编码专门处理整数,需要的内存更少。值编码会找到列中最小值,然后计算最小值与列中其他值的差异,并存储这个差异值。
因此,
整数性能优于文本
列中不同值的数量(基数)较少性能较好,具有许多重复值的列可以比包含频繁变化值的列更好地压缩(可以应用 RLE)
表中的行数少性能较好。