|苏宁6亿会员是如何做到快速精确分析的?
本文插图
图片来自 Pexels
【51CTO.com原创稿件】随着苏宁业务的高速发展 , 大数据平台对海量的业务数据分析越来越具有挑战 , 尤其是在精确去重、复杂 JOIN 场景下 , 如用户画像、UV、新老买家、留存、流失用户等 。
苏宁大数据平台目前 OLAP 分析的总体架构是将时序化的数据采用 Druid+ClickHouse、非时序化采用 PostGreSQL、固化场景采用 Hbase+phoenix、明细数据采用 Elasticsearch 分析 。
基于 Druid 我们有 HyperLogLog 非精确去重算法 , 具有非常优异的空间复杂度 O(m log2log2N) , 空间的占用随着基数的增长变化不大 , 但统计存在一定的偏差 。
基于其他引擎我们常用的精确去重算法一般是 GROUP BY 后 count distinct 操作 , GROUP BY 会带来大量的 shuffle 操作 , 占用大量的磁盘和 IO , 其性能较为低下 。
下面将为大家揭开苏宁如何整合 RoaringBitmap 进行高效精确去重架构方案的神秘面纱 。
RoaringBitmap 在苏宁的应用实践
为何选择 RoaringBitmap
首先简单为大家介绍下 RoaringBitmap , 32 位的 RoaringBitmap 的是由高 16 位的 Key 和低 16 位的 Value 组成 , Key 和 Value 通过下标一一对应 。
Key 数组保持有序存储在 roaring_array_t 中 , 方便二分查找 。 低 16 位的 Value 存储在 Container 中 , Container 共有三种 。
RoaringBitmap 对创建何种 Container 有自己的优化策略 , 在默认创建或元素个数小于 4096 的时候创建的是 Array Container 。
它是动态扩容的数组 , 适合存放稀疏数据 , 超过最大容量 4096 时 , 会自动转换为 Bitmap Container 。
当元素超过 4096 时 Array Container 的大小占用是会线性增长 , 但是 Bitmap Container 的内存空间并不会增长 , 始终还是占用 8 K 。
还有一种是 Run Container , 只有在调用 runOptimize() 方法才会触发 , 会和 ArrayContainer、BitmapContainer 比较空间占用大小 , 然后选择是否转换 。
Run Container 占用的存储大小看数据的连续性 , 上下限范围 [4 Bytes ,128 KB] 。
近年来 , 大数据技术得到了快速的发展 , 各种开源技术给大数据开发人员带来了很大的便利 , 在众多的技术中之所以选择 RoaringBitmap , 是因为它的存储空间低和运算效率高 。
RoaringBitmap 的存储是通过 bit 来标识状态 , 经过压缩后存储 , 据估算苏宁 6 亿会员如果是常规的数组来存储占用空间约为 2.2G , 而 RoaringBitmap 存储仅需要 66MB , 大大降低的存储的空间 , 降低企业的成本 。
RoaringBitmap 是通过位运算(如 AND、OR、ANDNOT 等)进行的 , 在计算能力上也相当惊人 。
我们在基于 PostGresql+Citus 做过与 count distinct 的对比测试 , 发现 RoaringBitmap 的统计耗时是 count distinct 的近 1/50 。
原生的 RoaringBitmap 只存储整形数据 , 32 位的 RoaringBitmap 最大的数据存储量是 2147483647 。
对于会员之类的可以采用 , 像订单、流量这样的数据量可以采用 64 位的 RoaringBitmap , 在性能上 32 位的效率在同等条件下要优于 64 位 。
苏宁拥有海量的业务数据 , 每天都有大量的离线和实时计算任务 , 采用 RoaringBitmap 技术不仅大大节约了存储的成本 , 计算的效率也得到了显著的改善 。
应用场景
①会员相关指标计算
RoaringBitmap 在会员相关指标的分析中有着许多重要的应用场景 , 比如会员的新、老买家、留存、复购、活跃这些指标均要用到精确去重的统计方式 。
苏宁目前有 6 亿会员 , 像新、老买家这样的指标计算都是拿当前的买家与全量的历史买家进行比对 , 如何快速的精确的分析出计算结果 , 在没有引入 RoaringBitmap 之前是一个较大的挑战 。
推荐阅读
- 挖贝网|京基智农投资建设生猪养殖项目 预计总投资额14.06亿
- 有鱼说娱乐|官宣!关晓彤、沈腾等进入苏宁618“SUPER SHOW”盛典明星阵容
- 大众|大众向自动驾驶公司Argo投资26亿美元 和福特共进退
- 苏宁|618价格战打响第一枪!开了三小时会后,苏宁决定突袭
- 奇艺爱奇艺会员服务「车祸」不断,是贪婪还是困境难解?
- 蓝鲸财经记者工作平台|优酷推出“电影通”会员,定价228元包含线上线下观影渠道
- 本智|还要什么会员 BT下载一键满速 铁威马F2-221 NAS体验
- 猎云网|嘉和生物药业获1.6亿美元B轮融资,高瓴资本领投
- 苏宁苏宁“J-10%”开局,价格战搅翻618,京东如何接招?
- 苏宁|苏宁在合肥成立超市采购新公司 注册资本500万
