用户画像3:标签数据存储
用户画像的数据存储的技术选型有多种,不同存储方式适用于不同场景。主要有Hive、MySQL、HBase、Elasticsearch。
一、Hive数据仓库
Hive是基于Hadoop的一个数据仓库工具,依赖于HDFS存储数据,可以将结构化的数据文件映射为一张数据库表,提供SQL语言查询存储在HDFS中的数据。一般使用Hive作为数据仓库用来存储标签、用户特征库等相关数据。主要用来做离线数据分析,比直接用MapReduce开发效率更高。

1.数据仓库
在数仓建模过程中,主要是设计事实表和维度表的建模开发。在画像系统中主要使用Hive作为数据仓库,开发相应的事实表和维度表来存储标签、人群、应用到服务层的相关数据。
a.事实表
事务事实表:用于描述业务过程,按业务过程的单一或多业务过程可进一步分为单事务事实表和多事务事实表。
周期快照事实表:在一个确定的时间段内对业务状态进行度量。例如:查看一个用户近1年的付款金额、近1年购物次数、近30天登录天数等。
累计快照事实表:对不同的事件之间的时间间隔进行度量。例如:用户从购买到支付的时长、从下单到订单完结的时长。一般用于统计时间周期明显的业务过程。
b.维度表
维度表是对事实属性的各个维度的描述。例如,商标维度包括:价格、折扣、品牌、原厂家、型号等方面的信息。维度表的开发中,经常遇到维度缓慢变化的情况,对于缓慢变化维,一般采用:
① 重写维度值,对历史数据进行覆盖;
② 保留多条数据,通过插入维度列字段区分;
③ 开发日期分区表,每日分区数据积累当日维度的属性;
④ 开发拉链表,按时间变化进行全量存储等方式处理。
2、ID-MAP
开发用户标签的时候,需要把用户不同来源的身份通过数据手段识别为同一主体,即ID-Mapping。用户的属性、行为相关数据分散在不同来源中,通过ID-Mapping能够把不同场景下的数据联系到一起,消除数据孤岛。即通过ID-Mapping打通userid和cookieid的对应关系。

在设计ID-Mapping表时,由于一个用户可在多个设备登录,一个设备也可以被多个用户登录,所以考虑用缓慢变化维表来记录不同时间点的状态变化,如下,记录一个事物从开始到当前状态的全部状态变化信息。

① 从埋点表和访问日志表获取到cookieid和userid同时出现的访问记录;
② 将获取到的userid和cookieid插入cookieid-userid关系表;
③ 创建ID-Map拉链表,将每天新增到cookie表的数据与拉链表历史数据做笔记,若有变化或新增,则更新拉链表;
④ 创建完成后,每天ETL调度将数据更新到ID-Mapping拉链表中。
⑤ 对于拉链表,可查看某日的快照数据,以查看某个用户在某天关联到的设备id。
对于实际开发中,还需要考虑用户在不同平台间(如Web端和App端)的打通情况。
二、MySQL
MySQL是关系型数据库,在用户画像系统中可用于元数据管理、监控预警数据、结果集存储等应用中。
1、元数据管理
Hive适用于大数据量的批处理工作。而小量级的数据会存储在MySQL中,因为MySQL有更快的读写速度。平台标签视图中的标签元数据可存储在MySQL关系数据库中,便于便签编辑、查询、管理。

2、监控预警数据
MySQL还可以用于存储每日对ETL结果的监控信息。从标签计算数据的监控,到服务层同步数据的监控。
① 标签计算数据监控
监控每天标签ETL的数据量,若有异常则发送警告通知,同时暂停后续任务。
② 服务层同步数据监控
即将标签相关数据从Hive数仓像服务层同步数据的监控。服务层一般采用HBase、Elasticsearchzuo作为数据库存储标签数据供线上调用。当相关数据在Hive中的数量不等于同步到服务层后的数量,则会触发警告。
3、结果集存储
在打通画像业务与业务系统时,考虑将hive中的用户标签同步到各个业务系统中,此时MySQL可以用户存储结果集。
Sqoop是一个用来将Hadoop和关系型数据库中的数据相关迁移的工具,它可以将关系型数据库中的数据导入Hadoop的HDFS中,也可将HDFS中的数据导入关系型数据库中。
三、HBase
HBase是存储线上接口实时调用的数据,是高性能、列存储、可伸缩、实时读写的分布式存储系统,运行在HDFS上。Hive是跑MapReduce任务离线查询,适合用来对一段时间内的数据进行分析查询,例如,用来计算趋势或者网站的日志。HBase 则适合用来进行大数据的实时查询,例如 Facebook 用 HBase 进行消息和实时的分析。
画像系统中每天在Hive里跑出的结果集数据可同步到HBase数据库,用于线上实时应用的场景。

1、应用场景
某渠道运营人员为促进未注册的新安装用户注册、下单,计划通过App首页弹窗发放红包或优惠券的方式进行引导注册。
① 通过组合用户标签(如“”“未注册用户”“”“按照据今天数”小于7天)筛选出对应用户群,然后将对于人群推送到“广告系统”,这样每天画像系统的ETL调度完成后对应的人群数据会推送到HBase数据库进行存储。

② 当满足条件的新用户来访App时,由在线接口读取HBase数据库,查询到该用户时就会为其推送该弹窗。

四、Elasticsearch
Elasticsearch存储标签用于人群计算和人群多维透视分析,是一个开源的分布式全文检索引擎,开源近乎实时地存储、检索数据。而且扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。对于用户标签查询、用户分群计算、用户群多维透视分析这类时间响应要求极高的场景适用。
Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用json作为文档格式。

1、应用场景
① 在每天的ETL调度中,将Hive计算的标签数据导入Elasticsearch中。
② 在标签调度完成且通过校验后(标签监控预警完成),将标签数据同步到Elasticsearch中。

③ 在与elasticsearch数据同步完成并通过校验后,向在MySQL维护的状态表中插入一条状态记录,表示当日数据可用,线上计算用户人群的接口则读取最近的数据。
④ 如果当天因为调度延迟或其他原因没有及时将当日数据导入Elasticsearch,接口也能读取最近一天对于的数据。如当日数据产出正常时,state字段=0,异常=1,。图1月20日异常时,线上接口扫描该状态记录后不读取1月20日的数据,而是读取前一天的数据。

③ 为避免从Hive到Elasticsearch中灌入数据时发生数据缺失,在像MySQL状态表更新状态位前需要校验elasticsearch与Hive中的数据是否一致。
④ Hive中的用户标签灌入Elasticsearch中后,业务人员在画像产品端计算人群或分析人群时,通过RESTful API访问Elasticsearch进行计算。


参考资料:
《用户画像:方法论与工程化解决方案》赵宏田 著