什么是BitMap?BitMap技术的原理和应用

 行业资讯     |      2021-07-21 04:17

Tik Tok和Aauto的上亿应用如何在几秒钟内做出更快的响应,例如每日活动、每月活动、保留、漏斗分析和多维分析?这就是位图技术。本文作者从多个角度对BitMap进行了分析,希望能加深大家对BitMap技术的理解。

01什么是位图?

该位图不是指图像存储格式的位图。

位是位,是目前计算机系统中最小的数据单位,8位是一个字节。位的值是0或1;也就是说,一个比特可以存储的最大信息是2。

BitMap可以理解为通过位数组存储特定数据的数据结构;因为位是数据的最小单位,所以这种数据结构经常节省存储空间。

例如,一家公司有8名员工;现在需要记录公司的考勤记录;传统方案是记录每天正常出勤的员工的ID列表,如2012-01-01: [1,2,3,4,5,6,7,8];如果员工ID采用字节数据类型,每天保存考勤记录需要N个字节,其中N是当天参加考勤的总人数。另一种方案是构造一个8-8位(即1字节)数组,将这8位员工和员工编号分别映射到这8个位置。如果当天考勤正常,对应的岗位设置为1,否则设置为0;这样,每天可以使用一个恒定的1字节来保存当天的考勤记录。

除了节省存储空间之外,BitMap结构的另一个更重要的特点是通过位操作(AND、OR、XOR、NOT)方便高效地处理多个BitMap数据。例如,在上面的考勤示例中,如果您想知道员工最近两天没有来,可以通过计算昨天的BitMap和今天的BitMap,然后检查这些职位是否为0,来获得最近两天没有来的员工的数据。例如:

BitMap在某些文档中也称为位数组、位集或位字符串。有关位图技术的详细信息,请参考

Java SDK中有一个提供位图的实现:java.util.BitSet

02位图在统计系统中能做什么?

示例1:独立用户的统计数据。比如想了解一个应用,每天有多少独立用户使用?您可以生成位图;每天根据应用的用户访问日志;每个用户对应位图中的一个位置,如果在同一天访问,该位置被设置为1,否则为0。这样,我们就应该知道当天这个应用的独立用户总数。