大数据计数原理1+0=1这你都不会算(二)

简介:

上一次我们说完了用 HashSet 来进行计数了。我们可以发现,如果我们估计有N个数,那么我们至少需要N*32bit(按照int在32位操作系统下占用32个bit)的空间来进行存储,这太费钱了。有没有办法进行改进呢?这就引出了一个新的数据结构 - BitMap。

这时候看到一张图代表了一个存储int的字节bit信息。

我们可以发现,每一个bit都有自己的值,比如一个int的空间除了作为int类型的数字外,是否还可以做其他的利用?数字可以表示0~31位置的情况,如果我们使用bit的位置信息来存储会怎样?我们来试试看。

如果我们得到Hash的值为0,那就直接将第0位置上的bit位置为1。

如果我们得到Hash的值为31,那就直接将第31上的bit位置为1。

如果发现位置上已经有值了,那当前的值就已经存在了,不再进行统计,这样子就可以完成超大数据量的统计啦。

这样进行存储的数据结构就叫BitMap,使用每个bit位来进行信息存储,而不是一个int数字。

那有小伙伴就有疑问了,如果超过了32个数字怎么办?

可以使用数组来进行拓展,比如一个a = int[2]的数组。

a[0] 可以表示0~31位,a[1] 可以表示32~63位,以此类推,几乎可以无限大。如果数据确实非常巨大,连下标也到达int的界限了,也可以用其他的单个空间更大的数据类型来进行存储。

相比较于HashSet,BitMap 进行统计所使用的存储只需要 HashSet 的1/32。但是这个数据结构简单,相对于 HashSet 有一点小问题,就是hash在数据量巨大的情况下,碰撞会比较严重,那么统计精度会下降,需要怎么改善呢?



本文作者:大蕉

来源:51CTO

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
存储 分布式计算 负载均衡
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
【大数据技术Hadoop+Spark】MapReduce概要、思想、编程模型组件、工作原理详解(超详细)
59 0
|
4月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
120 0
|
6月前
|
存储 分布式计算 Hadoop
【大数据处理框架】Hadoop大数据处理框架,包括其底层原理、架构、编程模型、生态圈
【大数据处理框架】Hadoop大数据处理框架,包括其底层原理、架构、编程模型、生态圈
137 0
|
2月前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
496 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
|
4月前
|
存储 分布式计算 大数据
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
【大数据技术Hadoop+Spark】Spark RDD设计、运行原理、运行流程、容错机制讲解(图文解释)
68 0
|
4月前
|
分布式计算 资源调度 大数据
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
【大数据技术Hadoop+Spark】Spark架构、原理、优势、生态系统等讲解(图文解释)
194 0
|
18天前
|
分布式计算 大数据 Hadoop
【大数据原理与技术】期末习题总结大全,建议收藏
【大数据原理与技术】期末习题总结大全,建议收藏
|
5月前
|
机器学习/深度学习 分布式计算 大数据
大数据 - MapReduce:从原理到实战的全面指南
大数据 - MapReduce:从原理到实战的全面指南
343 0
|
6月前
|
SQL 分布式计算 算法
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
【大数据处理框架】Spark大数据处理框架,包括其底层原理、架构、编程模型、生态圈
236 0
|
6月前
|
存储 大数据 关系型数据库
大数据时代必备技能——分库分表的原理与应用
大数据时代必备技能——分库分表的原理与应用

热门文章

最新文章