IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Cardinality Estimation

共 2 篇相关文章

IT 累计浏览 2,026

HLLC基数估算算法在腾讯数据仓库TDW中应用

这篇讲的是腾讯数据仓库TDW如何用一个巧办法,又快又省地计算海量数据里的“不同值个数”(基数)。背景很实际:传统精确去重在大数据面前太耗资源了。文章的核心方案,是引入了HLLC(HyperLogLog Counting)基数估算算法,并将其封装成一个极其简单的SQL聚合函数`est_distinct`。 文章不仅告诉你“是什么”,还深入拆解了“怎么做”。从HQL如何翻译成MapReduce作业,到Map端如何用一个64K桶的数组进行局部聚合,再到Reduce端如何合并数组并套用HLLC公式计算,整个过程图文并茂。其中的难点和巧妙之处在于内存管理:当数据分布不均、单个Key记录海量时,TDW采用“分而治之”策略动态分配内存块,并设计了专用的序列化(SerDe)方式来高效处理溢写到磁盘的Hash表片段,有效平衡了内存与IO开销。 最后通过实测对比给出了明确结论:在数据分布集中的较理想条件下,使用64K桶的HLLC估值计算(精度超99.4%),相比精确去重能带来数倍的效率提升。对于需要在大规模数据上快速获得近似唯一值计数的场景,这提供了非常清晰且可落地的实践参考。

IT 累计浏览 2,944

基数估计算法概览

这篇讲的是如何在海量数据中,高效估算不同元素的个数——也就是基数估计。 文章从一个经典场景切入:面对一个大到无法放入内存、且含有大量重复项的数据集,怎样才能快速知道里面有多少不同的数据项?作者首先介绍了一种直观但粗糙的思路:通过哈希将数据映射成均匀分布的随机数,再利用集合中的最小值来反推基数。这个方法虽然简单,但准确度不稳定。 真正的突破来自概率算法。文章重点介绍了Flajolet等学者发展的方法:通过一个良好的哈希函数,将任意数据转化为均匀分布的序列。算法巧妙的观察点在于,考察每个哈希值的二进制表示前导零的长度。在均匀分布下,最长前导零的长度与集合基数存在明确的统计关系。这避免了直接存储所有元素,只需记录一个极小的状态信息。 从最初的Probabilistic Counting,到LogLog,再到近似最优的HyperLogLog算法,文章勾勒出这类算法的发展脉络。HyperLogLog通过分桶统计和调和平均数,极大地提升了估计精度,并已成为Redis等系统中处理UV统计等场景的标准方案。 对于任何需要在大规模数据流上进行实时去重计数的工程师来说,理解这些算法的原理与取舍都非常有价值。