讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么结合BitMap算法实现全站数亿级用户在运行期的精准去重统计

阿丽大大_1628

阿丽大大_1628

发布时间:2026-06-05 19:55:27

|

417人浏览过

|

来源于php中文网

原创

Bitmap实现亿级用户精准去重的关键在于用户ID整数映射、分片落盘、原子写入与生命周期管理,而非仅存储能力;需确保映射无损、并发安全、查询准确、合并高效。

用 bitmap 实现全站数亿级用户运行期精准去重,关键不在“能不能存下”,而在于“怎么映射得准、写得稳、查得快、合得对”。它不是简单调个 setbit 就完事,而是要围绕用户 id 的特性、系统吞吐压力和数据时效性做一整套工程设计。

用户 ID 必须能转成非负整数且值域可控

Bitmap 本质是用 bit 位索引数字,所以原始用户标识(比如字符串 UID、UUID、带符号 long)必须无损映射为 0~N 范围内的 uint32 或 uint64。常见做法:

  • 若业务已用自增 int 用户 ID(如 1~3.5 亿),直接使用,偏移量 = ID - 1;
  • 若用 64 位雪花 ID,取低 32 位(需评估冲突概率)或高位哈希分片后取模;
  • 若用字符串 UID,必须先过一致性哈希(如 Murmur3)→ 得到 32 位 hash 值 → 再映射到有效范围;
  • 严禁直接用 Math.abs(uid.hashCode()),负溢出或碰撞高会导致去重失效。

单机内存扛不住?必须分片 + 异步落盘

3 亿用户对应 Bitmap 约需 37.5 MB(3e8 ÷ 8 ÷ 1024²),看似不大,但真实场景中需同时维护:昨日 UV、近 7 天活跃、实时会话、设备指纹等多张 Bitmap,还可能按省份/渠道/版本切片。此时应:

  • 按高位分片:例如取用户 ID 的高 8 位(uid >> 24)作为分片号,生成 256 个子 Bitmap;
  • 每个子 Bitmap 独立管理内存,达到 500 MB 阈值时,立刻序列化为二进制文件写磁盘(不等全量结束);
  • 查询时按分片路由,合并结果用 BITOP OR(Redis)或并行 |=(本地 C++/Java);
  • 避免单 key 存超 512 MB —— Redis String 有硬上限,超限写入失败且无提示。

并发写入必须原子,否则丢位

高并发注册或埋点场景下,多个线程/进程同时 SETBIT user:uv:20260603 123456789 1,若底层非原子,会导致某次写被覆盖,造成漏计。保障方式:

  • Redis 场景:所有 SETBIT、GETBIT、BITCOUNT 均为服务端原子操作,无需额外加锁;
  • 本地内存 Bitmap(如 Java/C++):不能用 byte[] 直接位操作,必须用 AtomicLongArray 或 std::atomic<uint64_t> 数组,set 时用 fetch_or,get 时用 load + 位与;
  • 禁止用 Vector<Boolean> 或 BitSet(非线程安全)承载实时写入流。

需要精确去重结果?别只靠 BITCOUNT

BITCOUNT 返回的是当前 Bitmap 中 1 的个数,但它无法区分“刚写入的活跃用户”和“上周遗留未清理的脏位”。生产环境必须配套生命周期管理:

  • 每日零点自动 DEL user:uv:20260602(TTL 不可靠,异步删除可能延迟);
  • 对长期统计(如周活),用 BITOP OR destkey uv:day1 uv:day2 ... uv:day7 合并,再 BITCOUNT,不依赖单日 key 的完整性;
  • 若需回溯某用户是否在某天活跃,必须保留原始日粒度 Bitmap 至少 30 天,不可仅存聚合结果;
  • 上线前用小流量比对:Bitmap UV vs Hive 全量去重 count(distinct uid),误差率应稳定 ≤ 0.001%。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2526

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

590

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

564

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

610

2026.02.04

kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2526

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

590

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

564

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

610

2026.02.04

C++运算符基础入门
C++运算符基础入门

本专题详细讲解了C++运算符的类型、语法与使用方法,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符及其他特殊运算符,并通过代码示例解析优先级与结合性。

0

2026.10.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn