golang clickhouse插入毫秒时间_ClickHouse的Bitmap在用户画像场景下的应用

本文介绍了在电商中基于用户画像进行人群筛选的常见技术方案,如impala+hbase+hive、presto+hive和原生hbase API,分析了它们的短板。接着,文章探讨了Bitmap数据类型及其优化方案RoaringBitmap,阐述了Bitmap在存储和计算效率上的优势。最后,通过实例展示了ClickHouse中Bitmap的使用,包括用户标签表的创建、标签值转换和在用户筛选场景的应用,如预估人群人数和显示用户ID清单,证明了Clickhouse在用户画像场景下的高效性能。
摘要由CSDN通过智能技术生成

前言

在电商中,基于用户画像标签进行人群筛选,并对相应人群进行APP消息,短信链接推送等是个特别常见的场景,我们平时所了解的精准营销,用户触达也都是基于此实现的。我司目前用户人群筛选主要基于以下几种技术方案:

  • impala + hbase +hive 

    用户标签存储在hbase中,将hbase中的表映射成hive表,并基于impala查询hive,达到实时查询的效果

  • presto + hive

    直接使用presto查询用户画像打平hive表

  • 基于hbase原生API

    对于一些存储在hbase复杂的标签(主要是针对带有多版本的字段)进行原生api查询

以上技术方案目前都存在各自的短板,第一种方案涉及到hbase表与hive表的映射,字段增添删减时,都需要去维护表结构;第二种方案,由于presto都是将数据加载到内存中计算,所以在请求查询数较多时,目前需要“排队”,否则会撑爆内存,另外查询条件复杂时响应结果时间较长;第三种方案,基于hbase原生api,需要针对不同的字段类型,不同的查询类型,自定义各种filter,代码实现相当复杂,同样在查询条件复杂时,响应时间较长。

Bitmap介绍

在介绍Clickhouse中的Bitmap在用户画像场景下的应用之前,先简单介绍一下Bitmap数据类型。

对于大数据场景处理,海量数据的判重和基数统计是绕不开的问题,几乎每张指标统计报表都会有对应的指标,对此比较常用的方法有布隆过滤器,HyperLogLog等,利用它们可以节省大量存储空间并且保证了计算效率,但是不足的是不能保证100%精确,会存在误差。

而Bitmap(位数组)就是上述两种方法的基础,我们可以先看一个常见的问题,我们如何利用较少的空间来存储40亿个不重复的位于[0- 2^32-1]区间内整数的集合?

按照正常思路,[0- 2^32-1]区间范围正是Java中Int无符号的取值范围,每个Int整数占4个字节,即32个bit。那么40亿个所占空间大小为 40*10^8*4B / 1024/1024/1024=14.9GB,将近15G的存储空间,显然是耗费资源的。

如果用Bitmap来存储呢,第0个比特表示数字0,第1个比特表示数字1&

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值