Roaring64NavigableMap(Bitmap)简单使用

RoaringBitMap在ClickHouse和Spark之间的实践-解决数据仓库预计算多维分析问题 ​前面在中说了一下Spark计算在多维分析场景中的弊端,多维度分析会导致数据量指数级膨胀,搭配上去重计算字段越多,膨胀倍数也是线性增长,通过BitMap这个案例也更加让我们明白了,什么是数据倾斜,从根本来讲,并不仅仅是数据量的问题,而是倾斜Task在进行数据IO和数据计算的时候耗费过长时间,我理解为下面三种情况。 阅读详情

作用

        使用较小的内存空间记录许多id(基数)是否存在. 

        a. 记录id是否存在bitmap中

        b. 获取出id基数的个数

深入了解:

        三种 Bitmap 之 RoaringBitmp(压缩 Bitmap)

使用

依赖

		<dependency>
			<groupId>org.roaringbitmap</groupId>
			<artifactId>RoaringBitmap</artifactId>
			<version>0.9.3</version>
		</dependency>

代码

        简单使用

    public static void main(String[] args) {
        // 1. 创建对象
        Roaring64NavigableMap roaring64NavigableMap = new Roaring64NavigableMap();
        // 2. 添加id值
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(234);
        // 3. 优化
        roaring64NavigableMap.runOptimize();
        // 4. 获取id值总个数(基数)
        long longCardinality = roaring64NavigableMap.getLongCardinality();
        System.out.println("基数个数:" + longCardinality);
        // 5. 获取所有id值
        LongIterator longIterator = roaring64NavigableMap.getLongIterator();
        while (longIterator.hasNext()){
            System.out.println("基数:" + longIterator.next());
        }
    }

        对象序列化后使用

    public static void main(String[] args) {
        // 1. 创建对象
        Roaring64NavigableMap roaring64NavigableMap = new Roaring64NavigableMap();
        // 2. 添加id值
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(123);
        roaring64NavigableMap.addLong(234);
        // 3. 优化
        roaring64NavigableMap.runOptimize();
        // 4. 序列化
        String serialize = serialize(roaring64NavigableMap);
        System.out.println("序列化后:" + serialize);
        // 5. 反序列化
        Roaring64NavigableMap bitMap = deserialize(serialize);

        System.out.println("基数个数:" + bitMap.getLongCardinality());
    }

    private static String serialize(Roaring64NavigableMap bitmap){
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            bitmap.serialize(new DataOutputStream(bos));
        } catch (IOException e) {
            log.error("序列化失败",e);
            throw new RuntimeException("bitMap序列化失败");
        }
        byte[] bout = bos.toByteArray();
        return Base64.getEncoder().encodeToString(bout);
    }

    private static Roaring64NavigableMap deserialize(String encrypt){
        Roaring64NavigableMap bitmap = new Roaring64NavigableMap();
        byte[] bout = Base64.getDecoder().decode(encrypt);
        try {
            bitmap.deserialize(new DataInputStream(new ByteArrayInputStream(bout)));
        } catch (IOException e) {
            log.error("bitMap反序列化失败",e);
            throw new RuntimeException("bitMap反序列化失败");
        }
        return bitmap;
    }

 

亿级用户标签系统性能优化:Roaring Bitmap原理与Java实战 在互联网大数据场景下,高效处理海量数据集合的交、并、差运算是核心技术挑战,尤其在用户画像、精准营销和实时分析领域。传统数据库方案在数据量膨胀时面临性能瓶颈,而位图(Bitmap)技术通过直接位运算提供了高性能的集合操作基础。Roaring Bitmap作为位图的智能升级,通过分桶策略和自适应容器(Array Container、Bitmap Container、Run Container)设计,在内存效率与计算速度间取得了卓越平衡。其核心价值在于能够支撑亿级用户标签系统的实时多维度查询,例如同时筛选拥有“活 阅读详情

相关推荐

RoaringBitmap的进阶实战:从原理到性能调优全解析

