第十六章:数据治理之数据架构:数据模型和数据流转关系
本章我们说一下数据架构,说到数据架构,就很自然的想到企业架构、业务架构、软件架构,因为个人并没有对这些内容进行深入了解,所以这里不做比对是否有相似或者共通的地方,仅仅来说一下我理解的数据架构。
1、什么是架构
要说数据架构,先说说什么是架构,怎么定义架构这个词?
架构的本质是对复杂系统的解耦与重组。
“把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的目标,这就是架构。”
提炼关键词有三个:切分成不同的部分、不同部分之间相互沟通、完成整体所需的目标。
用日常生活中的"分工协作"思想来理解:当面对一个庞大整体(例如建造城市、设计操作系统)时,通过结构化拆分将整体分解为具有明确边界的功能模块(例如建筑中的地基/框架/管道,软件中的前端/后端/数据库),定义各模块的职责范围与交互规则,最终通过标准化接口实现模块间的有机协作。
架构的价值体现在三个方面:
- 效率提升:通过专业化分工提升各模块的执行效率。
- 风险隔离:单一模块的变更不会导致系统性崩塌。
- 持续演进:模块化设计使局部创新成为可能。
2、什么是数据架构
理解了架构,我们再说说数据架构。在说什么是数据架构之前,先说下为什么要有数据架构。
现实里某个事物的庞大复杂,所以需要架构,同样,企业内不同业务产生的数据,特别庞大、复杂,就需要数据架构。
数据是由业务产生。在业务的运行过程产生的数据,被记录到数据库不同的表中,此时的数据已经相当于被打散了再进行的记录,不能直观的反应出数据对应的业务了。数据架构就需要将已经被打散的数据,重新进行划分、组合来反映业务情况。
通过数据反映业务,自然也就能够数字化的衡量业务、评估业务、优化业务、发现新的业务机会。也就是让业务变的可量化了。
这个过程中,需要做两件事情,一件就是这个业务有多少个模块,也就是给切分成不同的部分。
第二件,就是不用模块之间的联系,也就是让不同部分之间相互沟通。
使用数据领域的术语的话,第一件事就是确定数据模型。第二件事就是明确数据流转。
所有,个人定义什么是数据架构?数据架构就是数据模型以及数据流转关系。
3、数据架构设计需要的理论知识
要设计一个好的数据架构,需要两方面的理论知识。
一方面是对于业务的理解,另一方面就是数据建模理论的知识了。
-
对于业务的理解:
对于业务的理解,在维度业务篇【业务:最熟悉的“陌生人”】中已经进行了介绍。里面详细的介绍了业务的宏观上的、和微观上的理解。详细的信息可以再回过头去看一看。
-
数据建模理论的知识:
数据建模的理论知识,就有是一个比较大的领域了。这方面的知识也完全不是一两句话能够说清楚的。
不过,推荐一本相关书籍《Star Schema 完全参考手册》,当然,数据仓库建模相关的书很多,个人只参考过这个,觉得很好
4、数据架构的目的
在第一节【什么是架构】中,我们提炼了架构的第三个关键词是“完成整体所需的目标”。
那么数据架构的目的是什么?
数据架构的目的是让数据中台加工好的数据,能够更加高效、顺畅的使用。
如果架构设置的不合理,数据能不能用,答案一定是可以的。数据都在,多关联几次,增加一些逻辑,可能最终结果也能实现。
如果架构合理那,就不需要复杂的关联,可以快速的获取到需要的数据,节省资源,提升效率,让数据的运转更加高效、顺畅。
而且,不合理的架构,在效率提升、风险隔离、持续演进,这些好架构能够获得的优点,也都不存在了。
5、数据模型设计--如何有效切分
业务本身是复杂的,如何对这个复杂的业务进行切分,其实就是一个数据模型设计的过程,也就是数据建模的过程。
之前在五大维度【业务篇】中介绍了建模的四个步骤,第一步就是:确定业务流。
这个业务流切分最好做到,高内聚,低耦合。
高内聚的目的就是为了专业化,这样子业务域的运作效率就高,松耦合的目的是子业务域之间的沟通成本最好低一点,这样整体的运作效率就越高。
至于,如何做到“高内聚,低耦合”,就需要基于对业务的了解,不同的人有不同的划分形式了。
6、数据流转关系--如何有效流转
切分只是完成了数据架构的第一步,切分后还需要确保切分后的各个部分能够高效的沟通,这依赖数据流的合理设计,数据流可以用于描述不同层级模型的映射关系,无论是主题域、还是业务环节。 体现了数据在流程和IT系统上流动的全景视图,其至少需要达成以下目标:
1、明确数据实体在哪个源头产生。这个确定数据在哪个源头,我们在【数据源】模块介绍的时候,也说过。 2、数据实体出现在业务流的哪个环节 3、数据实体出现在哪个流转系统
在模型层面,如果想让数据有效流转,还有一点比较关键就是粒度的选择,确定好不同划分的部门的粒度,才能确保数据的顺畅关联流动。
7、数据架构和业务需求的先后关系
上面说了那么多数据架构的好处,但是回到实际中,马上会让你有一种“理想很丰满,现实很骨感”的感觉。
我们理想的状态是,对业务数据进行一个完整的数据架构设计,模型设计完整合理,数据流转方便高效,实际上这里面有两个变量。
-
第一个变量:业务的变化
假如我们做好了数据架构,先不说是一个完整的数据架构还是局部的。此时业务大调整。原本的业务数据库里面的数据记录逻辑都调整了。这时候,架构怎么办?再调整架构。业务再变那?这就变成一个永远追逐的过程了。
应对这个变量没有什么好办法。只能说数据架构适用于业务相对稳定,系统不会有大调整的公司。如果是新兴公司,就不要提稳定架构了。
-
第二个变量:需求的先后
抛开第一点变量,假设我们业务稳定了,就可以完全做一个全局的数据架构了吗?
这时候就又有一个需求先后的变量,或者说投入产出的问题。
建立完整的全局数据架构一定是耗时、耗力的。这么大的消耗暂时没有需求,而且也不明确什么时候能有需求。而完全按照需求来一个,做一个那?那么势必会将模型做的比较零散。
应对这个问题,个人认为就是先将核心的业务进行完整建模,边缘的业务随着需求来不断的增加。这个过程需要架构足够强壮,也需要建模发布有完善的审核流程。
8、五大维度说明
-
组织:
组织需要注意的是,一个领域的数据架构,需要有一个领域的审核,确定新的数据模型能够合理。这个角色一般也是数据BP来负责。
-
政策:
政策主要是需要让业务部门能够配合数据中台的人进行业务的了解和梳理。明确业务流程,和表对应关系等等信息。为架构设计提供业务信息。
-
工具:
搭建架构的过程就是一个建模的过程。虽然市面上又各种建模工具,但是个人认为没有纸笔+Excel好用。
可能也是我在做数仓建模的时候,主要就是按照这种形式来的。没有办法想象出来一个更好的工具了,看这就是局限性。没有办法知道,自己不知道的东西。
数据建模的过程就是业务信息梳理的过程,梳理业务之后的四步建模:条线划分,粒度选择、维度确认、事实确认。以及不同模型间的数据流转,等等信息都以个人经验,线下文档等形式保留。数据库表都是最终产物,中间的过程没有记录,一方面没有办法做知识沉淀,知识谁人走,很容易变成从头再来。另一方面,没办法有效升级迭代。 所以,需要有一个系统将这些数据中台的潜在的巨大信息、知识能够给保留、记录出来。供后续的学习,以及架构升级做参考。
-
业务:
“数据是业务的映射”。将已经被打散的数据,重新映射会业务,首先需要知道,你的业务是什么样子,所以在数据架构,这个模块,业务的理解是尤为重要的。没有深入的业务理解,自然也就不会有好的模块切分。没有好的模块切分,模块间的流转关系也就不会自然顺畅了。
-
数据: 在架构领域,就不像前两个模块【数据源】【数据目录】一样完全不需要了解数据。这里就需要对数据进行探查,关联了。因为在数据流转过程中,需要能够明确流转是的关联关系是否合理。
现在开始渐渐接触数据本身了,后续模块会更加深入的去研究数据本身。
9、总结
数据架构,有一个对应的岗位名称是数据架构师。这个岗位可大可小。说他大是因为,确实一个好的架构很影响数据的使用体验。说他小是因为,正因为数据架构是需要深入业务、了解业务的,深入一线的工作,了解细节。
一个合理的架构,就是一次被打散的数据的重生,直接从数据中高效、顺畅地获取业务信息。通过数据反应业务,通过数字衡量业务,让业务变的可量化了。
数据架构的本质到底是什么 by 傅一平
相关文章:
第十六章:数据治理之数据架构:数据模型和数据流转关系
本章我们说一下数据架构,说到数据架构,就很自然的想到企业架构、业务架构、软件架构,因为个人并没有对这些内容进行深入了解,所以这里不做比对是否有相似或者共通的地方,仅仅来说一下我理解的数据架构。 1、什么是架构…...

