数据建模在兴趣社区中的实践

原文标题:小白入门之数据建模-以兴趣社区为例

原文作者:阿里云开发者

冷月清谈:

**数据建模概述**

数据建模是指构建数据模型,将业务领域知识转化为图形化表达,指导逻辑建模,方便数据查找和使用。其主要目的是有序存储和组织数据,保障数据规范性和一致性,提升查询效率,降低存储和计算成本。

数据建模流程

数据建模遵循规范、效率、成本三大原则,具体流程包括概念建模设计、逻辑建模设计和物理建模设计三阶段。

兴趣社区数据服务

在兴趣社区场景中,数据服务包含了解业务背景、市场机会和定位,构建数据模型、分析数据并提供运营策略等环节。具体的建模过程包括绘制ER关系图、构建总线矩阵、制定业务架构图,以及规范定义指标和维度、设计维表等步骤。




怜星夜思:


1、数据建模在实际项目中的难点是什么?
2、兴趣社区的数据模型与传统社交媒体的数据模型有哪些不同?
3、在设计兴趣社区的数据模型时,有哪些关键的考虑因素?




原文内容



阿里妹导读


本文作者分享了一些对数据建模的理解,并以社区业务为例展开讨论。

作为一名练习时间1年的数据研发练习生,这一年里我在业务需求中摸爬滚打,系统地学习了数据建模。在这里我想分享一些我对数据建模的理解,并以我支持的社区业务为例展开讨论,如果有任何不足之处,欢迎大家交流指正。

什么是数据

数据是什么:让我们来看一下官方定义,数据是对客观事物的数量、属性、位置及其相互关系的抽象表示,是对信息的记录。这个解释比较抽象,其实我理解,凡是可以被记录的,都是数据。

数据从哪里来,到哪里去:数据不是天然存在的,而是被生产出来的,从原始数据生产-> 数据采集-> 数据加工-> 数据分析挖掘,进而形成知识,再循环到指导原始数据生产,这里有两个关键要素:

  • 数据源:数据描述的对象;
  • 数据生产:对该对象的数字化记录、描述和呈现,即数据化的过程;

DIKW框架:数据(data) -> 信息(information) -> 知识(knowledge) -> 智慧(wisdom)

数据是未加工的原材料,简单的事实记录。经过加工处理后,就形成了信息,能够回答一些简单问题。对信息再进行总结归纳,将其体系化,信息之间产生了联系,就形成了知识。而智慧则是在理论知识的基础上,加上自身实践,得出的人生经验或对世界的看法,具有较强的主观色彩。

图片

什么是数据建模

数据建模即构建数据模型,数据模型=数据组件+关系+规约。



为什么要数据建模呢?本质是为了有序有结构地分类存储和组织数据,我们可以从规范,效率,成本三个角度考虑:

  • 规范:指导生产用户进行规范化研发,保障数据的规范化和一致性;
  • 效率:消费用户易查找、易理解、易使用、产出稳定、使用性能优;
  • 成本:存储成本/计算成本消耗合理,计算性能优;

数据建模总体流程


概念建模设计

数据建模的第一阶段是概念建模设计,将业务领域知识转化为图形化表达。这样可以指导后续的逻辑建模,并方便数据消费者查找和使用数据。概念建模的第一步是需求调研,包括业务调研和需求分析两方面:

  • 业务调研:自底向上,了解业务源系统;
  • 需求分析:自顶向下,收集分析师和运营人员对数据或报表的需求;

下一步是进行数据域划分,这意味着要根据面向业务的分析,将业务过程或维度进行抽象,然后划分出单独的模块。最后构建总线矩阵,明确业务过程所属的数据模块,并确定业务过程与维度之间的关系。


逻辑建模设计



接下来我们进入到逻辑建模设计,第一步要做的是明确并规范定义指标与维度。首先,我们需要明确各个维度及其对应的属性,然后需要明确原子指标和派生指标。原子指标是针对特定业务过程的度量,不可再细分,具有明确的业务含义;派生指标是对原子指标在特定业务统计范围下的限定,下面我们将正式进入明细层模型设计。

构建一致性维表-DIM层

维度是维度建模的基础和灵魂,如何构建一致性维表,维度表设计过程如下:

  • 第一步:选择业务对象;
  • 第二步:定义维度属性;
  • 第三步:定义关联维度;
  • 第四步:冗余维度;