本文深入解析RoaringBitmap的核心设计思想与性能调优技巧,涵盖ArrayContainer、BitmapContainer和RunContainer的适用场景,以及内存优化、查询性能提升和集合操作的最佳实践。通过真实场景性能对比,展示RoaringBitmap在内存效率与查询速度上的卓越平衡,特别适合用户画像分析、广告日志处理等大数据场景。

weixin_29070861的博客 316

bitmap原理+性能优化实践

bitMap比特图源码分析+原理+工作实践+性能优化

u011752195的博客 4416

关于bitmap的使用总结

声明:本系列博客部分是根据SGG的视频整理而成,非常适合大家入门学习。部分文章是通过爬虫等技术手段采集的,目的是学习分享,如果有版权问题请留言,随时删除。 《2021年最新版大数据面试题全面开启更新》 BitMap Bitmap 是大数据里面常见的数据结构,简单来说就是按位存储,为了解决在去重场景里面大数据量存储问题,目前在Druid/Spark等使用。在Java中一个字节占用8位,那么就代表可以存储8个数字,存储结构如下: 现在需要存储1与5这两个数字: 只需要将对应的bit的下标置

微信搜:import_bigdata,大数据领域硬核原创作者 1283

三种 Bitmap 之 Roaring64NavigableMap(长整形压缩 Bitmap)

<dependency> <groupId>org.roaringbitmap</groupId> <artifactId>RoaringBitmap</artifactId> <version>0.9.0</version> </dependency>

yin__ren的博客 4435

NC5.02新增功能手册.pdf

NC5.02新增功能手册.pdf 现在最稳定的版本。公司用的就是这个。请大家支持。

RoaringBitmap:Java中更好的压缩位集

咆哮位图 位集(也称为位图)通常用作快速数据结构。 不幸的是,它们会占用过多的内存。 为了补偿,我们经常使用压缩的位图。 咆哮的位图是压缩的位图,其性能通常优于传统的压缩位图,例如WAH,EWAH或Concise。 在某些情况下,咆哮的位图可以快数百倍,并且它们通常可以提供更好的压缩效果。 它们甚至可以比未压缩的位图更快。 咆哮的位图在许多重要应用中均能很好地工作: 尽可能使用Roaring进行位图压缩。 不要使用其他位图压缩方法( ) 做出使我的软件运行速度提高5倍的荣誉(BigML的Charles Parker) 该库由 , , ( ) ( ) , ,

Flink去重第四弹:bitmap精确去重

点击箭头处“蓝色字”,关注我们哦!!往期精彩回顾Flink去重第一弹:MapState去重Flink去重第二弹:SQL方式Flink去重第三弹:HyperLogLog去重关于hyperl...

张普的专栏 5262

RoaringBitmap-0.5.11-API文档-中文版.zip

赠送jar包:RoaringBitmap-0.5.11.jar; 赠送原API文档:RoaringBitmap-0.5.11-javadoc.jar; 赠送源代码:RoaringBitmap-0.5.11-sources.jar; 赠送Maven依赖信息文件:RoaringBitmap-0.5.11.pom; 包含翻译后的API文档:RoaringBitmap-0.5.11-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.roaringbitmap:RoaringBitmap:0.5.11; 标签:roaringbitmap、RoaringBitmap、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

Roaring Bitmap:亿级用户标签系统的高效存储与查询实战

在数据密集型的应用场景中,高效处理大规模整数集合的存储与运算是核心技术挑战。其核心原理在于通过压缩数据结构,在有限的内存空间内表示海量数据,并支持快速的集合运算。这种技术为实时分析、用户画像和推荐系统等提供了关键的性能保障。Roaring Bitmap 正是这一领域的杰出代表,它采用分桶和自适应容器的设计,智能地在数组、位图和游程编码三种容器间切换,从而在时间和空间效率上达到近乎最优的平衡。对于需要处理亿级用户标签查询、广告定向或数据库索引加速的场景,Roaring Bitmap 提供了一套经过工程验证的高

