关于数据模型设计和落地的一篇罕见干货

大数据技术的奥秘——数据模型

大数据时代,各大企业和政府机构都在热火朝天的进行着数据方面的建设,数据开始在组织中成为一种文化。反映在日常就是无论担任何种角色,几乎每个人都能在一定程度上理解数据的价值,甚至或多或少的都能使用一些数据的技术术语交流。“数据模型”可能就是这些术语名词中的一个典型。对于常人而言,“数据模型”可能代表了大数据技术的全部奥秘,提起这个词汇仿佛就已经是大数据专家了。

的确,不夸张的说,数据模型对于每一个数据项目的成功都具有关键的意义。对于大数据行业从业者,“数据模型”无疑是熟悉的不能再熟悉的一个概念。

◆售前人员在宣讲解决方案的时候,“数据模型”是侃晕客户、表现专业性的利器;

◆项目实施期间的数据模型人员,头戴光环,口吐各种瀑布模型、螺旋模型、3NF模型、贴源模型、雪花模型、星型模型,让人目眩神迷;

◆累成狗的码农,把逻辑模型翻译成物理表、主外键、各种(1:1)(1:N)(N:M)的关系。

数据模型在每个人眼里的作用、位置都不一样。但是本文并不准备详细探讨数据模型的理论知识,更多的是站在项目的角度,站在逻辑模型、物理模型设计的层面谈数据模型设计及使用时的一些关注点。

到底什么是“数据模型”?

不详细讲理论,但为了统一认识,我们还是要先来看一下数据模型的定义。到底什么是“数据模型”?根据百度百科的解释:数据模型(Data Model)是数据特征的抽象,是数据库管理的教学形式框架,是数据库系统中用以提供信息表示和操作手段的形式构架。数据模型包括数据库数据的结构部分、数据库数据的操作部分和数据库数据的约束条件。

一般谈到数据模型分类的时候,会听到概念模型、逻辑模型、物理模型等术语,各自又有比较复杂的设计理论和方法,不是专业选手似乎很难有清晰的认识。笔者提供一个相对通俗易懂的解释:数据模型是保存数据的一套“模具”,把所有的数据,按照“模具”的形状、规格、关系装载起来。

“模具”设计的好,数据装载进去,整整齐齐,调理清晰,如同强迫症患者看到一排整齐排列、对称有序的图片,舒服安心。用数据的时候,如同图书馆借书一样,各种索引、各种分类,让人一目了然,数据清晰明了。

“模具”设计的不好,数据姑且也能装的下,但是该填充的空着、该唯一的重复,杂乱无章。用数据的时候,如同拆解一团乱麻,幸运时凭借足够好的耐心还是有可能找到头绪,但会耗费大量的时间和资源。

什么样的模型是好的数据模型?

不要误会,前面讲“如同强迫症”并非说形式是检验数据模型的第一标准。正相反,评价数据模型优劣,是否好用才是硬道理。模型设计人员设计的“模具”是否好用,直接关系到码农晚上加班到几点,关系到模型的生命周期(模型设计不好,很容易被码农抛弃、另起炉灶),没有哪个码农愿意抱着一团乱麻找头绪吧?

既然实用性是数据模型评价的终极标准,那么在设计时就一定要审视数据模型的应用场景。数据模型只是一个载体,它的最终目的不外乎两个场景,对数据的“保存”、“使用”两个应用场景,也就是联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing)。

模型设计,有着各种各样的设计理论、参考模型、建模方法,但大都有着自己适用的场景,没有一种是放之四海而皆准的,如果有,那一定是方法论,而不是具体方法。所以,模型设计,一定要站在实用的角度上,根据不同的业务场景、使用目的,结合数据量、设备性能、数据质量情况,综合考虑来设计数据的“ 保存”、“使用”两个场景。