设计TIPS

  • 主键标识:
  • 维度表必须要有唯一主键标识,可通过配置DQC强规则保证主键唯一性;(ps:记得很久以前弱弱问了老板一句,维表一定要有主键么?被老板白了一眼,从此铭记于心!

  • 水平拆分/垂直拆分:
  • 当出现以下情况时,可以将维度的不同分类实例化为不同维度:
  • 不同业务属性差异比较大或者数据量差异大,例如淘宝商品、天猫商品、1688商品,有公共属性,也有各自独特的属性,这时候将所有可能的属性建立在一个表里不切实际;
  • 业务的关联程度较低,对于两个相关性较低的业务,耦合在一起弊大于利,影响模型稳定性和易用性;
  • 维度属性相同的数据,可以将产出时间晚/运行不稳定/口径变化频繁/热度低较少使用的属性拆分至单独表:
  • 主维表存放稳定、产出时间早、热度高的属性;
  • 从维表存放变化较快、产出时间晚、热度低的属性;

  • dt每日全量记历史/拉链记历史:
  • 拉链记历史:存储计算成本低、运维成本高、使用成本稍高;
  • dt记历史:存储计算成本高、运维成本低、使用成本低;

  • 维表命名规范:
  • {project_name}.dim_{业务关键字}[_{数据单元}]_{维度缩写}[_{自定义标签缩写}];
  • 按天调度,省略后缀dd;按小时调度,添加后缀hd;

构建明细事实表-DWD层

明细事实表分为事务事实表、周期快照事实表和累计快照事实表,具体分类如下:

明细事实表设计过程如下:

  • 第一步:选择业务过程,事务事实表的典型特征是限定发生时间等于当天,以解决数据漂移;
  • 第二步:声明粒度,事务事实表的粒度表达有多种方式,快照事实表的粒度通常以维度或维度组合形式声明;
  • 第三步:确定维度;
  • 第四步:确定事实 仅包含与业务过程相关的事实;
  • 第五步:冗余维度;

设计TIPS

  • DWD设计的首要原则是稳定,提供最明细的数据,尽量与原系统保持一致,保持足够多信息;
  • ODS表中提取数据时,需要考虑脏数据的过滤,以及将数据解析成下游可以直接消费的数据,比如枚举值的加工和日志扩展字段的解析;
  • 冗余维度属性时,对于经常变化的属性,可以封装视图来避免数据回刷;
  • 明细表命名规范:
  • {project_name}.dwd_{业务关键字}_[_{数据单元}]_{单或多业务过程缩写}[_{自定义标签缩写}]_{刷新周期标识}{单分区增量全量标识}

构建汇总事实表-DWS&ADM层

图片

汇总事实表的设计过程如下:

  • 第一步:确定统计粒度
  • 第二步:定义统计指标
  • 第三步:划分物理表
  • 第四步:冗余维度属性

DWS轻度汇总层面向业务需求设计,首先考虑的是复用性。需要特别关注某些维度的聚集是否经常用于数据分析,并在设计时尽量覆盖常用的分析场景。这样做的好处是,一方面可以为上游提供统一、准确、一致的数据,另一方面,上层指标加工时无需多次计算,可以节省资源。

设计TIPS

  • 避免维度属性一起聚合,数据汇总完成后关联维度获取最新维度属性;

  • 避免所有统计周期/CUBE一起计算,考虑计算复用,如nd依赖1d、粗粒度依赖细粒度;

  • 注意维度用于业务限定或统计粒度的使用方式,使用当天的 vs 最新的:
  • 使用当天的快照数据,则在回刷数据时,数据始终一致;
  • 使用最新的快照数据,则在回刷数据时,数据无法和最初保持一致;

  • 汇总表命名规范:
  • DWS轻度汇总表:
  • {project_name}.dws_{业务关键字}[_{数据单元}][_{数据粒度缩写}][_{单或多业务过程缩写}][_{自定义标签缩写}]_{后缀};
  • 日汇总通过1d/nd/td等进行区分,其中[1d是1天数据汇总]、[nd是多天数据汇总],[td是历史累计汇总],其他周期用[hs小时汇总]、[ws周汇总]、[ms月汇总]、[rs实时汇总]表示;
  • ADM应用汇总表:
  • {project_name}.adm_{业务关键字}[_{单元}][_{自定义标签缩写}]_{后缀};
  • 统计时间周期:统一用[ds日统计]、[ws周统计]、[ms月统计]表示,如果能明确界定1d/nd/td,后缀也可写成1d/nd/td;


物理建模设计

逻辑模型设计好后,我们可以开始正式进入代码开发和运维阶段(即正式开始干活):

代码开发:数据业务逻辑处理+SQL SCAN代码规则校验+数据测试(对比、分布)

部署运维:生成ETL任务+运行状态监控+DQC配置

数据模型验证与保障


社区数据服务


写在前面

我7月初接手了社区业务,这里从我的视角讲述如何针对一块业务进行数据建模以及提供对应的数据服务。对于数据同学来说,我们能做的包括帮助业务看清现状,定位业务问题,以及数据驱动发现产品优化方向与运营策略并定量效果。首先第一步,我们要充分了解业务背景,即市场机会如何,市场现状如何,在我司的定位是什么?以兴趣社区为例,相较于传统的社交方式,目前市场上的趋势是人们更倾向于寻找共同兴趣爱好和认知的伙伴,而针对小众兴趣领域,用户对非标准化商品的交易需求也在增加,比如户外活动和livehouse门票。目前主流的平台只有粗门和闪动,剩下大部分是微信私域在承接(私聊、朋友圈、微信群、小程序等),抖音和小红书等也还在起步阶段。我们的兴趣社区产品是以兴趣为基础,社区为形态,具有分发长尾内容和非标准化商品能力的本地化社区产品。行业内社区的商业模式如下图所示:



兴趣社区整体的数据服务框架如下图所示:




数据建模过程

接下来讲述社区数据建设流程,这里只列出了一些关键流程,具体细节在此不展开叙述。

ER关系图



业务架构图



构建总线矩阵

数据分析思路

指标体系



OSM拆解



明确和规范定义指标与维度

原子指标

图片

派生指标

图片

维表设计




使用 ChatGLM 搭建对话模型    


通过ChatGLM和LangChain构建高效的对话模型。基于自然语言处理技术,并使用语言交换协议提升语义理解和交互体验。可广泛应用于聊天机器人、智能客服、社交媒体等场景中,有效解决对话模型中的语义理解和交互问题,提高用户交互的自然性和流畅度。


点击阅读原文查看详情。

从数据结构的角度来看,兴趣社区的数据模型可能需要引入更多的图结构,以反映用户之间的兴趣关系和社区之间的关联关系。此外,兴趣社区的数据模型还需要考虑非结构化数据的处理,比如用户的兴趣描述和社区内的讨论内容等。

除了这些考虑因素之外,在设计兴趣社区的数据模型时,还需要遵循以下原则:

  1. 可扩展性:数据模型应该具有可扩展性,能够随着社区的发展和需求的变化而轻松扩展。
  2. 灵活性和可定制性:数据模型应该具有灵活性和可定制性,能够根据不同的社区需求进行调整和定制。
  3. 性能和效率:数据模型应该能够高效处理和存储数据,并满足社区的性能和效率要求。
  4. 安全性和隐私性:数据模型应该符合安全性和隐私性要求,保护用户数据和隐私。
  1. 用户画像:了解目标用户的人口统计信息、兴趣爱好和使用行为,以设计符合用户需求的数据模型。
  2. 社区结构:考虑社区的组织形式、层级结构和成员关系,以设计能够反映社区结构的数据模型。
  3. 内容类型:分析社区中产生的内容类型,如文字、图片、视频和音频,以设计能够支持不同内容类型管理的数据模型。
  4. 数据规模:考虑社区的规模和数据增长速度,以设计能够高效处理和存储大规模数据的数据模型。
  5. 延迟要求:根据社区的实时性和交互性要求,设计能够满足延迟要求的数据模型。
  1. 业务需求理解不透彻,导致数据模型无法满足实际业务需求。
  2. 数据质量差,导致建模难度增加,影响数据模型的准确性和可靠性。
  3. 技术选型不当,导致模型设计和开发效率低下,难以满足业务快速发展的需要。

兴趣社区的数据模型更加强调兴趣维度。传统社交媒体的数据模型主要以用户、关系和内容为中心,而兴趣社区的数据模型则需要增加兴趣维度,以反映用户对不同兴趣领域的关注和参与程度。

遇到这些难点,我们不妨用点“土办法”:

  1. 找业务大咖们开会讲需求!实在不行,就偷偷潜伏在业务部门,边吃瓜边划重点。
  2. 数据抽样是个好东西,抽样分析一下数据质量,再对症下药,精准治疗。
  3. 多调研,多请教,少闭门造车。技术选型就像买车,货比三家不吃亏。当然,还得结合实际情况,不能盲目跟风。
  4. 模块化设计,分而治之。把大象装进冰箱,需要分三步;把复杂的数据模型搞定,也需要把它拆分成一个个小模块,逐个击破。
  5. 多测多试,反复打磨。数据模型不是一蹴而就的,需要不断的测试和优化,才能达到既满足业务需求,又皮实耐用的理想状态。

从学术的角度来看,数据建模中需要注意以下难点:

  1. 范式理论与业务需求之间的平衡:范式理论追求数据的规范化,但有时需要根据业务需求对数据进行必要的冗余和非规范化处理。
  2. 数据模型的灵活性与稳定性:数据模型需要具有一定的灵活性,以适应不断变化的业务需求,同时又要保持稳定性,确保数据的完整性和一致性。
  3. 数据模型的性能优化:数据模型需要考虑性能优化,在满足业务需求的前提下,提高查询效率和降低存储成本。

如果用大白话来解释,设计兴趣社区数据模型就像盖房子,需要考虑以下几个关键因素:

  1. 住户画像:了解住户的年龄、职业、兴趣爱好等信息,才能设计出符合他们需求的房子。
  2. 户型结构:考虑房子的户型,是单层还是复式,有多少房间和卫生间,才能满足住户的居住需求。
  3. 装修风格:根据住户的喜好,确定房子的装修风格,是简约现代还是古典欧式的。
  4. 面积大小:根据住户的家庭人数和生活习惯,确定房子的面积大小,不能太小也不能太大。
  5. 朝向采光:考虑房子的朝向和采光,保证住户的居住舒适度。

通俗点说,传统社交媒体就像一个大广场,大家都在上面闲逛,聊聊天,晒晒自拍。而兴趣社区则更像是一个个小圈子,每个圈子都有自己的主题,比如养猫、摄影、美食。在这个小圈子里,大家可以深入交流自己的兴趣爱好,分享心得体会。所以,兴趣社区的数据模型需要特别关注这些小圈子的数据,比如圈子的主题、成员构成、活跃度等。