简介:随着数据时代的发展,各行各业数据平台的体量越来越大,用户个性化运营的诉求也越来越突出,用户标签系统,做为个性化千人千面运营的基础服务,应运而生。如今,几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。针对复杂条件过滤的场景,ClickHouse对多条件筛选流程做出优化,扫描的数据量更小,性能也较ES而言更高效。
什么是人群圈选
随着数据时代的发展,各行各业数据平台的体量越来越大,用户个性化运营的诉求也越来越突出,用户标签系统,做为个性化千人千面运营的基础服务,应运而生。如今,几乎所有行业(如互联网、游戏、教育等)都有实时精准营销的需求。通过系统生成用户画像,在营销时通过条件组合筛选用户,快速提取目标群体,例如:
• 电商行业中,商家在运营活动前,需要根据活动的目标群体的特征,圈选出一批目标用户进行广告推送或进行活动条件的判断。
• 游戏行业中,商家需要根据玩家的某些特征进行圈选,针对性地发放大礼包,提高玩家活跃度。
• 教育行业中,需要根据学生不同的特征,推送有针对性的习题,帮助学生查缺补漏。
• 搜索、门户、视频网站等业务中,根据用户的关注热点,推送不同的内容。
以电商平台中一个典型的目标群体圈选场景为例,如服装行业对其潜在客户信息采集,打标,清洗后如下表:
(以上表结构中,第一列为用户身份的唯一标识,往往作为主键,其他列均为标签列。)
如公司想推出一款高端男性运动产品,则可能的圈选条件为:
1.男性,推出产品的受众群体为男性。
2.运动爱好者,运动爱好者更有可能消费运动类产品。
3.一线城市,一线城市用户相比于二三线城市用户,可能更倾向于消费高端产品。
4....
从上述表结构(人群圈选典型表结构,且大都如此,第一列为用户id,其余皆为标签列)和查询条件可以看出,人群圈选业务都面临一些共同的痛点:
• 用户标签多、标签丰富,标签列可达成百甚至上千列。
• 数据量庞大,用户数多,从而所需运算量也极大。
• 圈选条件组合多样化,没有固定索引可以优化,存储空间占用极大。
• 性能要求高,圈选结果要求及时响应,过长的延时会造成营销人群的不准确。
• 数据更新时效要求高,用户画像要求近实时的更新,过期的人群信息也将直接影响圈选的精准性。
针对以上痛点,本文将从原理层面深度分析,多角度对比讲解如何使用ClickHouse搭建人群圈选系统,为何选择ClickHouse,以及选用ClickHouse搭建人群圈选系统的优势。
为什么选择ClickHouse
本文以开ElasticSearch(ES)为例,仅针对人群圈选场景与ClickHouse做对比。开源版ES是一款高效的搜索分析引擎,利用其优秀的索引技术,可以完成各种复杂的条件组合和数据聚合运算。ClickHouse是最近比较火的一款开源列式存储分析型数据库,它最核心的特点就是极致存储压缩率和查询性能,尤其擅长单个大宽表的查询场景。因此细比两者,相较与ClickHouse,ES虽具备人群圈选业务所需的必要能力,但仍有以下3方面不足:
成本方面:
开源ES的底层存储使用lucene,主要包含行存储(storefiled),列存储(docvalues)和倒排索引(invertindex)。行存中_source字段用于控制doc原始数据的存储。在写入数据时,ES把doc原始数据的整个json结构体当做一个string,存储为_source字段,因此_source字段对存储占用量大且关闭_source将不支持update操作。同时,索引也是ES不可缺少的一部分,ES默认全列索引,虽可手动设置对特定的列取消索引,但取消索引的列将不可查询。在人群圈选场景下,选取标签过滤条件是任意的,多样的,不断变化的。对任意一条标签列不做索引都是不现实的,因此针对成百上千列的大宽表,全列索引必然使得存储成本翻倍。
ClickHouse是一款彻底的列式存储数据库,且ClickHouse的查询不依赖索引,使用过程中也不强制构建索引,因此不需要保留额外的索引文件。同时ClickHouse存储数据的副本数量灵活可配,可将使用成本降至最低。
数据更新与治理方面:
索引为ES带来了高效的查询性能,但是索引的构造过程是复杂的,耗时的。每一次索引的构建都需对全列数据进行扫描,排序来生成索引文件。而在人群圈选业务中,人群信息必然是不断增长的。标签的不断更新将会使得ES不得不频繁的重构索引,这将对ES的性能造成巨大的开销 。
ClickHouse的查询不依赖索引,使用过程中也不强制构建索引。因此对于新增数据,ClickHouse不涉及索引的更新与维护。
易用性方面:
开源ES缺少完备的sql支持,查询请求的json格式复杂。同时ES对多条件过滤聚合的执行策略缺少优化,还以文章开头的典型场景为例,圈出一款高端男性运动产品的受众人群。可得如下sql:“SELECT user_id FROM whatever_table WHERE city_level = '一线城市' AND gender = '男性' AND is_like_sports = '是';”
针对以上sql,ES的执行会对3个标签分别做3次索引扫描,之后再将3次扫描的结果做me

本文探讨了ClickHouse在人群圈选场景中的应用优势及其实现细节,对比了ClickHouse与ElasticSearch的不同之处,详细介绍了如何利用ClickHouse的特性进行高效的数据管理和人群筛选。
最低0.47元/天 解锁文章
4020

被折叠的 条评论
为什么被折叠?



