roaringbitmap 源码解析 bitmap add过程
来源:互联网 发布:福利软件下载 编辑:程序博客网 时间:2024/06/02 04:14
最近在做标签平台的分析引擎。底层涉及到位图的处理,所以涉及到roaringbitmap。
原文地址:http://blog.csdn.net/chenfenggang/article/details/74611144
roaringbitmap 主要使用add and or xor remove serialize deserialize 等操作。
roaringbitmap 主要容器container,以及所有实现,所有操作其实就是这些容器之间的操作。
1、 RoaringBitmap 将整数int 分为了两部分,高位用key (short 【】)存储。公用高位,低位用container存储,而且当数据量小于4096时用arrayCotainer,高于4096时用bitmapContainer。
2、arrayCotainaer 用short【】数组存储。 bitmapContainer 将定义1024个long 数组。
每个long型数字64位。 1024个数组串联 刚好是1024×64 = 16位 = short 型数据。
3、以添加数据为例:
a)判断高位是否存在,如果不存在说明这个段【4098位数据】不存在。 如果不存在将new一个arrayContainer。
4)范围添加
直接将一个低位全部置1,直接采用位运算将一个区间的数据置1
5)arrayContainer 扩展。 arrayContainer 的扩展小于1024时时乘倍数扩展,大于1024的时候每次只扩展25%。
6)arrayContainer -》bitmapContainer 。到 低位个数 小于 1024采用。arrayContainer 大于4098时,采用bitmapContainer 1024个long更好。
1)优点,节约空间:1024个long 只相当于4098个short型。如果采用arrayContainer 表示所有的低位需要65 536个short数组。
2)arrayContainer因为每次插入数据都需要有序。而且数组长度在不停扩展。所有数组越长。查找和移位越多。需要时间更长。采用bitmapContainer 一开始定义好了,只涉及的位计算就像。快很多。
7)低位存储方面:
arrayContainer 能快速查通过key 找的位置; value即可存放数据的低位部分。
content为数组。x表示低位
bitmapContainer 通过 short /64 获取 1028long中的具体位置.获取现在的值,然后与1L移x位后的结果求或操作。
未完待续。。。。
- roaringbitmap 源码解析 bitmap add过程
- roaringbitmap 源代码解析(3)底层容器相互add过程
- roaringBitMap
- roaringbitmap 源码解析(2) 底层三种容器containner对比
- Bitmap recycle() 源码解析
- RoaringBitmap源码分析一(AND操作)
- 深入了解Bitmap源码解析及经验总结
- TreeSet的add()方法的源码解析
- RoaringBitmap简析
- 源码解析StartActivity的过程
- Tinyxml解析过程源码分析
- IOC实现过程源码解析
- TextView源码解析-----绘制过程
- solr索引过程源码解析
- 源码解析--activity启动过程
- View测量过程源码解析
- 源码解析-getDefault-register过程
- Bitmap解析
- 初试swift语言ios开发
- html的基础知识(章节一)
- Reverse String I、II、III(tag:String)
- Chapter1 面试流程
- 算法作业HW30:LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
- roaringbitmap 源码解析 bitmap add过程
- C++常见程序计时方法
- 2017-07-06:大神
- 3.验证框架
- client到openflow协议栈
- LeetCode 69. Sqrt(x)
- 基本概念、标签、跳转
- 分组
- JAVAWEB开发之redis学习(四)——Set集合相关的操作命令