weixin_30892763的博客 361

车载机器人终极解决方案:从功能叠加到生态融合的颠覆性变革

本文提出一种融合智能汽车与家居技术的车载机器人架构。其创新点包括:1)基于多模态传感器的拟人化硬件设计,实现声源定位误差<5°、体温检测精度±0.3℃;2)跨模态情感计算引擎,综合面部表情、心率等数据构建三维情绪模型;3)协议自适应中间件,支持小米、华为等多品牌智能家居设备即插即用;4)环境自适应舵机控制,-30℃环境下扭矩保持率达92.5%。测试数据显示,该方案使交互步骤减少60%,用户满意度提升58%,日均使用时长增加2.3倍,为"人-车-家"生态融合提供了可行技术路径。

qq_42671193的博客 1123

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 241

Roaring Bitmap:海量整数集合存储与高效集合运算的工程实践

在数据处理领域,高效存储和查询大规模整数集合是许多核心场景的基础需求,例如用户画像、实时分析和倒排索引。位图索引作为一种经典的数据结构,通过比特位表示整数存在性,实现了极高的集合运算效率,但传统位图在数据稀疏时内存浪费严重。Roaring Bitmap通过分桶和自适应容器(数组、位图、运行长度编码)的混合存储策略,在保持位图高速集合运算优势的同时,极大地压缩了内存占用。这一技术价值在于,它使得对千万乃至亿级用户ID进行实时的交集、并集和差集运算成为可能,直接支撑了用户标签系统、实时人群圈选等对性能和资源敏感

weixin_34259232的博客 418

云模型在综合评价过程中的应用

目录 1 云模型标尺(标准云模型)的构建方法 1.1 通过正态云的“3En 规则”来表示评价论域 1.2 通过论域的边界值隶属度相等来表示评价论域 1.3 通过黄金分割法来表示评价论域 2 确定评价结果的过程 2.1 基本云发生器 2.2 X条件云发生器 2.3 两种方法的区别 综合评价问题一般分为以下六个步骤 1、明确评价目的; 2、确定被评价对象; 3、建立评价指标体系(包括收集评价指标的原始值、评价指标的若干预处理等); 4、确立与各项评价指标相对应的权重系数; 5、选..

weixin_62223576的博客 1万+

Bitmap在数仓中的应用

在数据仓库的日常工作中,我们经常需要面对海量数据的存储和高效查询问题。尤其是,当业务对性能的要求越来越高、数据量持续增长时,传统的处理方式往往显得笨拙而低效。而这时候,(位图)作为一种“看似简单却威力强大”的数据结构,逐渐展现出它的价值。简单来说,Bitmap 就像是一种用“0”和“1”记录信息的小工具。它通过位的形式将数据高效地压缩存储,同时支持快速的集合运算,比如并集、交集、补集等。这些特性使得 Bitmap 在高基数去重、行为统计、快速筛选等场景中表现得尤为出色。

小王是个弟弟 1365

JESD204B系统设计实战:如何用SYSREF信号搞定多设备时钟同步(附时序图详解)

本文深入探讨了JESD204B系统中SYSREF信号在多设备时钟同步中的关键作用与实现技巧。通过详细分析SYSREF信号的生成、PCB布局和时序调整,提供了一套完整的解决方案,帮助工程师解决高速数据转换器与FPGA协同工作中的时钟同步问题。文章还包含时序图详解和实测调试技巧,助力提升系统性能。

weixin_29313239的博客 454

Gromacs文件格式全解析:xtc vs trr vs cpt,哪种更适合你的模拟需求?

本文深入解析Gromacs分子动力学模拟中的三种核心文件格式xtc、trr和cpt,详细对比其技术特性和适用场景。xtc适合存储效率优先的场景,trr保留完整动力学数据,cpt确保模拟精确重启。通过实际配置示例和存储优化技巧,帮助用户根据模拟需求选择最佳格式组合,平衡分析灵活性与存储成本。

