Skip to content

一文说清楚数据架构

About 1975 wordsAbout 7 min

架构新书

2026-05-11

数据架构的来源业务架构,由业务产品团队,软件团队和数据团队共同参与制定的架构。对于软件架构师来说,数据架构重要输出是数据模型,数据模型按照抽象程度由高到底分为3个,概念模型,逻辑模型,物理模型

本文从业务系统研发的视角来描述数据架构,如果从数据平台的角度,数据架构还包含了数据标准,数据质量等

  • 概念模型:从业务架构而来,业务视角的高层次,粗粒度的模型,定义了主体域,业务实体,实体之间的关系,相关的业务规则。如电信领域中,电信产品通过定价,销售给用户。 这里出现了电信产品,定价,以及销售品等概念。概念模型通常可以通过UML,ER图表达。
  • 逻辑模型,逻辑数据模型是基于概念数据模型更加详细的数据模型,通常与具体的业务应用场景密切相关。逻辑数据模型在概念数据模型基础之上添加了属性要素,对业务活动、业务逻辑、业务规则进行了更加清晰明确的定义并体现在具体属性和关系上,逻辑模型通常可以通过UML,ER图,PowerDesinger等工具表达。
  • 物理模型,逻辑模型具体实现,物理模型最终用于IT实现,物理模型通常使用具体的关系数据库实现,或者NOSQL,如Redis,Mogndb,Clickhouse等宽表数据库。表达数据物理模型,可以使用UML,或者ER图,PowerDesinger。

下图数据架构中的概念模型,描述了电信数据架构的高层概念模型,包含账户,定价,产品,客户和计费事件5个主题域,产品领域是核心

以产品域为例子:核心概念是产品和商品,商品包含了多个产品,以及商品拥有一个定价计划。当客户购买商品后,就建立一个商品实例。比如对于业务需求:客户购买了一个59元包月套餐,在概念模型里,体现为此包月套餐是一个商品,关联了一个59元的定价计划,此商品包含了宽带,语音,短信等多个产品。

对于如上概念模型的产品域来说,会补充更多细节,形成产品逻辑模型,逻辑模型添加了具体的属性和关联关系。上图的产品相关的逻辑模型如下(考虑到篇幅,图中逻辑模型列出了产品的基本属性):

上图产品域再次细化概念模型,比如对产品模型进行详细说明:这里的产品指的电信企业销售给客户的原子级的,销售上不可再分的单元,产品又可以细分为主产品和附属产品,其中主产品是可以独立被客户购买的产品,(如普通电话),附属产品是必须依附于主产品才能被客户购买的产品(如主叫显示,呼叫等待)。主产品产生计费事件,附属产品不产生计费事件。产品属性定义了产品初基本信息外的动态信息,重点强调“动态”属性,所有可以动态配置的信息均可以在此定义。例如宽带产品的不同带宽值,其采用名/值对的方式表示动态属性。

通过产品域的逻辑模型,可以详细设计出其物理模型,限于篇幅,如下列举了产品的物理模型。

产品表

属性名称属性描述
Product_Id用于唯一标识产品/服务的内部编号
Product_Name产品名称
Product_Comments产品描述
Product_Classification产品类别,表明是主产品还是附属产品,或其他产品,如群组
Product_Code产品的外部标准编码。
Product_Family_Id产品家族标识
State产品的状态。 标识一个产品当前的状态,包括:作废状态、等待批准状态、已批准状态、在用(正常)状态、失效状态、暂停状态、配置状态、测试状态、预注销状态、注销转头
Eff_Date产品生效的日期
Exp_Date产品失效的日期
Product_Provider_Id表明产品由哪个产品提供者提供

产品属性表

属性名称属性定义
Attr_Seq产品属性标识
Product_Id产品标识
Attr_Value_Type_Id属性值类型标识
Attr_Value_Unit_Id属性值单位标识
Attr_Character属性特征描述
Attr_Value属性值
Allow_Customized_Flag允许客户定制标志
If_Default_Value是否为缺省值

除了数据模型外,在数据架构中,数据分布也是数据架构重要的一部分,数据分布通常有专门的数据团队负责。数据分布采用了分层架构,下图展示了一个企业数据分布的架构

  • 数据源:业务系统产生的数据,如营销系统的营销系统,订单系统产生的订单数据
  • 数据采集,通过Flume实时,Sqoop离线等数据局采集组件采集这些数据,并发送给Kafka
  • 消息层: 解耦和削峰填谷作用,参考事件驱动架构风格
  • 数据攝取:通常用Spark或者Flink完成,实时计算Kafka来的数据,并存放到下游的Redis,HBase等持久层
  • 数据产品:指BI平台,AI学习系统,数据应用系统,数据开发平台等。

数据分布的架构随着数据量的增长,数据格式的增加和实时性要求,先后产生了数据仓库,数据湖,Data Mesh等架构,其架构如上图所示,但有一定区别。简单对比如下:

描述解决问题
数据仓库对关系数据库数据进行抽取和汇总,生成特定数据内容的系统,存放到关系数据里。同数据湖一样,需要专门的数据团队处理数据流业务数据按照特定目标进行聚合和整理以实现BI等数据产品工功能
数据湖关系数据库,非关系数据,文本,图片等统一采集到一个集中,业务领域无关的数据湖。数据湖实现通常是大数据或者云数据库。解决数据仓库处理非格式化数据不足,以及数据仓库聚合数据将导致历史数据丢失
数据网格业务系统除了负责维护业务数据外,还需要维护数据产品。把数据湖集中式管理的数据改成非集中方式,各个业务领域团负责维护数据产品数据湖中心化的数据远离业务数据,导致其提供的服务产质量不好,另外业务开发团队和数据产品团队沟通效率低

需要注意:对于业务系统来说,数据分布会产生一个问题,A业务系统需要B业务系统数据,A是通过访问其B业务系统数据库,还是访问数据团队提供的数据湖来获取其B系统业务数据? 俩个方案都是有问题的,最好的办法是B系统提供查询API来提供数据。这样好处是可以屏蔽B业务系统数据库的变化(shcema变化或者实时性等变化)对A系统的影响。同样的原因基于数据湖的B系统的数据,也不应该直接提供给业务系统A使用。

知行合一