bitmap的特性和应用
BitMap 是什么?
BitMap 简称位图,实际上是一个散列表,只不过这个散列表中各个槽是计算机存储中的最小单元bit.
那BitMap数据结构长什么样呢?
一个长度为8的BitMap是下面这样的:
| 状态 | 实际表示 |
|---|---|
| 初始化状态 | 00000000 |
| 使用后状态 | 00100000 |
BitMap 特性
- 数据结构本身所占用的存储极小
- 每个槽位上的值只能是0或者1
所以,上面的两个特性决定的它的使用场景。特别是在解决大数据中识别问题。具体0和1能表示什么,取决于业务上赋予它的值。比如有一下场景:
- 可以表示自然数是否存在问题。直接把自然数定位到数组下标,用1标记存在,用0标记不存在即可。
- 所知道的数组下标都只能是自然数,所以,可以将其他数据最终转换成自然数后,再使用BitMap进行标记。比如小明今天来上课的问题,就可以用学号直接替代自然数,标记用1或者0标记今天是否来上课问题。
- 网络爬虫中标记某一个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算法好坏有两个重要指标。
- hash冲突尽可能的小,也就是尽可能的分散在各个槽内
- 装填因子=表中填充数据长度/hashtable.length 要尽可能的大
bloomfilter 在使用hash运算的时候也会产生hash冲突,解决hash冲突有两种方式:
- 扩大table的长度
- 解决hash冲突(它使用多次hash来解决该问题的)
对于连续的密集型的数据,可以使用下标位置代替数字本身,可以节省空间
这一特性在redisson中保存hashSlot就是典型的应用
bitmap的特性和应用的更多相关文章
- Bitmap RGB24 4字节对齐
Bitmap RGB24 4字节对齐 本文中说的图片都是无压缩的彩色Bitmap图片. 最近在一个项目中有一个场景是需要将RGB32或RGB24的Bitmap转换成为RGB565的Bitmap,在RG ...
- Oracle常见的几种等待事件
1. CPU time CPU time其实不是真正的等待事件.是衡量CPU是否瓶颈的一个重要指标.一般来讲,一个良好的系统,CPU TIME 应该排在TOP 5 TIME Event的最前面. 当然 ...
- InnoDB关键特性学习笔记
插入缓存 Insert Buffer Insert Buffer是InnoDB存储引擎关键特性中最令人激动与兴奋的一个功能.不过这个名字可能会让人认为插入缓冲是缓冲池中的一个组成部分.其实不然,Inn ...
- 浅谈Android下的Bitmap之大Bitmap加载
引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...
- Win10/UWP新特性—Drag&Drop 拖出元素到其他App
在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...
- 65.Android 三大图片缓存原理、特性对比 (转)
这是 Trinea 在 MDCC 上分享的内容(略微改动),也是源码解析第一期发布时介绍的源码解析后续会慢慢做的事. 从总体设计和原理上对几个图片缓存进行对比,没用到他们的朋友也可以了解他们在某些特性 ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- Oracle 10g Block Change Tracking特性
Using Block Change Tracking to Improve Incremental Backup Performance 使用块改变跟踪改善增量备份的性能 The block cha ...
- Oracle 11g新特性 -- 延迟段
11gR2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端: 1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大. 2. 如果很多表开始的一段时间 ...
- 11g新特性-概述 (转)
一.新特性提纲 1.数据库管理部分 ◆数据库重演(Database Replay) 这一特性可以捕捉整个数据的负载,并且传递到一个从备份或者standby数据库中创建的测试数据库上,然后重演负责以测试 ...
随机推荐
- LeetCode题集-4 - 寻找两个有序数组的中位数,图文并茂,六种解法,万字讲解
题目:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 算法的时间复杂度应该为 O(log (m+n)) . 作为目前遇到 ...
- 一组.NET MAUI绘制的开源控件 - AlohaKit
前言 今天大姚给大家分享一组.NET MAUI绘制的开源.免费(MIT License)UI控件库:AlohaKit. MAUI介绍 .NET MAUI是一个开源.免费(MIT License)的跨平 ...
- .net6 使用gRPC示例
创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(客户端),测试项目结构如下: 公共模型 测试接口相关类,放在公共类库中,方便服务端和客户端引用相同模型 public class R ...
- USB3.0与USB2.0编码方式的区别
首先,USB3.0传输的编码方式和USB2.0本质上是不同的. 1.USB3.0的编码方式 USB 3.0采用的是8b/10b编码方式,由于高速传输,信号干扰的问题,USB 3.0采用 8/10bit ...
- 墨天轮国产数据库沙龙 | 许力:阿里云原生Lindorm TSDB数据库,驱动工业IT&OT超融合数字化系统升级
分享嘉宾:许力 阿里云Lindorm 数据库产品经理 整理:墨天轮 导读 大家好,我是阿里云Lindorm 数据库产品经理许力,今天非常有荣幸给大家介绍阿里云 Lindorm 数据库面向工业场景的最佳 ...
- iOS关于七牛云项目分发遇到的问题小结
在新公司做iOS开发,目前主要是用企业开发证书通过七牛云分发的形式实现app下载.在工作过程中遇到了几个相关的问题,在这里整理一下. 1.分发的ipa包在七牛云无法正常分发安装的问题 解决方案:在七牛 ...
- 02-react中jsx的基本使用
// 使用 createElement太繁琐 不直观 不优雅开发体验不好 代码维护不行 // jsx 不是 js 而是 js的扩展语法 // jsx 是react的核心内容 // react项目中已经 ...
- 云原生周刊: 使用 Kubectl 执行 100 个 Kubernetes 诊断命令 | 2023.10.23
开源项目推荐 Stern Stern 是一个针对 Kubernetes 的多 pod 和容器日志跟踪工具.可以跟踪 Kubernetes 上的多个 pod 和 pod 中的多个容器.每个结果都用颜色编 ...
- KubeSphere 社区双周报 | 功能亮点抢“鲜”看 | 2022-09-16
KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...
- RocketMQ 5.0 多语言客户端的设计与实现
本文作者:古崟佑,阿里云中间件开发. RocketMQ 5.0 版本拥有非常多新特性,比如存储计算分离. batch 能力的提升等,它是具有里程碑意义的版本. 提到新版本,我们往往会首先想到服务端架构 ...