Bitmap 详细介绍

2020-03-28 algorithm

Roaring

对于 32bits 整形来说,将高 16bits 作为桶 (Chunk) 标识,低 16bits 作为通过容器 (Container) 保存。

容器中根据数据量分成四类:A) Array Container,小于等于 4096 通过 Array 保存;B) Bitmap Container,大于 4096 通过 Bitmap 保存;C) Run Container 就是采用游程编码;D) Shared Container 在共享一些数据时比较常用。

对 Array 来说,每个元素为 2Bytes 大小,最大 4096 个元素,所以,最大 8K;类似的,通过 Bitmap 保存同样可以保证最大 8K 存储。

运行容器使用游程编码 (Run-Length Encoding),可以将 [11, 12, 13, 14, 15, 27, 28, 29] 编码为 [11, 4, 27, 2],也就适用于连续递增场景。

常规的 AAAAABBBEEEEE 可以编码为 5A3B5E,显然,适用于重复性高的序列,如果出现频率不高,反而可能会导致放大。

Retention/Cohort Report 留存分析 一般来说,获取客户只是第一步,留住客户才是产品的最终目标,常见的有次日留存、周留存、月留存等,计算的就是两个集合的交集。

RoaringBitmap/CRoaring