◆“保存”数据的场景:一般都是产生数据的源头,包括各种表单录入、交易流水记录、各种登记等活动。这些活动大部分都是靠人工触发,产生一系列的业务操作逻辑,把各个流程的数据记录下来;如果单纯从“保存数据”的角度来看,对数据模型的业务要求有记录规范、完整、数据不丢失,技术要求有符合3NF范式要求、主外键约束等。

大部分的OLTP模型设计人员都是按照录入表单结构,进行数据模型设计,甚至都不会考虑符不符合范式理论。经验丰富、专业一点的模型设计人员,会尽量在考虑效率的同时,让数据模型尽量符合3NF的要求,对模型做些优化。如果遇到大并发量,一般也多是倚仗技术人员从分库、分表、索引等技术手段来考虑,进行性能优化。要是实在难以优化,模型设计人员再考虑通过降范式、重新设计等方法,优化数据模型,用空间换时间。

所以,在交易型系统(OLTP)的模型设计和数据记录过程中,经常会有以下情况:

1.用代理键做主键的情况较多;

2.一张代码表,保存所有不同业务含义的代码;

3.模型设计不满足范式要求,可能存在一些完全一样、且业务上合理的重复数据;

4.可以对历史数据的任何字段进行update,包括对主键的update;

5.为了保证业务扩展时,数据模型的稳定,设计一些“万能”表,把业务逻辑嵌在代码里,if 字段值=A,then…. Else….。

虽然站在“数据保存、流程记录"的OLTP类业务场景来思考,以上的情况,既不会影响业务处理过程,也不会影响数据的记录与存储,似乎问题不大。但是,如果我们站在“数据使用"的OLAP类业务场景来看,以上这些都会对数据统计、分析产生严重影响,更甚者会产生严重的数据质量问题,这种数据模型的设计方式,会让数据统计变的极其复杂、困难,甚至是一种灾难。

◆ “数据使用”的场景:数据平台、仓库、集市、报表类项目,则是典型的站在“数据使用”角度来看数据的OLAP场景。当这类项目的模型设计人员面对以“保存数据“为主要目标来设计的OLTP系统的各种模型时,吐槽不断,各种抓狂,一边批判模型设计人员的“不专业”,一边不得不扎进这些“难用”的数据里,进行各种“抽丝剥茧”一样的数据探索:

1.重新梳理各种主外键关系,做业务主键梳理;

2.添加日期字段保存交易流水,想尽办法处理历史上的重复流水记录;

3.不断的处理各种由于对主键update导致的开链、断链问题;

4.把一张代码表拆成N张;

5. 把"四不像“、“二义性”的字段,拆分成N个不同业务含义的字段。

这些都是OLAP项目的“模型设计”人员在做数据调研分析的时候,必然会碰到的问题。他们一边吐槽,一边遵循着“使用数据”方便的理念、遵循着数据仓库、集市、报表类项目的建模套路来设计模型。

他们使用范式建模法、参考3NF的行业经典模型(例如:TD的FS-LDM、IBM的FSDM)设计出屏蔽下游变化的“完美”模型。各种实体、关系表、历史表,错综复杂,保存着全量历史数据。他们也根据应用需要、利用维度建模法,设计出各种星型模型、雪花模型,以支撑业务报表、数据集市、共性加工等数据要求。

但是下面这些问题经常会困扰着模型设计:

▶数据量太大导致3NF的关系表成为性能瓶颈,需要进行复杂的性能优化、数据模型降范式;

▶被售前顾问拿来强调屏蔽下游变化的完美3NF模型,在上游系统变化的时候,保持下游应用模型稳定的代价巨大,非浸淫多年3NF模型设计的专业人员根本无法理解模型、无力处理上游数据模型的复杂拆分工作;

▶庞大、复杂的3NF模型是否适合数据量小、业务形态少、科技力量薄弱的城商行、农商行的数据平台建设?一期项目完成之后,复杂的3NF模型丢给行里刚毕业两年的运维人员时,运维人员能否快速理解、快速接手运维?

▶在大数据体系下,对多表关联本就存在短板的各种组件,3NF模型还适用么,3NF的表关联会不会成为性能瓶颈?

