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

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

上一次我们说完了用 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专栏作者“大蕉”的原创稿件,转载请通过作者微信公众号“一名叫大蕉的程序员”获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2017-09-19 15:09:50

大数据计数原理

2017-09-30 08:05:41

大数据计数原理

2017-09-26 15:51:29

大数据计数原理

2017-09-15 17:49:25

大数据计数原理

2017-10-25 16:03:08

大数据计数原理

2017-10-13 16:32:49

大数据计数原理

2017-10-27 15:23:56

大数据计数原理

2022-03-27 22:07:35

元宇宙虚拟人IBM

2015-03-16 11:33:16

程序员代码bug

2017-02-08 19:49:03

内存SSDDRAM

2021-07-07 06:54:37

网页Selenium浏览器

2023-05-16 07:15:11

架构模型对象

2019-12-26 09:56:34

Java多线程内部锁

2021-04-20 09:55:37

Linux 开源操作系统

2020-09-27 06:50:56

Java互联网注解

2010-10-26 11:05:27

霍金

2014-12-11 10:01:09

程序员

2016-09-13 22:46:41

大数据

2019-12-13 09:00:58

架构运维技术

2010-09-16 10:50:46

李开复
点赞
收藏

51CTO技术栈公众号