当前位置: 首页 > news >正文

初识数据仓库

一、什么是数据仓库

数据库 --> OLTP:(on-line transaction processing)翻译为联机事务处理

记录某类业务事件的发生,如购买行为,银行交易行为,当行为产生后,系统会记录是谁在何时何地做了何事,这样的一行(或多行)数据会以增删改的方式在数据库中进行数据的更新处理操作,要求实时性高、稳定性强、确保数据及时更新成功,像公司常见的业务系统如ERP,CRM,OA等系统都属于OLTP

数据仓库 --> OLAP:(On-Line Analytical Processing)翻译为联机分析处理

当数据积累到一定的程度,我们需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取我们想要的信息,为公司做决策提供支持,这时候就是在做OLAP了,OLAP支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果

数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合。

通过对数据仓库中数据的分析,可以帮助企业,改进业务流程、控制成本、提高产品质量等。

数仓并不是数据的最终目的地,而是为主句最终的目的地做好准备。包括:清洗,转义,分类,充足,合并,拆分,统计等。

  1. 面向主题

操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域——用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关

  1. 集成的

面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

  1. 相对稳定的

操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供查询,数据进入数据仓库以后,一般将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

  1. 反映历史变化

操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。

二、数据仓库架构

其实数据仓库很早之前就有了很多传统的数仓技术,例如基于Teradata的数据仓库,只不过在大数据背景下我们开始抛弃传统构建数仓的技术,转而选择了更能满足当前时代需求的大数据技术,当然大数据技术并没有完整的、彻底的取代传统的技术实现,我们依然可以在很多地方看见它们的身影

数仓问题

随着数据量暴增、数据源多样化、服务对象变化,传统经典数仓的不足凸显:

  • 传统数据分析更注重对高密度、高价值的结构化数据的业务数据分析,对非结构化、半结构化数据的处理,如图像、文本、音频的存储和分析非常薄弱。

  • 由于传统数据仓库采用结构化存储,当数据从其他系统导入数据仓库时,我们通常会引入ETL过程。ETL与具体的业务有很强的的绑定性,通常需要一个专门的人或者团队与业务部门进行连接,并决定如何进行数据清洗、转换及加载。

  • 随着异构数据源的增加,如视频、文本、图片,要分析数据内容并进入数据仓库,就需要非常复杂的ETL,导致ETL过于庞大且臃肿

  • 数据库范式等约束规则重点解决数据冗余问题,以确保数据的一致性。原则上,数据仓库原始数据是只读的,所以这些约束条件将成为影响性能的因素。

  • 数据量过大时性能称为瓶颈。

离线数仓

Hadoop生态的出现从几个维度解决了传统数仓在数据分析中遇到的瓶颈:

  • 分布式计算。多节点并行计算,强调数据的局部性,并尽量减少节点间的数据传输。

  • 分布式存储。将一份大文件分成若干份,没分独立放在一个节点上。涉及到文件拷贝、碎片化、管理等操作。

  • 检索与存储结合。早期大数据系统中,存储和计算比较单一。大数据框架下的存储不仅存储数据内容自身,还增加了很多元数据。

  • 存算分离。数据库系统出于性能的考虑,主要采用“计算和存储紧耦合”的架构。而在分析大量级的数据时,往往结果间会相互影响,在这种情况下,单个计算引擎无法完全控制数据布局和文件系统。因此,需要存算分离。

离线数仓缺点

  • 分布式存储强调数据的只读性,如HDFS的存储方式不支持更新、写操作不支持并行等。在应用上有一定局限性。

  • 存储的耦合,副本机制造成了扩展和容灾发生时的成本压力和运维压力。

  • 尚缺乏完整的cube工具。虽然目前有部分开源或者商业化的产品,担任存在局限性。如cube缺乏灵活性和稳定性,对于业务支持的灵活性不足。对于报表数量多或复杂的场景,就需要过多的人工定制。

  • 离线处理为主,缺乏实时性。

Lambda架构

在离线大数据架构基础上增加一个加速层(增加一条实时计算链路,并对数据源进行流失改造,实时计算订阅消息完成计算,推送到下游),使用流处理技术直接完成那些实时性要求高的指标计算,然后和离线计算整合从而给用户一个完整的实时计算结果。

Lambda架构存在的问题:

  • 同样的需求要开发两套一样的代码,开发成本、维护成本极高。

  • 同样资源计算两次,资源占用多。

  • 实时链路和离线链路计算结果容易让人误解,昨天和今天看到的数据不一致。

  • 下游需整合实时和离线处理结果。

kappa架构:

使用不可改变的数据流作为主要的记录源,而不使用数据库或文件的时间点来表示。

Kappa架构将数据作为事件写入到持久化的流中,对代码的修改只需要重放过去的事件即可。