▶大数据体系里键值对的存储方式下,什么样的建模方法更合适、更能发挥优势?

以上这些都是数据模型人员需要考虑和面对的。

随着OLAP的应用越来越多,各种应用实践的成熟度也越来越高,尤其是大数据时代新技术体系的不断发展,已经不再是“一套3NF行业模型打底、维度建模构建应用”通吃OLAP应用的时代了。

新的业务场景、新的大数据技术应用,要求数据建模人员既要懂业务使用场景、又要懂技术实现特点,才能设计出符合项目要求、业务应用和技术特色的“个性化”模型。同样,传统数据建模、开发过程中更多充当码农角色、主要进行逻辑模型到物理模型实现、"搬运"数据的技术人员,也需要更多的与数据建模人员交互,对模型设计人员提供更多的技术支撑,才能真正理解模型设计人员的模型设计思路,将结合业务场景与技术特色的实用模型进行更好的落地。

小结

数据模型本身没有对与错之分,只有好用与否的问题。理论永远是理论,实际的模型落地、使用,需要结合业务场景、技术路线、设备性能、运维管理等多方面的因素,综合考虑模型的实用性,才能让数据模型在满足业务需要的同时,能有更长的生命周期。


http://www.taodudu.cc/news/show-5291868.html

相关文章:

  • matlab如何将代码生成模型,为模型生成 C 代码
  • 模型部署时的调试技巧,debug方法
  • UG塑胶模具设计三维建模吉他模型,适合新手
  • 示波器使用概念记录
  • Google官方MVP+Dagger2架构 dagger2详解
  • dagger2无法生成daggerXXXcomponent原因分析
  • Dagger2的使用以及原理分析
  • Dagger使用详解
  • Dagger从入门到放弃
  • 个人纳税java代码_java工资纳税系统 c排班系统 程序代码
  • 灵活用工系统开发|灵活用工平台如何可以发展吗?
  • C语言-社保工资查询系统
  • java纳税服务_纳税服务系统总结
  • c语言工资纳税系统答辩ppt,C语言程序设计工资纳税系统,运行结果都是0.00求改正...
  • c语言程序设计工资纳税系统,c语言程序设计,纳税工资系统(29页)-原创力文档...
  • c语言工资管理系统输出错误,c语言问题:工资纳税系统
  • 【IoT】RC522 读取 NFC 卡 SN 号
  • Android NFC卡实例详解
  • 来个NFC卡片当贺卡?
  • .net读写NFC卡(CPU卡FM1208)技术总结
  • 最直白理解NFC开发的三种工作模式
  • 记录一次异步导致导致res获取到的数据为空
  • Webots——不同工程中的节点复制
  • 《C Primer Plus 》第六版 习题 第六章
  • TOEFL wordlist 33
  • 理解 React Native 中的 AJAX 请求
  • Java文本文件读写 两个例题(2)
  • Pool wretch.. XD
  • 《合同管理系统》基本操作流程
  • 信息系统项目管理-项目合同管理-十三

