未完
目录
1 RoaringBitmap 概念
位集,也称为位图,通常用作快速数据结构。不幸的是,它们可能会使用太多内存。为了弥补这个缺点,我们经常使用压缩位图。
RoaringBitmap 是压缩位图,其性能往往优于传统的压缩位图,例如 WAH、EWAH 或 Concise。某些情况下可以快数百倍,甚至可以比未压缩的位图更快。他被广泛应用于许多家大型系统,如Apache Spark,Apache Hive,Apache Tez,Apache Kylin,Apache CarbonData,Netflix Atlas,OpenSearchServer,zenvisage,Jive Miru,Tablesaw,Apache Hivemall,Gaffer,Apache Pinot and Apache Druid--https://github.com/RoaringBitmap/RoaringBitmap
RoaringBitmap 常用于去重、标签筛选、时间序列等计算中。
( 菠萝科技备注:Apache Kylin RoaringBitmap 技术分享链接 xxx后面补充xx
2021.7.7日更:
大数据分析常用去重算法分析『Bitmap 篇』 - Kyligence的文章 - 知乎
https://zhuanlan.zhihu.com/p/65109143
【视频 + PPT】如何使用 Kylin 进行海量自定义标签的用户画像分析? - Kyligence的文章 - 知乎
https://zhuanlan.zhihu.com/p/100131550
)
2 位图的比较
2.1 与bbc、 WAH、EWAH 或 Concise 比较
#Oracle 的 BBC(字节对齐位图代码)在这一点上是一种过时的格式:虽然它可能提供良好的压缩,但由于过度分支,它可能比最近的替代方案慢得多。
#WAH(字对齐混合)是 BBC 的专利变体,可提供更好的性能。
#Concise 是获得专利的 WAH 的变体。在某些特定情况下,它可以比 WAH 压缩得更好(最多好 2 倍),但通常更慢。
#EWAH(Enhanced Word Aligned Hybrid)都是免费的,而且比上面所有的都要快。不利的一面是,它也不会压缩。它更快,因为它允许某种形式的“跳过”未压缩的单词。因此,尽管这些格式在随机访问方面都不是很好,但 EWAH 比替代方案更好。
然而,这些格式存在一个大问题,在某些情况下可能会严重伤害您:没有随机访问。如果要检查集合中是否存在给定值,则必须从头开始并“解压缩”整个内容。这意味着如果你想将一个大集合与一个大集合相交,在最坏的情况下你仍然需要解压缩整个大集合。
RoaringBitmap解决了这个问题。它以下列方式工作。它将数据分成 2 16 个整数的块(例如, [0, 2 16),[2 16 , 2 x 2 16),...)。在块中,它可以使用未压缩的位图、简单的整数列表或运行列表。无论它使用什么格式,它们都允许您快速检查任何一个值的存在(例如,使用二进制搜索)。最终结果是 Roaring 可以比 WAH、EWAH、Concise 等游程编码格式更快地计算许多操作......也许令人惊讶的是,Roaring 通常还提供更好的压缩率。--https://github.com/RoaringBitmap/RoaringBitmap
更多原理待补充xxxx
2.2 与Bloom Filter和HyperLogLog比较
只可以插入元素,不能删除元素;