美图分布式Bitmap实践:Naix

信息密度 (information density),及代码实现 from sklearn.datasets import make_blobs from modAL.density import information_density import matplotlib.pyplot as plt from pathlib import Path import numpy as np import pandas as pd ##获取数据 X, y = make_blobs(n_features=2, n_samples=1000, centers=3... 阅读详情

大数据技术和应用系统目前已经在各个行业中发挥着巨大的作用,各种各样的开源技术也给大数据从业人员带来了很大的便利。Bitmap 作为一种大数据需求下产生的计算体系,有着计算速度快、信息密度高、支持海量数据等众多优势。

美图拥有海量用户数据,每天都有大量数据计算任务。而 Bitmap 技术能大幅度减少计算的开销,节省数据存储的成本,尽管有不少公司做过 Bitmap 的相关尝试,但是到目前为止还没有一个相对成熟的分布式 Bitmap 开源应用,因此美图研发了自己的分布式 Bitmap 系统,应用于美图各个场景下的相关数据计算任务。

 / Bitmap简介 /

Bitmap 作为被各种框架广泛引用的一门技术,它的原理其实很简单。

bit 即比特,而 Bitmap 则是通过 bit 位来标识某个元素对应的值(支持 0、1 两种状态),简单而言,Bitmap 本身就是一个 bit 数组。

举个简单的例子,假设有 10 个用户(ID 分别为 1~10),某天 1、3、5、7、8、9 登录系统,如何简单的表示用户的登录状态呢?如图 1,只需要找到用户对应的位,并置 1 即可。

图 1

更多地,如果需要查看某用户当天是否登录系统,仅需查看该用户 ID 位对应的值是否为1。并且,通过统计 Bitmap 中 1 的个数便可知道登录系统的用户总数。Bitmap 已支持的运算操作(如 AND、OR、ANDNOT 等)可以使维度交叉等计算更加便捷。

Bitmap两个重要的特性

高性能

Bitmap 在其主战场的计算性能相当惊人。在美图,早期的统计主要基于 Hive。以美图系某 APP 数据为基准进行了简单的留存计算(即统计新增用户在次日依然活跃的用户数量),通过 Hive(采用 left out join)耗时 139 秒左右,而 Bitmap(交集计算)仅需 226 毫秒,Hive 的耗时是 Bitmap 的 617 倍左右。如图 2 所示,其中,Hive 基于 4 节点的 Hadoop 集群,而 Bitmap 仅使用单节点单进程。

图 2

存储空间小

由于 Bitmap 是通过 bit 位来标识状态,数据高度压缩故占用存储空间极小。假设有 10 亿活跃设备 ID(数值类型),若使用常规的 Int 数组存储大概需 3.72G,而 Bitmap 仅需 110M 左右。当然,若要进行去重、排序等操作,存储空间的节省带来的性能红利(如内存消耗等)也非常可观。

美图 Bitmap 应用

美图公司拥有众多 APP,如美图秀秀、美颜相机、美拍、美妆相机、潮自拍等。大家熟知的美图秀秀和美颜相机都拥有千万级别的日活,历史累积的用户量更达几十亿。

大部分主要日常统计功能均基于 Bitmap,如新增、活跃、留存、升级、回访等。 同时,我们还支持时间粒度(比如天、周、月甚至年)及 APP、渠道、版本、地区等多种维度,以及各维度的交叉计算等。

图 3

Bitmap 原理简单,但是仅通过 Bitmap 服务来支撑海量数据和需求比想象中更复杂。从 2015 年至今,从单机版到分布式,从单 APP 到各种各样 APP 的接入,从少量指标的「少量」数据到目前的海量数据和需求,我们在 Bitmap 的实

OLAP技术应用——位运算原理及应用 背景 位图(bitmap)是一种基于bit位数组的数据结构,在大数据场景下对于存储和计算效率均有奇效。 假如将10亿连续的用户ID存在int数组,需要10亿个32位int,占用存储3.72G左右,如果改用bit数组存储,每一个bit位表示一个用户ID,只需要10亿个bit,120M左右存储就够。 下图为表示用户是否登入属性的一个bitmap数据结构,存储的是0和1,其中1表示登入过,0表示没登入,... 阅读详情

相关推荐

信息密度优化:从理论到代码实践

本文深入解析信息密度的核心概念,并通过Python代码实践演示了如何计算与可视化信息密度。文章详细对比了欧氏距离与余弦相似度两种度量方法,并结合主动学习、数据采样等真实场景,阐述了信息密度在提升模型效率与数据质量中的关键作用。

weixin_29053577的博客 326

基于RoaringBitmap的HBase人群推送内存优化方案设计与实现