目标检测DINO-DETR(2023)详细解读
文章目录 对比去噪训练混合查询选择look forward twice 论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三个新的方法: 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法…...
基于 STM32 的蔬菜智能育苗系统硬件与软件设计
一、系统总体架构 蔬菜智能育苗系统通过单片机实时采集温湿度、光照等环境数据,根据预设阈值自动控制灌溉、补光、通风等设备,实现育苗环境的智能化管理。系统主要包括以下部分: 主控芯片:STM32F103C8T6(32 位 ARM Cortex-M3 单片机,性价比高,适合嵌入式控制)传感器模…...
实现一个带有授权码和使用时间限制的Spring Boot项目
生成和验证授权码记录授权时间和过期时间实现授权逻辑 以下是具体的实现方法: 1. 生成和验证授权码 可以使用加密技术生成和验证授权码。授权码中可以包含有效期等信息,并使用密钥进行签名。 示例代码: java复制代码 import javax.crypt…...

SGlang 推理模型优化(PD架构分离)
一、技术背景 随着大型语言模型(LLM)广泛应用于搜索、内容生成、AI助手等领域,对模型推理服务的并发能力、响应延迟和资源利用效率提出了前所未有的高要求。与模型训练相比,推理是一个持续进行、资源消耗巨大的任务,尤…...
TuyaOpen横空出世!涂鸦智能如何用开源框架重构AIoT开发范式?
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引子:AIoT开发的“不可能三角”被打破 当AI与物理世界深度融合的浪潮席卷全球,开发者们却始终面临一个“不可能三角”——开发…...