关于数据模型设计和落地的一篇罕见干货相关推荐

  1. 【2022持续更新】大数据最全知识点整理-数据仓库篇

    大数据最全知识点整理-数据仓库篇 1.什么是数据仓库(数仓的定义) 2.数据仓库特点 面向主题 集成性 稳定性 反映历史变化 3.数据库和数据仓库的区别 4.数仓构建流程 1) 数据调研.划分主题域 ...

  2. Cassandra数据模型设计最佳实践

    2019独角兽企业重金招聘Python工程师标准>>> 本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践.其 ...

  3. 浅析SAAS数据模型设计(Oracle)

    目前SAAS平台对于大家来说并不陌生,市场上真正属于SAAS应用的并不是特别多,还有很大一部分是ASP的模式在运行,不管对于公司还是技术部门都是很大的挑战.去年在做elearning项目的时候其实也就 ...

  4. 中小型研发团队架构落地实践18篇,含案例、代码

    1 写在前面 中小型研发团队很多,而社区在中小型研发团队架构实践方面的探讨却很少.中小型研发团队特别是 50 至 200 人的研发团队,在早期的业务探索阶段,更多关注业务逻辑,快速迭代以验证商业模式, ...

  5. getaway网关转发去前缀_蚂蚁金服 Service Mesh 大规模落地系列 - 网关篇

    本文为<蚂蚁金服 Service Mesh 大规模落地系列>第五篇 - 网关篇,该系列将会从核心.RPC.消息.无线网关.控制面.安全.运维.测试等模块对 Service Mesh 双十一 ...

  6. 详解数据模型设计方法

    如果把指标⽐喻成⼀棵树上的果实,那模型就是这棵⼤树的躯⼲,想让果实结得好,必须让树⼲变得粗壮.真实场景举例: ⼤多数公司的分析师会结合业务做⼀些数据分析(需要⽤到⼤量的数据),通过报表的⽅式服务于业务 ...

  7. AI产品经理数据模型设计文档(简版)

    http://www.woshipm.com/ai/2019675.html 目前数据.算法.AI产品经理岗位十分热门,本文写给想要入行这方面的新人们,带大家一起了解一下什么是数据模型设计文档. 有一 ...

  8. 再谈数据标准落标,论数据模型设计工具

    工欲善其事必先利其器.工具是用来提高生产效率,其次才是管理属性. 一个工具顺不顺手极大影响生产效率和管理效果.工具用不起来,管理制度也落不下去.管理自说自话,下面各干各的,最终两张皮.Datablau ...

  9. 企业大数据项目规划落地实施路线图

    一般来说,一个完整的大数据项目实施,需要经过开发环境搭建.集群环境部署.数据采集.数据存储与交换.数据离线与实时分析.大数据可视化等多个实现流程,这就要求系统掌握大数据技术知识. 下面以一个完整的大数 ...

最新文章

  1. 架构师成长之路-个人学习经验分享(公司研发峰会演讲ppt)
  2. 服务器清理c盘日志文件,清理WIN2003服务器C盘垃圾的批处理
  3. 如何优化Jupyter Notebook
  4. 怎么在表格中转换html格式,图解Excel与Html格式之间的互相转换
  5. Jquery源码中的Javascript基础知识(三)
  6. ZeroMQ研究与应用分析
  7. JAVA中获取工程路径的方法
  8. 网友刷屏:秃了秃了!黑马Java项目教程上新
  9. Win7旗舰版安装经验
  10. ASP.NET大作业/ASP.NET期末项目/大作业
  11. 关于前端直播(videoJS与百度云web播放器:Cyberplayer3.0试用)
  12. 数据仓库技术(Data Warehouse Technologien) 第三章节 多维数据模型(3)
  13. 迈动互联布局华北、华东、华南三大业务中心
  14. 基于JSON+JQuery实现的多条件筛选功能(类似京东和淘宝功能)
  15. 团队作业8——Beta 阶段冲刺6th day
  16. 在c#中using和new这两个关键字有什么意义
  17. landsat8 编辑头文件信息
  18. 两化融合包含方面有哪些?
  19. Docker-三剑客之machine、compose、swam集群、visualizer监控、stack部署集群、Portainer可视化
  20. https://www.yearbookchina.com

热门文章

  1. 荣耀V40轻奢版、红米K40 Pro+、黑鲨4/Pro选哪个 哪个更值得入手
  2. 京东搭建“千万级消息推送架构”的演进之路
  3. 易语言读写内存操作详解
  4. 网络自媒体人范亮亮的陈年旧事
  5. Win10如何正确安装Ganache可视化客户端
  6. FullGC频繁,线程数持续增长排查
  7. InputStream输入流转换成字节数组 和 字节数组转换成字符串
  8. sql语句去重复数据方法是什么?sql语句去重复数据技巧
  9. 三年败光50亿,广汽菲克要凉了?
  10. mysql中表单在哪存放_mysql文档存放在哪