《(陈华军)苏宁大规模标签场景应用实践(28页).pdf》由会员分享,可在线阅读,更多相关《(陈华军)苏宁大规模标签场景应用实践(28页).pdf(28页珍藏版)》请在三个皮匠报告上搜索。
1、MongoDB+PostgreSQL中文社区南京大会苏宁大规模标签场景应用实践陈华军微信:chenhj_07苏宁易购 数据库研发中心1目录海量用户下精准营销的挑战roaringbitmap在圈人场景中的作用PostgreSQL+roaringbitmap最佳实践如何用分布式PG支撑百亿标签实时查询2如何快速找到目标营销人群(圈人)?精准基于准确的用户画像实时实时查询满足条件的目标人群灵活多变的查询条件组合用户画像的实时更新可扩展支撑数亿甚至数十亿的用户规模支撑百万,亿,甚至百亿/千亿规模的标签3常规技术方案的短板方案问题Hive由于每次查询都需要对亿级的用户表做全量扫描,资源消耗极大,响应时间
2、很长Spark+ElasticSearch利用ES的索引技术结合并行处理,查询性能比Hive有几十倍的提升;业务上经常需要新增标签(字段),导致必须重新灌全量ES数据,非常耗时。曾经用过的方案4参考:https:/ 搜索“人”到搜索“标签(人群)”用户ID性别城市1男南京2女北京标签类型标签值用户ID集合性别男1,3,5,6,.性别女2,4,7,8城市南京1,4,17,城市北京2,17,98搜”人”搜”标签”记录数十亿级百万级索引数几十,上百一个新增标签修改全量记录仅插入新标签记录计算方式组合条件过滤“人群”集合的交并差运算两种处理方式的对比6如何存储“人群”集合?-Bitmap适合大集合的交
3、并差运算-roaringbitmap是一种已被业界广泛使用的高效的bitmap压缩算法,使用者包括Elasticsearch,Durid,Hive,Spack,InfluxDB等,详见http:/roaringbitmap.org/注:Elasticsearch在查询时内部用roaringbitmap临时存储不同倒排索引的结果集做交并运算。7Roaringbitmap的存储格式Roaringbitmap 将32位的整形拆分成高16位和低16位,高16位作为容器的key,低16位作为value存储在3种不同的容器中。每个容器最多存储65536个值,最多有65536个容器。每种容器存储方法不同适用
4、于不同场景容器类型存储形式容器大小容量容器转换Array有序的short数组基数*2Byte4096基数超过4096时自动转换为Bitset容器Bitset8KB大小的bitset,每个值对应一个特定的bit位8KB65535基数低于4096时自动转换为Array容器runRLE(Run Length Encoding行程长度编码)格式,由成对的short型value+length组成。比如10,11,12,13压缩为10,34B128KB65535调用run优化且run格式存储占用空间更小时实施转换8不包含RUN容器时的序列化格式cookie(固定为12346)sizekey1card1-1
5、offset1container1container2444N4NArray容器:short数组BitSet容器:8KB的bitset每个值平均占用存储空间估算:基数/范围=1/13:使用Bitset容器,每个数值占用范围/基数bit最糟糕的情况下,每个值都分布在不同的容器中,平均1个值占用10字节。9包含RUN容器时的序列化格式cookie(固定为12347)size-1bitmapOfRunkey1card1-1offset1container1container24(N+7)/8(所有run容器对应的bit位设置为1,其它为0)4N4N(可选,N4时没有)Array容器:short数组R
6、un容器:2+4*run个数BitSet容器:8KB的bitsetn_runvalue1length1value2length210参考:https:/ 10,1112pg_roaringbitmap安装从github下载pg_roaringbitmap编译并安装插件登录到目标数据库安装扩展su postgresmakesudo make install13create extension roaringbitmappg_roaringbitmap使用示例(部分功能)Bitmap Calculation(OR,AND,XOR,ANDNOT)Bitmap Aggregate(OR,AND,XOR