业务场景

用户画像是对用户信息的标签化。用户画像系统通过对收集的各维度数据,进行深度的分析和挖掘,给不同的用户打上不同的标签,从而刻画出客户的全貌。通过用户画像系统,可以对各个用户进行精准定位,从而将其应用于个性化推荐、精准营销等业务场景中。用户画像系统已经被各个企业广泛采用,是大数据落地的重要方式之一。

在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大。用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案。当前主流的实现方案采用ElasticSearch方案。但基于ElasticSearch构建用户画像平台,往往面临灵活性不足、资源开销大、无SQL接口开发不便等问题。为此,本文提供了一种基于华为MRS ClickHouse构建用户画像系统的方法。

为什么基于MRS-ClickHouse构建标签查询系统

1.MRS-ClickHouse简介

MRS-ClickHouse是一款面向联机分析处理的列式数据库。其最核心的特点是极致压缩率和极速查询性能。MRS-ClickHouse支持SQL查询,且查询性能好,特别是基于大宽表的聚合分析查询性能非常优异,比其他分析型数据库速度快一个数量级。

ClickHouse有如下特点:

完备的DBMS功能

ClickHouse拥有完备的数据库管理功能,具备一个DBMS基本的功能,包括DDL、DML、权限控制、数据备份与恢复、分布式管理。

列式存储与数据压缩

ClickHouse是一款使用列式存储的数据库,数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会由不同的文件分别保存。在执行数据查询时,列式存储可以减少数据扫描范围和数据传输时的大小,提高了数据查询的效率。

向量化执行引擎

ClickHouse利用CPU的SIMD指令实现了向量化执行。SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据,通过数据并行以提高性能的一种实现方式,它的原理是在CPU寄存器层面实现数据的并行操作。

关系模型与SQL查询

ClickHouse完全使用SQL作为查询语言,提供了标准协议的SQL查询接口,使得现有的第三方分析可视化系统可以轻松与它集成对接。

同时ClickHouse使用了关系模型,所以将构建在传统关系型数据库或数据仓库之上的系统迁移到ClickHouse的成本会变得更低。

数据分片与分布式查询

ClickHouse集群由1到多个分片组成,而每个分片则对应了ClickHouse的1个服务节点。分片的数量上限取决于节点数量(1个分片只能对应1个服务节点)。

ClickHouse提供了本地表 (Local Table)与分布式表 (Distributed Table)的概念。一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。

2.位图索引介绍

位图是一种通过数组下标与某些特定的值进行关联的数据结构。在位图中,每一个元素占用1个比特位。比特位为1时,表示对应的元素有该特定的值。反之则表示没有。

举例:

ID集合:[0,1,4,5,6,7,9,10,13,14]

通过位图可以表示为:11001111 01100110

如下图所示:

位图索引是一种使用位图的特殊索引,主要针对大量相同值的列而创建。位图中位置编码中的每一位表示对应的数据行的有无。位图索引适合固定值的列,如性别、婚姻状况、行政区等等。而不适合像身份证号、消费金额这种离散值的列。用户画像场景中,每一个标签,对应大量的人群。标签的数量是有限的枚举值,这一特点非常适合位图索引。

举例:

假设有两个标签,一个是标签1-持有贵金属,另一个是标签2-持有保险。各个持卡人拥有的标签情况如下表所示。

从中,我们可以看到,有标签1-持有贵金属的持卡人ID集合是:[0,1,4,5,6,7,9,10,13,14]。有标签2-持有保险的持卡人ID集群是:[2,3,5,7,8,11,12,13,15]。

当我们需要查询同时有这个标签的用户时,基于位图索引,只需要将两个标签相应的位图进行位运算,即可得到最终结果。这样,标签数据的存储空间占用非常小,标签计算的速度非常快。

3.MRS-ClickHouse原生支持位图索引

在ClickHouse出现之前,如果要将位图索引应用于用户画像场景,需要自己构建位图数据结构、管理位图索引,使用门槛较高。好消息是,MRS-ClickHouse原生提供了对位图数据结构和位置索引的支持,将位图的构建及维护封装在ClickHouse内部。使用者基于ClickHouse构建位图索引变成非常的简单。

ClickHouse位图构造函数:

序号 函数原型 用途
1 bitmapBuild(array) 将无符号整数数组构建位图对象
2 groupBitmapState() 通过ID列表聚合构建位图对象

ClickHouse位置操作函数:

ClickHouse位图运算结果获取函数:

综上,为什么是选择基于ClickHouse构建标签查询系统?

  1. ClickHouse查询速度快,最快可达亚秒级响应;
  2. ClickHouse内置位图数据结构,方便构建位图索引,提升标签查询性能;
  3. 基于JDBC/SQL接口,开发更简单;
  4. 基于MPP架构,可横向扩展。