weixin_29281941的博客 94

不得不掌握的三种 Bitmap

Bitmap 是大数据里面常见的数据结构,简单来说就是按位存储,为了解决在去重场景里面大数据量存储问题,目前在 Druid/Spark 等使用。 本次 Chat 会详细介绍三种不同的 Bitmap 原理以及其用法,会讲到如下内容: Java 中的 Bitmap : BitSet 压缩 Bitmap: RoaringBitmap 长整型压缩 Bitmap: Roaring64NavigableMa...

GitChat 1085

PuTTY使用方法

PuTTY是一款开源SSH/Telnet客户端,主要用于Windows系统连接Linux服务器。使用步骤包括:下载安装PuTTY,输入服务器IP和端口(默认22),可选择保存会话配置。支持密码和SSH密钥认证(需转换.pem为.ppk格式)。首次连接需确认主机密钥,成功登录后可执行Linux命令。其他功能包括会话日志记录、X11转发和端口隧道配置。操作完成后输入exit断开连接。

特网云计算 3144

【java】flink-cdc获取doris转存mysql的bitmap

这里主要是针对flink读取bitmap。doris中的bitmap和roaringBitmap有些许差别,获取时要注意

weixin_41149000的博客 728

【YOLO系列】YOLOv5超详细解读(源码详解+入门实践+改进)

一文带你详细了解YOLOv5(含YOLO系列论文讲解+源码详解+入门实践+算法改进)

路人贾的博客 25万+

我的python学习之路

Python 是一门功能强大且易于学习的编程语言,广泛应用于数据分析、人工智能、Web 开发、自动化等领域。以下是一个 Python 学习路径的总结,帮助你系统地掌握 Python 编程。

数据知道的博客 3万+

不得不掌握的三种BitMap

点击箭头处“蓝色字”,关注我们哦!!BitMapBitmap是大数据里面常见的数据结构,简单来说就是按位存储,为了解决在去重场景里面大数据量存储问题,目前在Druid/Spark等使...

张普的专栏 4233

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SparkSQL & ClickHouse RoaringBitmap64格式支持

ClickHouse新版使用roaring64map(https://github.com/RoaringBitmap/CRoaring/blob/af9fafb72edcfb88f7adc781eaea4e7e95f68d01/cpp/roaring64map.hh)来支持64位Int计算,采用了和之前不同的序列化和反序列化方式(https://github.com/ClickHouse/ClickHouse/blob/master/src/AggregateFunctions/AggregateFunc

fz1989的专栏 2358

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RoaringBitmap的深度解析与实战指南,一篇搞定

本文深度解析了RoaringBitmap这一高效压缩位图数据结构。它通过分桶策略与三种自适应容器(ArrayContainer、BitmapContainer、RunContainer),在稀疏与密集数据场景下均能实现内存与性能的最佳平衡。文章提供了详细的Java实战指南,包括基础操作、64位处理、序列化及与Spark/Lucene生态的集成,并分享了海量用户标签系统等实战案例与避坑经验,是处理大数据集运算的权威指南。

weixin_29062823的博客 198

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

思考-RBAC中对于权限编码部分的压缩处理(RoaringBitmap)

思考-RBAC中对于权限编码部分的压缩处理(RoaringBitmap)》前期编写了思考-RBAC中对于权限编码部分的压缩处理,其中关于Bitmap的部分近期又做了思考,经过资料查阅,本文针对 RoaringBitmap 进行概述。

alexgaoyihang的专栏 278

Starrocks中RoaringBitmap杂谈

RoaringBitmap是高效压缩位图,简称RBM,它的原理是将 32bit int(无符号的)类型数据 划分为 2^16 个桶,即2^16=65536个桶,每个桶内用container来存放一个数值的低16位

monkeyboy_tech的博客 1182
上一篇: 排序算法-基数排序(含负数)
下一篇: Netty源码浅析
陈*^_^*
博客等级 码龄6年 48粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值