BitMap 是什么?

BitMap 简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit.


那BitMap数据结构长什么样呢?

一个长度为8的BitMap是下面这样的:

状态 实际表示
初始化状态 00000000
使用后状态 00100000

BitMap 特性

  • 数据结构本身所占用的存储极小
  • 每个槽位上的值只能是0或者1

所以,上面的两个特性决定的它的使用场景。特别是在解决大数据中识别问题。具体0和1能表示什么,取决于业务上赋予它的值。比如有一下场景:

  1. 可以表示自然数是否存在问题。直接把自然数定位到数组下标,用1标记存在,用0标记不存在即可。
  2. 所知道的数组下标都只能是自然数,所以,可以将其他数据最终转换成自然数后,再使用BitMap进行标记。比如小明今天来上课的问题,就可以用学号直接替代自然数,标记用1或者0标记今天是否来上课问题。
  3. 网络爬虫中标记某一个url是否已经爬过了的问题。可以使用hash算法,将长url转换成自然数,然后用1或者0标记是否爬过。

BitMap在redis中应用

redis中除了list,set,zset,string,map这五种常用数据结构以外,还有hylog,geo,bitmap,sub/pub这四种数据结构。

其中,bitmap在redis中的应用,可以解决现在分布式服务器之间数据同步访问的问题。(注:redis4.0以上已经有bloomfilter插件了,可以配置开启)

Bloom Filter原理剖析

布隆过滤器原理就是使用BitMap来标记一个内容在map中是否存在。为了把其他的内容统一转换成自然数,也就是数组的下标,使用了hash算法,然后在对应的位置上标记是否存在。

关于hash算法

hash算法是指通过对数据的关键字进行某种运算,直接求出元素的地址。这里的地址指的是hashtable的下标位置。因为,hashtable本省就是一个数组结构。衡量hash算法好坏有两个重要指标。

  1. hash冲突尽可能的小,也就是尽可能的分散在各个槽内
  2. 装填因子=表中填充数据长度/hashtable.length 要尽可能的大

bloomfilter 在使用hash运算的时候也会产生hash冲突,解决hash冲突有两种方式:

  1. 扩大table的长度
  2. 解决hash冲突(它使用多次hash来解决该问题的)
对于连续的密集型的数据,可以使用下标位置代替数字本身,可以节省空间

这一特性在redisson中保存hashSlot就是典型的应用

bitmap的特性和应用的更多相关文章

  1. Bitmap RGB24 4字节对齐

    Bitmap RGB24 4字节对齐 本文中说的图片都是无压缩的彩色Bitmap图片. 最近在一个项目中有一个场景是需要将RGB32或RGB24的Bitmap转换成为RGB565的Bitmap,在RG ...

  2. Oracle常见的几种等待事件

    1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...

  3. InnoDB关键特性学习笔记

    插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...

  4. 浅谈Android下的Bitmap之大Bitmap加载

    引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...

  5. Win10/UWP新特性—Drag&Drop 拖出元素到其他App

    在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...

  6. 65.Android 三大图片缓存原理、特性对比 (转)

    这是 Trinea 在 MDCC 上分享的内容(略微改动),也是源码解析第一期发布时介绍的源码解析后续会慢慢做的事. 从总体设计和原理上对几个图片缓存进行对比,没用到他们的朋友也可以了解他们在某些特性 ...

  7. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  8. Oracle 10g Block Change Tracking特性

    Using Block Change Tracking to Improve Incremental Backup Performance 使用块改变跟踪改善增量备份的性能 The block cha ...

  9. Oracle 11g新特性 -- 延迟段

    11gR2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端: 1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大. 2. 如果很多表开始的一段时间 ...

  10. 11g新特性-概述 (转)

    一.新特性提纲 1.数据库管理部分 ◆数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试 ...

随机推荐

  1. ComfyUI 基础教程(五) —— 应用 IP-Adapter 实现图像风格迁移

    中秋假期,又可以玩玩 AI 了.前面介绍了 ComfyUI 的 Lora 模型以及 ControlNet,本文介绍另一个非常重要且使用的节点,IP-Adapter. 一. IP-Adapter 概念 ...

  2. 26岁女生转行车载测试1年,月入15K~

    年前有朋友找工作,跟我说简历改了车载后,收到的打招呼翻了几倍,如今车载测试前景非常广阔,因为越来越多的汽车厂商正在开发新的可智能化的汽车,他们需要测试这些汽车的性能,安全性以及可靠性.车载测试技术可以 ...

  3. 11-02 NOIP练习赛

    11-02 NOIP练习赛 为什么休息的天还要打练习赛,这不公平!!!!!!!!!! oh no! 但是三道题确实挺简单,也少见的很有意思. [USACO23OPEN] Milk Sum S 题面翻译 ...

  4. android 性能优化 -systrace

    简介: Systrace允许监视和跟踪Android系统的行为(trace).它会指明系统都在哪些工作上花费时间.CPU周期都用在哪里,甚至可以看到每个线程.进程在指定时间内都在干嘛.它同时还会突出观 ...

  5. document.write 和 innerHTML 的区别

    a document.write 是整个页面的内容,会重写页面b innerHTML 是某个元素的内容,只有给body的innerHTML设置内容才会重写页面

  6. 王树森Attention与Self-Attention学习笔记

    目录 Seq2Seq + Attention Attention的原理 方法一(Used in the original paper) 方法二(more popular,the same to Tra ...

  7. 装有docker的虚拟机环境ping宿主机失败

    当我用docker network create 创建了一个网络后 [root@localhost ~]# docker network create kong-net 5c035564f9b4649 ...

  8. 五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验

    今年 3 月,KubeSphere 启动了首届扩展组件开发者训练营,吸引了 60 名开发者报名.经过一个半月的密集培训和实战演练,这些开发者成功打造了五款创新的扩展组件,现已全部上架至 KubeSph ...

  9. SegmentFault 基于 Kubernetes 的容器化与持续交付实践

    本文是根据 KubeSphere 云原生 Meetup 杭州站讲师祁宁分享内容整理而成. SegmentFault 是一家综合性技术社区,由于它的内容跟编程技术紧密相关,因此访问量的波动也和这一群体的 ...

  10. C语言常见概念

    目录 1.C语言是什么? 2.编译器的选择Clion 3.第一个C语言程序 4.main函数 5.printf和库函数 6.关键字介绍 7.字符和ASCII编码 8.转义字符 9.语句和语句分类 9. ...