如何基于MRS-ClickHouse构建标签查询系统

在ClickHouse中创建一张原始标签表,将原始标签数据导入其中。然后基于标签原始表构建标签位图表,并创建对应的分布式表。上层标签查询应用基于标签位图表(分布式表)进行标签查询。 流程如下图所示:

详细过程如下文所述。

Step 1:创建标签原始表,导入标签原始数据

首先,创建一张标签原始表,保存标签原始数据。上游系统计算出的标签结果数据,写入本表中。本表为本地表。其建表语句如下:

CREATE TABLE IF NOT EXISTS tbl_tag_src ON CLUSTER default_cluster(tagname String,   --标签名称tagvalue String,  --标签值userid UInt64
)ENGINE = ReplicatedMergeTree('/clickhouse/default/tables/{shard}/tbl_tag_src ','{replica}')
PARTITION BY tagname
ORDER BY tagvalue;

然后创建分布式表:

CREATE TABLE IF NOT EXISTS default.tbl_tag_src_all ON CLUSTER default_cluster
AS tbl_tag_src
ENGINE = Distributed(default_cluster, default, tbl_tag_src, rand());

数据预览如下:

Step 2:创建标签位图表,构建标签位图

创建一张标签位图表,先创建本地表。本地表用于保存标签位图数据。其创建语句如下:

-- 创建位图表,先创建本地表
CREATE TABLE IF NOT EXISTS tbl_tag_bitmap ON CLUSTER default_cluster
(tagname String,   --标签名称tagvalue String,  --标签值tagbitmap AggregateFunction(groupBitmap, UInt64 )  --userid集合
)
ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/default/tables/{shard}/ tbl_tag_bitmap ','{replica}')
PARTITION BY tagname
ORDER BY (tagname, tagvalue)
SETTINGS index_granularity = 128;

然后再创建对应的分布式表。分布式表用于上层应用查询标签。其建表语句如下:

CREATE TABLE IF NOT EXISTS default.tbl_tag_bitmap_all ON CLUSTER default_cluster
(tagname String,   --标签名称tagvalue String,  --标签值tagbitmap AggregateFunction(groupBitmap, UInt64 )  --userid集合
)
ENGINE = Distributed(default_cluster, default, tbl_tag_bitmap, rand());

将标签原始表的数据导入标签位图表中。并在导入过程中,使用groupBitmapState()函数构建位图。SQL语句如下:

-- 导入数据, 将同一个标签的所有userid使用groupBitmapState函数合并成一个bitmap
INSERT INTO tbl_tag_bitmap_all
SELECT tagname,tagvalue,groupBitmapState(userid)
FROM tbl_tag_src_all
GROUP BY tagname,tagvalue;

Step 3:基于分布式表快速检索标签

查询持有贵金属产品,并且性别是男的userid列表:

WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有产品' AND tagvalue = '贵金属' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性别' AND tagvalue = '男' LIMIT 1) AS bitmap2
SELECT bitmapToArray(bitmapAnd(bitmap1, bitmap2)) AS res

分别统计持有保险的客户中,男性和女性的总人数:

---- 查询持有保险的客户中,男性人数:
WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有产品' AND tagvalue = '保险' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性别' AND tagvalue = '男' LIMIT 1) AS bitmap2
SELECT bitmapCardinality(bitmapAnd(bitmap1, bitmap2)) AS res---- 查询持有保险的客户中,女性人数:
WITH(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '持有产品' AND tagvalue = '保险' LIMIT 1) AS bitmap1,(SELECT tagbitmap FROM tbl_tag_bitmap_all WHERE tagname = '性别' AND tagvalue = '女' LIMIT 1) AS bitmap2
SELECT bitmapCardinality(bitmapAnd(bitmap1, bitmap2)) AS res

总结

针对用户画像场景中的海量标签查询,传统的方案存在灵活性不足、资源消耗大、缺少SQL接口开发难度大等问题。基于华为MRS-ClickHouse,可以非常方便的构建位图索引,实现海量标签数据的实时检索。MRS-ClickHouse让开发成本大幅降低,标签查询更快响应,让精准营销更便捷。

华为云FusionInsight MRS云原生数据湖已广泛应用于政府、金融、运营商、大企业、互联网等行业,携手800+合作伙伴,服务于全球60+国家和地区3000+政企客户。

本文由华为云发布。

