1、关于bitmap
bitmap是使用bit位来存储数据的一种结构,当数据有明确的上下界时,我们可以转换到bitmap去存储,比如0~8区间的数,如果使用int来存,则需要耗费32字节大小,如果使用位来存,只需要花费1个字节大小,相差32倍,在大数据量的情况下,比较节约空间,而且索引效率高。
bitmap的缺点也很明显,首先,当数据比较稀疏时,bitmap显然比较浪费空间,如果要存储整个int32的数据,则需要512MB的空间大小,其次,无法对重复数据进行排序和查找。
为了解决bitmap在稀疏数据集下浪费空间的问题,出现了几种改进算法,下面将结合实例来讲解。
2、RLE bitmap
一种常见的思路是 run-length encoding(RLE)编码,其大致思想是对于bitmap中重复的值(很多个0或者很多个1),采用值加上重复出现的次数表示,从而起到压缩的目的。这种算法包括Oracle’s BBC、WAH、EWAH、 Concise等。我们从WAH开始,介绍一下压缩思路的改进
WAH(Word Aligned Hybrid)是在Fastbit项目中提出的,这个算法的核心在于两点:Word Aligned和Hybrid,其中,Word Aligned利用现代CPU特性:操作Word比Byte效率高,所以首先会以Word为单元对bitmap数组进行分割,而Hybrid思想是对一个Word的数据格式进行分类处理。
把现存的Word分为两类:literal words和fill words,如果一个