kappa架构解决了lambda架构中较冗余的部分,支持数据重放,架构简洁。但实现较为困难。

混合架构:

在实际应用上并不是完全规范的lambda或kappa架构,可以将两者混合,大部分实时指标采用kappa架构完成计算,少量关键指标(金额等)使用lambda架构用批处理重新计算,增加一次校对过程。

数仓整体架构

三、数仓建模

数仓分层

清晰数据结构、数据血缘追踪、减少重复开发、把复杂问题简单化、屏蔽原始数据的异常

ODS层

  1. 保持数据原貌不做任何修改,起到备份数据的作用。

  1. 数据采用压缩,减少磁盘存储空间

  1. 创建分区表,防止后续的全表扫描

DWD层

DWD层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。

DWS层

DWS层统计各个主题对象的当天行为,构建主题对象的全量宽表。DWS层的宽表字段,是站在不同维度的视角去看事实表,重点关注事实表的度量值,通过与之关联的事实表,获得不同的事实表的度量值。

ADS层

分别对,如:设备主题、会员主题、商品主题和营销主题进行指标分析,其中营销主题是用户主题和商品主题的跨主题分析案例

维度建模

维度建模一般步骤:选择业务过程→声明粒度→确认维度→确认事实

(1)选择业务过程

在业务系统中,如果业务表过多,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。

(2)声明粒度

数据粒度指数据仓库的数据中保存数据的细化程度或综合程度的级别。

声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。

(3)确定维度

维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。例如:时间维度、用户维度、地区维度等常见维度

(4)确定事实

此处的“事实”一词,指的是业务中的度量值,例如订单金额、下单次数等。

在DWD层,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。

相关文章:

初识数据仓库

一、什么是数据仓库数据库 --> OLTP:(on-line transaction processing)翻译为联机事务处理记录某类业务事件的发生,如购买行为,银行交易行为,当行为产生后,系统会记录是谁在何时何地做了何事…...

FilenameUtils工具类部分源码自研