本文探讨了在HBase人群推送系统中使用RoaringBitmap进行内存优化的方案设计与实现。传统人群推送系统在处理海量用户标签数据时,面临数据导入效率低、内存占用高、查询性能差和资源利用率低等问题。为解决这些问题,本文提出了一种基于RoaringBitmap的优化方案,包括使用RoaringBitmap作为内存中间层、设计批量导入机制、实现内存中的集合运算以及优化数据序列化和反序列化过程。RoaringBitmap通过混合使用数组容器、位图容器和运行容器,显著提高了数据压缩率和集合操作效率。该方案通过减

AI天才研究院 637

basalt:高性能的分布式的专门空间优化的Bitmap服务,高效检查数据是否存在,日活统计,签到,打点等等

基于Raft的数据一致性分布式的bitmap服务 bitmap (位图)技术是数据库,大数据和互联网业务等场景下经常使用的一种技术。 存在性判断 爬虫url去重 垃圾邮件过滤 用户已阅读 用户已赞 ... 去重 数据库 大数据计算 架构图 支持三种协议redcis : HTTP , redcis和rpcx 。 写操作可以发给给任意例程,但最终是由筏领导者进行操作。读操作可以选择任意的例程进行读取。 服务 进入cmd/server , go run server.go启动一个bitmap服务。 它同时支持三种服务: rpcx:您可以使用rpcx服务获取高级的网络调用, cmd/rpcx_client是一个rpcx客户端的演示 redis:您可以使用redis客户端访问Bitmap服务(如果您的redis client支持自定义命令),方便兼容redis调用代码, cmd/redis_cli

【RK3588开发记录】超详细的RK3588修改debug串口波特率为115200

修改RK3588的debug串口为115200

Crazydrams的博客 4805

DC-DC拓扑:从电感位置一眼识别Buck、Boost与Buck-Boost

本文详细解析了DC-DC拓扑中电感位置对识别Buck、Boost与Buck-Boost电路的关键作用。通过对比不同拓扑的电感连接特征,提供快速识别方法和设计要点,帮助工程师避免常见错误并优化电路性能。特别强调电感位置对输出质量和效率的影响,适合电源设计人员参考。

java2000.net 372

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

SQL注入-靶场通关 Less 1-21

打开Burp工具--打开内嵌浏览器--进入靶场第六关--打开拦截--输入?id=1',如果是正确的,说明不存在注入点,如果错误,说明存在注入点,这里是错误的,需要加上注释--+,在回车看结果是正确的,说明找到了注入点。工具,打开内嵌浏览器,打开拦截,输入http://127.0.0.1/sqli-labs-master/Less-9,然后发送到。id=1'--+,后面都注释了,单引号不闭合,报错说明是数字型SQL注入。设置休眠时间为10s,如果执行SQL语句就会加载,说明正确,存在注入点。

weixin_72104324的博客 1392

华为海思IC笔试通关秘籍:物理/电路/工艺三大方向高频考点解析(附真题)

本文深度解析华为海思IC笔试中物理设计、电路设计和工艺制造三大方向的高频考点与备考策略。针对华为海思IC笔试机考的特点,提供了方向选择建议、核心知识梳理及真题实战技巧,帮助考生构建系统性复习框架,高效备战,提升通关成功率。

mars5的博客 1311

相机标定-张正友棋盘格标定法

(X,Y,Z)为在世界坐标系下一点的物理坐标 ( u , v ) 为该点对应的在像素坐标系下的像素坐标 引入齐次坐标的原因:引入齐次坐标的目的是为了升维,将坐标从二维坐标变为三维坐标。 2.相机成像过程 相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。 (1)世界坐标系(,,) 描述目标在真实世界中的位置引入的参考坐标系。 (2)相机坐标系(,,) ...

qq_41275123的博客 1万+

Microsemi Libero系列教程(二)——新建点灯工程

前言 上一篇文章,介绍了Microsemi Libero系列教程(一)-Libero开发环境介绍,下载,安装与注册,作为嵌入式开发中的Hello World,点灯是再也基础不过的实验了,通过点灯实验,可以了解芯片GPIO的控制和开发环境IDE新建工程的流程,对于FPGA来说,每个IO口几乎一样,所以本篇文章主要学习一下如何基于Microsemi Libero集成开发环境建立一个示例工程,让一个L...

whik1194的博客 1万+

基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计

针对设施农业场景中狭窄通道、障碍物多样(如农机具、作物植株、水管)的特点,设计一款基于 STM32 的小型搬运机器人避障控制系统。系统通过多传感器融合实现 360° 环境感知,采用模糊 PID 控制算法实现平滑避障,满足温室、大棚等场景的搬运需求。通过在温室环境测试,系统可实现对直径≥5cm 障碍物的有效检测(检测距离误差≤5%),避障转向半径≤30cm,平均功耗≤15W。后续可通过增加激光雷达(如 TFmini)提升远距离障碍物检测能力,结合 SLAM 算法实现路径规划。

weixin_42300449的博客 860

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 面试官面试Java岗出现频率极高的面试题,准备面试必备良药哦
下一篇: 正则表达式真的很强大,可惜你不会写
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值