热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

数据仓库知识点梳理(1)

近几年随着「大数据」、「数据驱动」、「数据中台」等概念在互联网界的热炒,懂数据的获取、处理到算法推荐、模型预测等人才也得到热捧。观感上,这些技能领域是随着大数据时代而来的。而实际上,早在上世纪80年到90年代初数据仓库和数据决策支持系统概念已经提出,本质上都是将多源头的数据集中起来,采用统计学的方法来进行数据分析以支持企业的各种决策。既然换汤不换药,我们可以通过数据仓库知识来指导在大数据工程的实践

近几年随着「大数据」、「数据驱动」、「数据中台」等概念在互联网界的热炒,懂数据的获取、处理到算法推荐、模型预测等人才也得到热捧。观感上,这些技能领域是随着大数据时代而来的。而实际上,早在上世纪80年到90年代初数据仓库和数据决策支持系统概念已经提出,本质上都是将多源头的数据集中起来,采用统计学的方法来进行数据分析以支持企业的各种决策。

既然换汤不换药,我们可以通过数据仓库知识来指导在大数据工程的实践。本文将对数据仓库的发展历史和背景进行介绍,作为「数据仓库知识梳理」系列的第一篇文章。

01 数据存储的发展历程

从狭义上讲,数据仓库也是一种数据的存储形式。从电子计算机出现以来,数据的数字化存储大致经历了下面的几个阶段。

  • 1950s
    打孔卡(Punch cards),首个存储数据的介质
  • 1960s
    磁性存储(磁带、磁盘)
  • 1970s
    首个数据库管理软件(IMS), 层次型数据库
    DBTG,网状数据库
  • 1980s早期
    关系数据模型,RDBMS的实现
  • 1980s末-1990s
    数据挖掘,数据仓库(W. H. Inmon)
    95年数据仓库流行:IBM的dw方案,Oracle/SQL Server绑定OLAP服务
  • 2000s
    随着线上数据增长,成为BI解决方案的一部分
    与大数据,NoSQL系统的结合

02 企业的决策层级

企业中部署数据仓库,其目的还是要用数据来说明现在的情况,并对下一步的动作计划提供支持。企业的决策可以分成三个层级,如下图所示。

数据仓库知识点梳理(1)

底层可能有操作员就可以执行,比如一个电商订单物流长期处于「发出」状态,可能是出现丢件异常,就需要联系物流进行处理。中层的销售预测,需要根据历史的销售记录为主对未来一段时间的销售进行预测,这一层级可能在特定部门内使用。顶层的新市场识别或者店铺选址等动作,需要考虑整个公司的数据甚至是外部的数据,如地理、人口、经济数据等结合起来而作出决策。

因此,在建立数据仓库或者数据中台的时候,不是说越复杂的系统就越好,关键是看需要支持怎么样的决策层级。其次还要考虑实施难度和建设周期等多个方面的因素。

03 数据库技术的限制

上一小节中的「异常订单处理」,如果单纯考虑超时提醒功能,可以直接在关系型数据库中实现。但是上层的决策,在关系型数据库上开发可能会遇到以下的3个问题。

1.性能限制:

1.不能同时保证事物处理和BI决策类型的统计查询;

2.集成度不够:

1.C/S,B/S架构,数据库独立服务特定应用,数据是分散的

2.还有外部数据源的数据

3.各系统间的名称、单位口径的统一

3.方法 工具 的缺失

1.统计查询的优化

2.数据建模的方法论

3.配套的统计查询和统计分析工具

基于以上原因,数据仓库与业务数据库有不同的底层设计。

04 数据仓库的定义

数据仓库是一个面向主题的、集成的、非易失的,随时间变化的用来支持管理人员决策的数据集合。

​ ——《数据仓库(第4版)》

  • 面向主题,是指对应企业中某一宏观分析领域所涉及的分析对象

    • 例如:"销售分析"就是一个分析领域

    • 这个"销售分析"所涉及到的分析对象为商品、供应商、顾客、仓库等,那么数仓主题可以确定为商品主题、供应商主题、顾客主题、仓库主题

    • 数据层面来说,主题之间可能存在数据重叠关系

  • 集成

    • 数据来自于多个异构数据源
    • 标准化的数据集成方法
  • 非易失

    • 与数据源的数据分离保存
    • 一旦数据写入数据仓库,不进行更新
    • 数据仓库的数据只支持数据的初次加载和访问
  • 随时间变化

    • 保留历史数据(数据的快照)

    • 数据仓库的数据包含时间元素(记录时间戳)

    • 数据追加方式通过不同时间上数据的变化实现

05 数据建模方式

既然数据仓库最基本的功能是存储数据,数据如何存储就是下一个问题了。数据建模方式即对数据的存储方式进行设计,目前的主流的方式为维度建模,相对而言业务数据库通常采用关心建模的方式。

数据仓库知识点梳理(1)

上图中,左边是业务数据库模型,订单、顾客、产品表等都对于与业务中的实体,方面业务系统的数据查询和新增,减少 sql 的查询。其通常符合「范式」建模要求。

右边是数仓的星型模型,以一个销售主题,通过一个fact表,对接其他维度表信息。其特点是数据冗余小,大量的属性都存放在维度表中,结构清晰,便于使用相关的工具做数据分析。这里先提一下,数据仓库查询语言的工业标准其实不是sql,而是mdx,后面会单独出一篇讲下mdx的工具和简单语法。

数据仓库知识点梳理(1)

06 架构设计

数据仓库架构设计有自顶向下构建和自底向上构建两种方式。

其中自顶向下构建方式需要从企业总体需求开始设计出整体的数据模型,然后将所有需要的数据汇集起来ETL到相应的模型对象之中,这是一种大一统的方式。最后再通过特定的权限设置,将数据的访问提供给企业下面的部门。

数据仓库知识点梳理(1)

自底向上的方式,可以在子部门中获得特定主题的小型数据模型,建立服务于特定部门的数据仓库,它们也被称为数据集市。

数据仓库知识点梳理(1)

至于如何选择自己的架构,可以从以下两个方面进行考虑。

  • ROI

    • 项目风险:自顶向下方式可能周期较长,部门间数据的流转必然成为制肘
    • 商业价值:数据更集中更有可能发现其中蕴含的关系
  • IT部分角度

    • 资金政策的来源:明确项目的出资方和收益方
    • 数据信息的来源:明确谁能够提供出数据

07 总结

本文简要介绍了数据储存的发展历史,数据仓库产生的原因,数据仓库的定义、数据建模方式和数仓的架构设计。

欢迎扫描二维码关注公众号

数据仓库知识点梳理(1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 探讨如何从数据库中按分组获取最大N条记录的方法,并分享新年祝福。本文提供多种解决方案,适用于不同数据库系统,如MySQL、Oracle等。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
  • 本文详细介绍了在 MySQL、SQL Server 和 Oracle 数据库中如何使用分组和排序功能。涵盖了聚集函数的应用、HAVING 子句的作用以及特定数据库中的独特方法,如 SQL Server 的 ROW_NUMBER() 函数和 Oracle 的相关特性。 ... [详细]
author-avatar
北京圣才
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有