业务场景

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

在移动互联网时代,用户数量庞大,标签数量众多,用户标签的数据量巨大。用户画像系统中,对于标签的存储和查询,不同的企业有不同的实现方案。当前主流的实现方案采用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. 我用MRS-ClickHouse构建的用户画像系统,让老板拍手称赞

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

  2. 用SparkSQL构建用户画像

    用SparkSQL构建用户画像 二.  前言 大数据时代已经到来,企业迫切希望从已经积累的数据中分析出有价值的东西,而用户行为的分析尤为重要. 利用大数据来分析用户的行为与消费习惯,可以预测商品的发展 ...

  3. Docker练习例子:基于 VNCServer + noVNC 构建 Docker 桌面系统

    0. 安装docker 这一步略,网上有好多教程,一般出现装不上的原因,也就是网速问题了,这个我也很难帮你. 1. 下载指定的镜像images docker pull dorowu/ubuntu-de ...

  4. 用Mirror,搞定用户画像

    Mirror产品概述 Mirror是专为金融行业设计的全面用户画像管理系统.该系统基于星环多年来为多个金融企业客户构建用户画像的经验,深入契合业务需求,实现对用户全方位全维度的刻画.Mirror内置银 ...

  5. 【转】4w+1h 教你如何做用户画像

    记得14年开始做用户画像的时候,对于用户画像完全没有概念,以为是要画一幅幅图画,经过两年多的学习和理解,渐渐的总结出了一些方法和技巧,在这里就通过4个W英文字母开头和1个H英文字母开头的单词和大家分享 ...

  6. Spark(二)—— 标签计算、用户画像应用

    一.标签计算 数据 86913510 {"reviewPics":[],"extInfoList":null,"expenseList":n ...

  7. 用户画像,知乎Live总结

    ttps://www.zhihu.com/lives/889189116527403008/messages 用户画像两层含义:单个标签:用户的分布 标签体系要与时俱进,如果标签被下游强依赖,则不轻易 ...

  8. 基于云服务MRS构建DolphinScheduler2调度系统

    摘要:本文介绍如何搭建DolphinScheduler并运行MRS作业. 本文分享自华为云社区<基于云服务MRS构建DolphinScheduler2调度系统>,作者: 啊喔YeYe . ...

  9. 基于Jenkins自动构建系统开发

    1  绪论 1.1 课题的研究背景 随着IT行业的不断发展,软件开发的复杂度也随着不断提高.与此同时,软件的开发团队也越来越庞大,而如何更好地协同整个团队进行高效准确的工作,从而确保软件开发的质量已经 ...

随机推荐

  1. 【第二十三期】春招实习阶段性总结(阿里云已OC)

    本人算是一个半路出家找工作的菜鸡了,现在手中阿里云云原生offer.百度度小满offer.腾讯PCG二面环节.美团点评等offer环节.希望我的经历分享能对各位或之后准备春招的同学有帮助. 个人背景 ...

  2. etcd受损节点重新加入集群

    文章目录 查看当前集群状态 删除受损etcd节点的数据 数据受损节点重新加入集群 修改etcd启动参数,重启etcd 由于自己的误操作,将A节点的etcd备份数据复制到B节点的etcd备份节点目录下, ...

  3. 大厂偏爱的Agent技术究竟是个啥

    搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读.问题排查.踩坑实践. hello大家好,我是小楼,今天给大家分享一个关于Agent技术的话题,也是后端启 ...

  4. Linux下的Tmux分屏操作

    Linux中,我们使用命令行的时候,一个窗口只能使用一个命令行,若是需要使用多个输入位置进行操作,那么只能多开几个窗口,今天介绍一款软件,可以让我们在一个窗口使用多个输入行,先来效果图展示下 Linu ...

  5. Windows server 2012安装VM tools异常解决办法

    在VMWare虚拟机上安装Windows Server 2012之 后安装VMWare Tools时报如下错误信息: 问题:缺少KB2919355补丁 (先安装KB2919442,在安装KB29193 ...

  6. [Matlab]求解线性方程组

    转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B在MATLAB中,求解线性方 ...

  7. 2021年国内BI厂商推荐_大数据分析工具

    随着互联网大数据时代的不断发展,BI让企业的工作效率变得更高效.BI的功能也随着需求的增长不断地丰富,例如,数据可视化大屏.可视化表格.商业化数据分析.数据地图等.国外的厂商在很多场景下无法满足国内的 ...

  8. 【C#基础概念】虚方法virtual

    目录: 一.虚方法的概念 二.虚方法的特点 三.虚方法的作用 四.虚方法的声明 五.虚方法的执行 六.虚拟类的规则 一.虚方法的概念 在C#中,虚方法就是可以被子类重写的方法,如果子类重写了虚方法,则 ...

  9. 决策树CART回归树——算法实现

    决策树模型 选择最好的特征和特征的值进行数据集划分 根据上面获得的结果创建决策树 根据测试数据进行剪枝(默认没有数据的树分支被剪掉) 对输入进行预测 模型树 import numpy as np de ...

  10. centos7 下配置snort2.9 以及使用

    先安装依赖文件 yum -y install epel-release //需要epel源 yum -y install gcc flex bison zlib zlib-devel libpcap ...