(三)Hyper压缩策略的选择以及JIT

hyper的DataBlock中采用了三种压缩策略。

signle value 压缩:这种事当在一个block中列的值为单值的时候才用的。

排序字典压缩:一般而言,string会用这种压缩方式,这样方便于做比较操作,比如等号,大于等等

截断压缩:这个压缩算法是只存了数据相对于min只的偏移量,这个压缩算法不会用在string和double 上面

数据会在交给消费者前被解压。

JIT会根据程序执行期间的code信息,来优化指令集,比如可以提高CPU的分支预测准确度,以此提高代码的效率。

比如我们的存取数据的流程如下:


但是由于我们的系统里面有不同的压缩策略:

所以应该的逻辑是这样的:


这样会导致了分支预测上面CPU对于预测错误的分支有CPU的时间的开销。

还有一种解决方案是对这个代码的组合进行展开:


但是,如果用查询引擎中的JIT方式来编译代码:由于如果K个列,每个列都有P段压缩方式,那么就需要P^K个code路径,对JIT 编译器来说,太繁重了。所以在向量化的方式来存取数据的时候,用的是预编译的code。这个预编译的code有各种列和列的压缩对应的信息,然后直接判断是那种组合,直接取数据就可以了。

所以,Hyper对取数据那部分抽成了一个函数,这个函数采用预编译的方式来取数据,这个函数里面每次取的数据是8K行,






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值