PForDelta索引压缩算法的实现

PForDelta索引压缩算法的实现 - pennyliang的专栏 - 博客频道 - CSDN.NET

PForDelta索引压缩算法的实现

分类: 奇淫巧计系列 2696人阅读 评论(18) 收藏 举报

      前日一个朋友给我发来了一个索引压缩算法,写得非常漂亮而且简洁,压缩比和解压性能方面大大超过目前已知的一些字节对齐的算法和Pfordelta这样的非字节对齐的算法,让人叹为观止,这是我看到的最好的压缩算法,他将会以论文的形式发表,相信必将震惊世界,我之前也写了很多Pfordelta的博客,大家对这个算法的具体实现很好奇,有几个难点,一个是bit pack和unpack,一个是关于exception的占位符在做链接的时候如果间隔超过了2的b次方如何处理等等,在以前的博客中曾应用了一个日本开发者开发的算法,但目前已经不开源了,我昨天又读了一遍pfordelta实现方面的论文【Super-Scalar RAM-CPU Cache compression】,今天一天写了个大概,bit pack和unpack在1,2,4,8,16...这种2的幂是比较容易处理的,其余的比较困难,我这里只实现了pack3和unpack3,论文【Balancing Vectorized Query Execution with Bandwidth-optimized Storage】中给出了unpack12的参考代码,理论上应该实现从pack3到pack16的全部方法,限于博客篇幅不全写了,有兴趣读者朋友依葫芦画瓢可以继续完成。

      值得注意的是:(1)PFORDelta可以对0值进行压缩,这是非常有利的。(2)pack和unpack的函数指针数组也比较有特色,PACK[bitwidth](code,data,MAX);通过bitwidth值来取相应的pack和unpack函数,提高CPU流水线的通畅性。

      算法本博客不做过多解释,有兴趣的朋友可以参见我此前的博客:

      http://blog.csdn.net/pennyliang/archive/2010/09/25/5905691.aspx

      另外,我这位朋友想让我做一个最快的Pfordelta算法来PK一下,会输多少,我知道肯定会输,而且会很大,只是想尽可能做个最合格的对手,如果有读者朋友有更好的实现,也请发给我参考,非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值