FilenameUtils工具类部分源码自研getExtension(orgFileName)源码如下逐行分析getExtension(orgFileName)源码如下 public class FilenameUtils {public static int indexOfExtension(String fileName) throws IllegalArgumentException {if (fileName null) {return -1;} els…...

【前端领域】3D旋转超美相册(HTML+CSS)

世界上总有一半人不理解另一半人的快乐。 ——《爱玛》 目录 一、前言 二、本期作品介绍 3D旋转相册 三、效果展示 四、详细介绍 五、编码实现 index.html style.css img 六、获取源码 公众号获取源码 获取源码?私信?关注?点赞&…...

Java——聊聊JUC中的原子变量类

文章目录: 1.什么是原子变量类? 2.AtomicInteger(基本类型原子变量类) 3.AtomicIntegerArray(数组类型原子变量类) 4.AtomicMarkableReference(引用类型原子变量类) 5.AtomicInteger…...

elasticsearch索引与搜索初步

ES支持cURL交互,使用http请求完成索引和搜索操作,最基本的格式如下:创建索引我们可以使用PUT方法创建索引,通过指定“索引”、“类型”、“文档ID”锁定文档,通过参数指定文档的数据。红色部分的路由分别指定了“索引”…...

【Python】多线程与多进程学习笔记

本文是一篇学习笔记,学习内容主要来源于莫凡python的文档:https://mofanpy.com/tutorials/python-basic/threading/thread 多线程 线程基本结构 开启子线程的简单方式如下: import threadingdef thread_job():print(This is a thread of %…...

MySQL基础知识点

1.在Linux上安装好MySQL8.0之后,默认数据目录的具体位置是什么?该目录下都保存哪些数据库组件?在目录/usr/sbin、/usr/bin、/etc、/var/log 分别保存哪些组件? 答:默认数据目录:/var/lib/mysql。保存有mysq…...

代码随想录算法训练营第五十九天| 583. 两个字符串的删除操作、72. 编辑距离

Leetcode - 583dp[i][j]代表以i-1结尾的words1的子串 要变成以j-1结尾的words2的子串所需要的次数。初始化: "" 变成"" 所需0次 dp[0][0] 0, ""变成words2的子串 需要子串的长度的次数,所以dp[0][j] j, 同理,dp[i][0] …...

指针引用字符串问题(详解)

通过指针引用字符串可以更加方便灵活的使用字符串。 字符串的引用方式有两种,下面简单介绍一下这两种方法。 1.用字符数组来存放一个字符串。 1.1 可以通过数组名和下标来引用字符串中的一个字符。 1.2 还可以通过数组名和格式声明符%s输出整个字符串。 具体实…...

数据结构——哈夫曼树编程,输入权值实现流程图代码

一、须知 本代码是在数据结构——哈夫曼树编程上建立的,使用时需将代码剪切到C等软件中。需要输入权值方可实现流程图,但是还需要按照编程换算出的结果自己用笔画出流程图。 下面将代码粘贴到文章中,同时举一个例子:二、代…...

【MySQL】 事务

😊😊作者简介😊😊 : 大家好,我是南瓜籽,一个在校大二学生,我将会持续分享Java相关知识。 🎉🎉个人主页🎉🎉 : 南瓜籽的主页…...

Java测试——selenium常见操作(2)

这篇博客继续讲解一些selenium的常见操作 selenium的下载与准备工作请看之前的博客:Java测试——selenium的安装与使用教程 先创建驱动 ChromeDriver driver new ChromeDriver();等待操作 我们上一篇博客讲到,有些时候代码执行过快,页面…...

【三维点云】01-激光雷达原理与应用

文章目录内容概要1 激光雷达原理1.1 什么是激光雷达?1.2 激光雷达原理1.3 激光雷达分类三角法TOF法脉冲间隔测量法幅度调制的相位测量法相干法激光雷达用途2 激光雷达安装、标定与同步2.1 激光雷达安装方式考虑因素2.2 激光雷达点云用途2.3 数据融合多激光雷达数据融…...

自动驾驶感知——物体检测与跟踪算法|4D毫米波雷达

文章目录1. 物体检测与跟踪算法1.1 DBSCAN1.2 卡尔曼滤波2. 毫米波雷达公开数据库的未来发展方向3. 4D毫米波雷达特点及发展趋势3.1 4D毫米波雷达特点3.1.1 FMCW雷达角度分辨率3.1.2 MIMO ( Multiple Input Multiple Output)技术3.2 4D毫米波雷达发展趋势3.2.1 芯片级联3.2.2 专…...

C语言(内联函数(C99)和_Noreturn)

1.内联函数 通常,函数调用都有一定的开销,因为函数的调用过程包含建立调用,传递参数,跳转到函数代码并返回。而使用宏是代码内联,可以避开这样的开销。 内联函数:使用内联diamagnetic代替函数调用。把函数…...

图卷积神经网络(GCN)理解与tensorflow2.0 代码实现 附完整代码

图(Graph),一般用 $G=(V,E)$ 表示,这里的$V$是图中节点的集合,$E$ 为边的集合,节点的个数用$N$表示。在一个图中,有三个比较重要的矩阵: 特征矩阵$X$:维度为 $N\times D$ ,表示图中有 N 个节点,每个节点的特征个数是 D。邻居矩阵$A$:维度为 $N\times N$ ,表示图中 N…...

模电学习6. 常用的三极管放大电路

模电学习6. 常用的三极管放大电路一、判断三极管的工作状态1. 正偏与反偏的概念2. 工作状态的简单判断二、三种重要的放大电路1. 共射电路2. 共集电极放大电路3. 共基极放大电路一、判断三极管的工作状态 1. 正偏与反偏的概念 晶体管分P区和N区, 当P区电压大于N区…...

Lesson 6.6 多分类评估指标的 macro 和 weighted 过程 Lesson 6.7 GridSearchCV 的进阶使用方法

文章目录一、多分类评估指标的 macro 和 weighted 过程1. 多分类 F1-Score 评估指标2. 多分类 ROC-AUC 评估指标二、借助机器学习流构建全域参数搜索空间三、优化评估指标选取1. 高级评估指标的选用方法2. 同时输入多组评估指标四、优化后建模流程在正式讨论关于网格搜索的进阶…...

基于 Python 实时图像获取及处理软件图像获取;图像处理;人脸识别设计 计算机毕设 附完整代码+论文 +报告

界面结果:图像获取;图像处理;人脸识别 程序结构设计 图形用户界面设计与程序结构设计是互为表里的。或者说,程序结构设计是软件设计最本质、最核心的内容。徒有界面而内部逻辑结构混乱的软件一无是处。 Windows 操作系统是一款图形化的操作系统,相比于早期的计算机使用的命…...

前后端RSA互相加解密、加签验签、密钥对生成(Java)

目录一、序言二、关于PKCS#1和PKCS#8格式密钥1、简介2、区别二、关于JSEncrypt三、关于jsrsasign四、前端RSA加解密、加验签示例1、相关依赖2、cryptoUtils工具类封装3、测试用例五、Java后端RSA加解密、加验签1、CryptoUtils工具类封装2、测试用例六、前后端加解密、加验签交互…...

基于Java+SpringBoot+Vue前后端分离学生宿舍管理系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建、毕业项目实战、项目定制✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《S…...

前端高频面试题—JavaScript篇(二)

💻前端高频面试题—JavaScript篇(二) 🏠专栏:前端面试题 👀个人主页:繁星学编程🍁 🧑个人简介:一个不断提高自我的平凡人🚀 🔊分享方向…...

【微信小游戏开发笔记】第二节:Cocos开发界面常用功能简介

Cocos开发界面常用功能简介 本章只介绍微信小游戏开发时常用的功能,其他功能不常用,写多了记不住(其实是懒 -_-!): 层级管理器,用于操作各个节点。资源管理器,用于操作各种文件资源。场景编辑…...

3分钟,学会了一个调试CSS的小妙招

Ⅰ. 作用 用于调试CSS , 比控制台添更加方便,不需要寻找 ;边添加样式,边可以查看效果,适合初学者对CSS 的理解和学习; Ⅱ. 快速实现(两边) ① 显示这个样式眶 给 head 和 style 标签添加一个…...

【项目精选】基于jsp的健身俱乐部会员系统

点击下载源码 社会可行性 随着社会的发展和计算机技术的进步,人类越来越依赖于信息化的管理系统,这种系统能更加方便的获得信息以及处理信息。人们都改变了过去的思维,开始走向了互联网的时代,在 可行性小结 本章在技术可行性上…...

java注解

1. Java注解(Annotation) 2. Java注解分类 3. JDK基本注解 4. JDK元注解 5. 注解分类 6. 自定义注解开发 7. 提取Annotation信息 8. 注解处理器 9. 动态注解处理器(spring aop方式) 1. Java注解(Annotation) Java注解是附加在代码中的一些元信息,用于…...

移动测试相关

一、环境搭建 准备工作: (python、pycharm安装配置好) 1、Java SDK 安装配置 Java Downloads | Oracle 下载安装后配置系统环境变量:JAVA_HOME(jdk根目录路径)和path(jdk根目录下的bin目录路径…...

SIGIR22:User-controllable Recommendation Against Filter Bubbles

User-controllable Recommendation Against Filter Bubbles 摘要 推荐系统经常面临过滤气泡的问题:过度推荐基于用户特征以及历史交互的同质化项目。过滤气泡将会随着反馈循环增长,缩小了用户兴趣。现有的工作通常通过纳入诸如多样性和公平性等准确性之…...

Python中的进程线程

文章目录前言多进程与多线程基本概念多进程multiprocessing 类对象进程池subprocess模块进程间通信多线程threading实现线程操作线程共享所有变量线程锁参考资料前言 又花了点时间学习了一下Python中的多线程与多进程的知识点,梳理一下供复习参考 多进程与多线程 …...

python(8):使用conda update更新conda后,anaconda所有环境崩溃----问题没有解决,不要轻易更新conda

文章目录0. 教训1. 问题:使用conda update更新conda后,anaconda所有环境崩溃1.1 问题描述1.2 我搜索到的全网最相关的问题----也没有解决3 尝试流程记录3.1 重新安装pip3.2 解决anaconda编译问题----没成功0. 教训 (1) 不要轻易使用conda update更新conda----我遇到…...

免费网站app下载/淘宝流量网站

*) RequestMapping(value"/xxx/{id}",method{RequestMethod.GET}) method 不写的话,默认GET、POST都支持,根据前端方式自动适应 转载于:https://www.cnblogs.com/mySummer/p/11057147.html...

企业网站内容如何搭建/东莞seo网络公司

用Python对刑侦科推理题进行分析发布时间:2020-06-24 10:02:37来源:亿速云阅读:105作者:清晨这篇文章主要介绍用Python对刑侦科推理题进行分析,文中示例代码介绍的非常详细,具有一定的参考价值,…...

客户管理系统推荐/谷歌seo引擎优化

在微信公众平台机型服务器配置的时候,下图中的服务必须先在服务端跑起来,后台接口使用java开发。 authenticate控制器接口如下: /*** 验证只接受微信后台的服务请求* 开发者通过检验signature对请求进行校验。* 若确认此次GET请求来…...

做公司网站需要几个域名/百度访问量统计

目录第一章 AngularJS简介1.1、AngularJS简介1.2、AngularJS版本介绍1.3、AngularJS官方地址1.4、AngularJS代码体验第二章 AngularJS方法2.1、字符串大小写转换2.2、对象/数组深度拷贝2.3、对象/数组迭代函数2.4、常见数据类型判断2.5、序列化与反序列化第三章 AngularJS指令3…...

手机网站js代码/为什么不建议去外包公司上班

基础知识 机器学习可以理解为对目标函数的最大化或最小化过程,而需要最小化的目标函数称为损失函数。 1.1 针对分类问题和回归问题,有不同的损失函数,首先简单介绍回归问题常用的损失函数, 1.1.1均方误差(MSE): 均方…...

asp.net空网站/长沙百度贴吧

文章目录基础知识ASCII 码汉字编码基础知识 C语言使用char类型保存字符。一个char类型字符占用一个字节。 字节是一个八位的存储单元,每一位是0或者1,所以一个包含8位的字节有2的8次幂共256种组合。每种不同组合就表示不同字符。 00000000到11111111也…...