基于MRS-ClickHouse构建用户画像系统方案介绍相关推荐

  1. 73页PPT,教你从0到1构建用户画像系统(附下载)

    导读:用户画像就是给用户打标签,那么有哪些标签类型?用户画像的开发包括哪些阶段?每个阶段有哪些输出?用户画像系统有哪些数据结构?--你将在本文分享的PPT中找到这些问题的答案,这份干货将带你全面了解用 ...

  2. 【干货】如何从0到1构建用户画像系统.pdf(附76页pdf下载链接)

    随着数字化浪潮的到来,用户画像系统也被提及的越来越多,在整个精细化运营过程中,用户体画像体系的搭建起着不可或缺的作用. 今天给大家分享一份干货文档<如何从0到1构建用户画像系统.pdf>, ...

  3. 如何构建用户画像系统?看这一篇就够了!

    来源:一个数据人的自留地 乔巴:我是一枚半路转行的数据产品经理,现在大数据火热,所在公司想搭建画像系统,但自己对用户画像没有概念,对画像系统是怎样的架构,有哪些常见的功能等事项全然不知,真是困煞我也! ...

  4. 如何构建用户画像系统

    乔巴:我是一枚半路转行的数据产品经理,现在大数据火热,所在公司想搭建画像系统,但自己对用户画像没有概念,对画像系统是怎样的架构,有哪些常见的功能等事项全然不知,真是困煞我也! 索隆,会心一笑,言道:产 ...

  5. 用户画像——如何构建用户画像系统

    为什么需要用户画像 如果你是用户,当你使用抖音.今日头条的时候,如果平台推荐给你的内容都是你感兴趣的,能够为你节省大量搜索内容的时间. 如果你是商家,当你投放广告的时候,如果平台推送的用户都是你的潜在 ...

  6. 我用MRS-ClickHouse构建的用户画像系统,让老板拍手称赞

    摘要:在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大.用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案.当前主流的实现方案采用ElasticSearch方案.但基于 ...

  7. 基于大数据的用户画像构建小百科全书

    来源:http://suo.im/6aVjHQ 一. 什么是用户画像 用户画像是指根据用户的属性.用户偏好.生活习惯.用户行为等信息而抽象出来的标签化用户模型.通俗说就是给用户打标签,而标签是通过对用 ...

  8. 基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现

    需要本项目的可以私信博主获取源码及项目!!! 本研究基于高校图书馆的借阅信息.馆藏图书信息.读者入馆信息.用户信息等多维度的数据表,首先将不同年份的数据拼接在一起,按照时间维度进行整合,并保证数据维度 ...

  9. 真实案例,手把手教你构建用户画像

    导读:本文通过一个贯穿本书的实践案例来将大家更好地带入实际开发画像.应用画像标签的场景中.本文主要介绍案例背景及相关的元数据,以及开发标签中可以设计的表结构样式. 在本案例的开发工作中,基于Spark ...

最新文章

  1. Cocoapods安装使用
  2. Spring+Velocity中模板路径的问题
  3. python手机版怎么用-如何优雅的在手机上进行Python编程
  4. 码农翻身讲计算机基础:并发,同步与信号量
  5. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别
  6. android安装python opencv_MacLinux环境在Android Studio中安装OpenCV
  7. android ringtone获取uri,android – 如何通过文件路径从MediaStore获取Uri?
  8. 域渗透基础之环境搭建(单域到组件域林)
  9. UICollectionView的sectionHeader悬浮效果
  10. docker-compose配置固定IP各种问题
  11. 多个java文件编译并打成jar包经典方法
  12. 毕啸南专栏 | 专访云迹科技CEO支涛:人类可能会变成半机器人
  13. WINDOWS各类执行程序的接口总结
  14. 400. Nth Digit
  15. 测试用例(二)APP基本功能测试用例
  16. 为什么要学习Linux内核,如何学习?
  17. 使用注册表reg文件修复git bash git gui 右键快捷方式
  18. 2022年3月18到5月18的思考
  19. Xftp的下载和安装(超详细)
  20. Java基本数据类型转字符串

热门文章

  1. html跳一跳小游戏,HTML5涂鸦跳跃(Doodle Jump)小游戏
  2. 上海居住证积分办理攻略,太容易了,快来收藏!!!
  3. linux图片浏览器设计目的,基于嵌入式Linu图片浏览器的设计与实现.doc
  4. P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值 + k幂次之和)
  5. 【小明有啥说啥】我不会写标题,端午随便分享几点小技巧
  6. 计算机无法识别硬盘怎么办,硬盘电脑不识别怎么办?硬盘数据怎么恢复?
  7. 不写一行代码,也能解释XML,因为是JAVA
  8. 英语初级语法--句子成分(词性)(名词)
  9. HDU3687 National Day Parade
  10. 【新书速递】从原理、架构、案例三个维度深度剖析分布式数据库