当前位置: 首页 > news >正文

使用 HyperLogLog 进行基数估计:distinct_count() 函数详解

使用 HyperLogLog 进行基数估计:distinct_count() 函数详解

在大规模时间序列数据分析中,精确计算唯一值的数量(基数)是一个非常常见的需求——比如统计某段时间内有多少独立用户访问了系统、有多少不同的设备上报了数据、或者有多少个唯一的 IP 地址产生了日志。传统方案使用 COUNT(DISTINCT expr) 在数据量巨大时,内存和计算开销都非常高。SonnetDB 提供的 distinct_count() 函数基于 HyperLogLog(HLL)算法,以可控的精度损失换取极致的性能提升。

HyperLogLog 原理简述

HyperLogLog 是一种概率性基数估计算法,它通过哈希函数将元素映射为比特串,利用"最长前导零"的统计规律来估算基数。SonnetDB 中默认实现了精度参数 p=14 的 HLL,标准误差约为 1.625%,内存占用仅为 12KB 左右——无论你有 100 万还是 10 亿个唯一值。

基本用法

-- 统计每天的唯一用户数
SELECTtime_bucket('1 day', ts) AS day,distinct_count(user_id) AS unique_users
FROM sensor_events
WHERE ts >= '2025-01-01' AND ts < '2025-02-01'
GROUP BY day
ORDER BY day;
-- 统计每个传感器标签的唯一设备数
SELECTsensor_tag,distinct_count(device_id) AS unique_devices
FROM telemetry
WHERE ts >= NOW() - INTERVAL '7 days'
GROUP BY sensor_tag
ORDER BY unique_devices DESC;

与精确 COUNT DISTINCT 的精度对比

-- 同时对比精确值与 HLL 估计值
SELECTtime_bucket('1 hour', ts) AS hour,COUNT(DISTINCT session_id) AS exact_count,distinct_count(session_id)  AS hll_estimate,ABS(COUNT(DISTINCT session_id) - distinct_count(session_id))/ NULLIF(COUNT(DISTINCT session_id)::float, 0) * 100 AS error_pct
FROM web_sessions
WHERE ts >= '2025-03-01' AND ts < '2025-03-02'
GROUP BY hour
ORDER BY hour;

合并多个 HLL 草图

HyperLogLog 的一大优势是草图(sketch)可以合并。在 SonnetDB 中,你可以对子查询中的 HLL 结果做二次聚合:

-- 先按小时计算,再合并为天的结果
SELECTtime_bucket('1 day', hour) AS day,distinct_count(hll_sketch) AS daily_unique_users
FROM (SELECTtime_bucket('1 hour', ts) AS hour,distinct_count(user_id)   AS hll_sketchFROM app_eventsWHERE ts >= '2025-06-01' AND ts < '2025-07-01'GROUP BY hour
) sub
GROUP BY day
ORDER BY day;

适用场景

  • 大基数去重计数(百万级以上)时性能提升显著
  • 对流式数据做实时唯一值统计
  • 允许 1%-3% 误差的仪表盘与报表场景

distinct_count() 在 SonnetDB 中是 HyperLogLog 的一等公民实现,推荐在分析型查询中优先使用。

http://www.jsqmd.com/news/803225/

相关文章:

  • 储能柜清洁度萃取设备厂家大盘点:西恩士实力领跑排行 - 工业设备研究社
  • 回落期的“扫雷”行动:Infoseek数据看板如何揭示被掩盖的真相
  • 2026年真力时中国区售后服务网络全面升级:避坑指南与真实体验分享(含最新电话及地址) - 亨得利官方服务中心
  • 从习题到实战:掌握随机变量及其分布的5个核心场景
  • 保姆级教程:在阿里云ECS上用hMailServer+Win32OpenSSL搭建个人邮局(解决25端口被封问题)
  • 使用 histogram() 进行等宽分桶分布分析
  • ANNA:为AI编码代理引入架构记忆,告别无效文件探索
  • 2026年全国墙绘公司哪家靠谱 深耕行业多年且质保完善 美院团队加持且服务周到 - 深度智识库
  • 2026南昌婚纱照排名实测版:5大品牌避坑指南,新手备婚不踩雷 - charlieruizvin
  • 【实战】利用AXI DMA Scatter/Gather模式实现FPGA与处理器间高效数据流传输
  • 2026 中小企业 AI 超级员工选型:5 款高适配工具深度测评
  • 3天重构科研工作流:用Obsidian模板实现知识管理的范式转变
  • 中药养发加盟哪家好? - 中媒介
  • 用TI毫米波雷达DIY一个测速仪:从多普勒效应到实际代码(IWR6843实操)
  • Cursor Free VIP:如何一键突破AI编程助手使用限制?
  • LocalVocal:如何在OBS Studio中构建完整的本地AI字幕解决方案
  • 2026室外防爆正压柜标杆名录:防爆正压柜定制/防爆正压柜生产厂家/防爆空调价格/防爆空调生产厂家/防腐防爆正压柜/选择指南 - 优质品牌商家
  • 2026年4月连铸机耐高温轴承生产厂家推荐,不锈钢滚针轴承/滚针轴承/单向轴承,连铸机耐高温轴承生产厂家哪家可靠 - 品牌推荐师
  • 如何挑选省心的动态心电监护仪厂家?2026年五大高可靠心电监护仪厂家推荐 - 品牌2026
  • 养发品牌合作哪家支持多? - 中媒介
  • 3个简单技巧,用OmenSuperHub开源工具彻底解决暗影精灵散热烦恼
  • 告别龟速!用Motrix+Chrome插件下载百度网盘,实测速度翻倍(附插件安装包)
  • 2026年嘉兴制造业短视频全案运营:工厂获客与老板IP打造深度横评 - 企业名录优选推荐
  • 2026活塞推料离心机多少钱:活塞推料离心机哪家好、活塞推料离心机多少钱、浓缩过滤离心机、三足式离心机、卧式刮刀离心机选择指南 - 优质品牌商家
  • 2026年新疆热敏收银纸与电脑打印纸采购完全指南:5大品牌深度横评 - 优质企业观察收录
  • Allegro 16.6铺铜与DRC检查全流程:搞定动态铜、平面分割与设计状态查验
  • 工控人必备:用VMware虚拟机隔离博途V15开发环境,告别系统蓝屏和软件冲突
  • 告别重复劳动:用QEMU在Ubuntu 18.04上为RK3288定制Debian/Ubuntu根文件系统镜像
  • 惠来海康医院眼科母亲节:愿岁月温柔,护她眼底有光
  • 2026年济南婚纱摄影拍摄场景与外景资源评测报告 - charlieruizvin