加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

那些你不经常使用的数据结构

发布时间:2021-04-12 14:46:13 所属栏目:外闻 来源:互联网
导读:这样的数据结构可以帮助我们使用很少的存储空间,就可以完成很高效的数据查询。 比如我们有这样的需求,我们想要统计每一天的用户签到人数,常规的做法就是将数据放到set集合里面,然后对数据求和即可,然而如果数据量非常大的时候,这样会浪费很大的存储空


这样的数据结构可以帮助我们使用很少的存储空间,就可以完成很高效的数据查询。

比如我们有这样的需求,我们想要统计每一天的用户签到人数,常规的做法就是将数据放到set集合里面,然后对数据求和即可,然而如果数据量非常大的时候,这样会浪费很大的存储空间,而bitmap完美解决了这样的问题。首先我们可以将每天的日期作为key,然后签到的人的id转换成bit值存储,也就说如果它签到了,那么对应位置的值为1,否则为0,这样就可以通过一个key:value对来统计签到人数。需要说明的是,对于位操作,redis有bitcout来快速统计总和。

HyeprLogLog

从名字我们可以看出来,它有两个log,也就是说它通过两次取对数的操作节省了存储空间。需要说明的一点,这是一个概率数据结构,也就说它只能计算出大概率数值,并不能精确地得到精准数值,不过在大数据问题中,能够用最少的代价得到一个大致精确地值就是我们追求的。在redis里面,每个hyperloglog键只需要花费12kb大小空间,就可以存储2^64个元素,这大大节省了内存的存储空间。

hyperloglog的数学原理就是基于伯努利过程,是在同样的条件下重复地、相互独立地进行的一种随机试验。

对于一个数据我们通过计算它的hash值得到二进制01值,然后进行分桶操作,再然后在每个桶中再进行位置的计算,因为通过两次的操作就可以让存储的数据成指数增加,而反过来也就说当我们要存储一定的数据,只需要取两次对数的位数的bit就可以存下,所以这也是hyperloglog的名字由来。

有了hyerploglog,还是统计上面的签到的话,我们的存储空间就大大减小了,当然了这是以牺牲一定的精准度为代价的。

Stream

我们都知道在redis中,我们可以通过list来实现消息队列的功能,但是那只是简单地实现,它缺少持久化的功能,缺少数据复制的功能,而Steam就是为了解决这个问题而产生的
 

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读