(四)Hyper如何将数据整合以及取数据

来源:互联网 发布:csmar数据库分红数据 编辑:程序博客网 时间:2024/05/22 17:41

Hyper中取数据流程如上图:

其中,在取数据的时候会将数据横切,分批次输出,这样做的好处是考虑到内存的cache。

还有,为什么Hyper没有将数据直接取出到consumer中呢?我觉得这个和DataBlock数据组织有关系,因为DataBoloc是按照列存储的,那应该是按照列取数据。对于hot区域,为了给上层暴露一个统一的接口,应该也是以这种方式来取数据:将数据先缓存在一个vector中,然后再将vector的数据喂给consumer


其中Hyper取数据用到了SIMD特性来取数据,个人认为,GoldFish的数据是预先排序了的,取数据的时候,相近的数据都在一起,可以快速取出,由此带来的代价就是:

数据排序了,更新的时候耗费时间慢;

数据在传输过程中压缩和解压缩是耗费时间的;

对于那种男女的特殊情况,还需要上层QE对数据支持,或者是CS上面自己做数据迁移(代价大),不然由于更新的数据的到来,难以做到负载均衡。

Hyper中的数据是没有排序(除了orderDict压缩方式以外)这样的话,数据就没有什么依赖,更新操作只需要打标记就可以了,不过在取数据的时候,没有排序的数据块:

对此Hyper的解决办法是,用了PSMA,用了SIMD特性,这样加快了取数据的时间。不过由于取到的数据本身是没有顺序的,如果后期需要对数据排序操作的话,其实是缓慢的。

0 0
原创粉丝点击