Vue语法【2】
1.插值表达式: 语法规则: {{Vue实例中data的变量名}}使用场景: 插值表达式一般使用在文本内容中,如果是元素的属性内容中则无法使用; 案例: <!DOCTYPE html> <html lang"en"> &l…...

2.2.1 05年T2
引言 本文将从一预习、二自习、三学习、四复习等四个阶段来分析2005年考研英语阅读第二篇文章。为了便于后续阅读,我将第四部分复习放在了首位。 四、复习 方法:错误思路分析总结考点文章梳理 4.1 错题分析 题目:26(细节题&…...
每日c/c++题 备战蓝桥杯(修理牛棚 Barn Repair)
修理牛棚 Barn Repair 题解 问题背景与挑战 在一个暴风雨交加的夜晚,Farmer John 的牛棚遭受了严重的破坏。屋顶被掀飞,大门也不翼而飞。幸运的是,许多牛正在度假,牛棚并未住满。然而,为了保护那些还在牛棚里的牛&am…...
6个月Python学习计划 Day 3
🎯 今日目标 掌握 while 和 for 循环的使用方式理解 range() 的工作机制实践:打印 1~100、累加、九九乘法表等常见程序逻辑 🧠 学习内容详解 while 循环 i 1 while i < 5:print(f"第 {i} 次循环")i 1📌 特点&…...

Linux虚拟文件系统(2)
2.3 目录项-dentry 目录项,即 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构。和上一章中超级块和索引节点不同,目录项并不是实际存在于磁盘上的,…...

【数据结构】栈和队列(上)
目录 一、栈(先进后出、后进先出的线性表) 1、栈的概念及结构 2、栈的底层结构分析 二、代码实现 1、定义一个栈 2、栈的初始化 3、入栈 3、增容 4、出栈 5、取栈顶 6、销毁栈 一、栈(先进后出、后进先出的线性表) 1、…...

科技赋能·长效治理|无忧树建筑修缮渗漏水长效治理交流会圆满举行!
聚焦行业痛点,共话长效未来!5月16日,由无忧树主办的主题为“科技赋能长效治理”的建筑修缮渗漏水长效治理技术交流会在上海圆满举行。来自全国的建筑企业代表、专家学者、技术精英齐聚一堂,共探渗漏治理前沿技术,见证科…...

【闲聊篇】java好丰富!
1、在学习mybatis-plus的文档时,发现引入了solon依赖,才发现这是一个对标spring生态的框架,有意思! 还有若依框架,真的好丰富~~~~~~~ 2、今天面试官问我,他说很少遇到用redission做延迟队列的。后面我就反…...
STL中list的模拟
这里写目录标题 list 的节点 —— ListNodelist 的 “导览员” —— ListIteratorlist 的核心 —— list 类构造函数迭代器相关操作容量相关操作 结尾 在 C 的 STL(标准模板库)中,list 是一个十分重要的容器,它就像一个灵活的弹簧…...

6.3.2图的深度优先遍历
知识总览: 树的先根遍历: 采用递归一直找某个节点的子树直到找不到从上往下找 访问根节点1,1的子树有2、3、4,访问2,2节点子树有5访问5,5没有子树,退回到2,2还有子树6访问6,6没有子树再退回到2,2的子树都被访问了再退…...

畅游Diffusion数字人(30):情绪化数字人视频生成
畅游Diffusion数字人(0):专栏文章导航 前言:仅从音频生成此类运动极具挑战性,因为它在音频和运动之间存在一对多的相关性。运动视频的情绪是多元化的选择,之前的工作很少考虑情绪化的数字人生成。今天解读一个最新的工作FLOAT,可以生成制定情绪化的数字人视频。 目录 贡献…...

UE5 Va Res发送请求、处理请求、json使用
文章目录 介绍发送一个Get请求发送Post请求设置请求头请求体带添json发送请求完整的发送蓝图 处理收到的数据常用的json处理节点 介绍 UE5 自带的Http插件,插件内自带json解析功能 发送一个Get请求 只能写在事件图表里 发送Post请求 只能写在事件图表里 设置…...
关于flutter中Scaffold.of(context).openEndDrawer();不生效问题
原因: 在 Flutter 中,Scaffold.of(context) 会沿着当前的 context 向上查找最近的 Scaffold。如果当前的 widget 树层级中没有合适的 Scaffold(比如按钮所在的 context 是在某个子 widget 中),就找不到它。 解决办法…...
【C++】深入理解C++中的函数与运算符重载
文章目录 前言一、什么是重载?1.1 函数重载1.1.1 函数重载的规则1.1.2 示例:函数重载 1.2 运算符重载1.2.1 运算符重载的规则1.2.2 示例:运算符重载 1.2.3 运算符重载的注意事项 二、重载的注意事项2.1 重载的二义性2.2 默认参数和重载2.3 运…...

【读代码】BAGEL:统一多模态理解与生成的模型
一、项目概览 1.1 核心定位 BAGEL是字节跳动推出的开源多模态基础模型,具有70亿激活参数(140亿总参数)。该模型在统一架构下实现了三大核心能力: 多模态理解:在MME、MMBench等9大评测基准中超越Qwen2.5-VL等主流模型文本生成图像:生成质量媲美SD3等专业生成模型智能图像…...

隧道自动化监测解决方案
行业现状 隧道作为一种重要的交通运输通道,不管是缓解交通压力,还是让路网结构更趋于完善,它都有着不可估量的作用。隧道在运营过程中,由于受到材料退化、地震、人为因素等影响会发生隧道主体结构的损坏和劣化。若不及时检修和维护…...
如何通过EventChannel实现Flutter与原生平台的双向通信?
在Flutter开发中,EventChannel是处理单向数据流的核心组件,尤其适用于原生平台(Android/iOS)主动向Flutter端推送实时数据的场景,例如传感器数据、后台任务通知等。虽然EventChannel本身以原生到Flutter的单向通信为主,但结合特定设计模式,仍可实现双向交互。本文将详细…...

游戏引擎学习第307天:排序组可视化
简短谈谈直播编程的一些好处。 上次结束后,很多人都指出代码中存在一个拼写错误,因此这次我们一开始就知道有一个 bug 等待修复,省去了调试寻找错误的时间。 今天的任务就是修复这个已知 bug,然后继续排查其他潜在的问题。如果短…...

java接口自动化初识
简介 了解什么是接口和为什么要做接口测试。并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程。 一、什么是接口 在这里我举了一个比较生活化的例子,比如我们有一台笔记本,在笔记本的两端有很多插口。例如:USB插口。那…...
工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎,支持现实世界的流程自动化需求
前言 大家好,我是老马。 最近想设计一款审批系统,于是了解一下关于流程引擎的知识。 下面是一些的流程引擎相关资料。 工作流引擎系列 工作流引擎-00-流程引擎概览 工作流引擎-01-Activiti 是领先的轻量级、以 Java 为中心的开源 BPMN 引擎&#x…...
时序数据库IoTDB的分片与负载均衡策略深入解析
一、引言 随着数据库服务的业务负载增加,扩展服务资源成为必然需求。扩展方式主要分为纵向扩展和横向扩展。纵向扩展通过增加单台机器的能力(如内存、硬盘、处理器)来实现,但受限于单台机器的硬件能力。而横向扩展则通过增加更多…...

NVM安装使用及问题解决
目录 一、前言 二、NVM安装 三、配置下载源 四、nvm使用 五、安装nvm list available没有的版本 六、问题解决 一、前言 如果你开发 Node.js 项目,可能会遇到这些问题: ①新项目需要 Node.js 18,但老项目只能用 Node.js 14,…...

C++学习之STL学习:string类使用
在之前的学习中,我们初步了解到了STL的概念,接下来我们将深入学习STL中的string类的使用,后续还会结合他们的功能进行模拟实验 目录 为什么要学习string类? 标准库中的string类 string类(了解) auto和范围…...
基于 STC89C52 的养殖场智能温控系统设计与实现
摘要 本文提出一种基于 STC89C52 单片机的养殖场环境温度智能控制系统,通过集成高精度温度传感器、智能执行机构及人机交互模块,实现对养殖环境的实时监测与自动调控。系统具备温度阈值设定、超限报警及多模式控制功能,可有效提升养殖环境稳定性,降低能耗与人工成本。 一…...