宽表 VS 多表关联,谁才是大数据分析的最佳选择?

news2025/1/18 7:24:44

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维+数据分析,通过数据讲故事。

前段时间和一个客户就数据中台搭建的一些问题进行了交流,其中讨论最多的是到底是用宽表来实现业务需求,还是用多表关联来实现。今天就和大家来聊一下这个话题。(点击观看视频)

数据仓库构建过程中,有一个所谓数据集市的概念。数据集市是为了满足特定业务场景而推出的一个逻辑概念,是针对一组特定的某个主题域、部门或者特殊用户需求的数据集合。数据集市中数据的结构通常被描述为星型结构或雪花结构。通俗的理解,星型结构是一个事实表关联多个维度表,维度表之间是相对独立的,比如销售订单表关联客户维度表和产品维度表,而雪花型结构则复杂一些,维度表之间还有关联,比如销售订单表关联客户维度表和产品维度表,客户维度表还关联客户分类表,产品维度表还关联产品分类表。
在这里插入图片描述

奥威BI数据可视化软件

在这里插入图片描述

奥威BI数据可视化软件

  这两种模型,都是多表关联的模式。但在实践中,大家会发现,多表关联因为数据库在执行join时,会涉及多表扫描,效率上比较慢。就有人针对这种场景进行了优化,于是,宽表就出现了。它把某个分析场景要用到的所有维度表和事实表的字段,预先整合为一个大表,比如上例中,就将销售订单事实表、产品维度表、客户维度表等表先通过Join整合为一个大表,这个大表可能包含数十个字段。这样,使用的时候,就不再需要去多表关联,以提高查询的效率。

宽表VS多表关联

1、宽表

初衷是用空间换时间。

优势:效率

劣势:有许多冗余内容,占用空间大。

2、多表关联

优势:没有增加冗余

劣势:在数据库查询时,join会影响效率。

现在硬盘不值钱,大家更需要效率,所以,两种方式的优劣势就很明显了,越来越多的人开始使用宽表,并且,有些数据库支持列式存贮,连冗余空间都给优化了。

但是,在老周看来,这仅仅是传统的观点。为什么这么说呢?主要有两点:

一、宽表的劣势其实不在冗余空间,而是在于开发与维护成本太高。

为什么这么说呢?因为我们在第一次创建宽表时,面临一个很大的挑战,就是到底这个宽表要多宽,也就说到底要包含多少个字段。如果建少了字段,后面要再增加,就需要将历史数据全部重跑一遍,如果数据量真的很大,每次的维护时间会很长,且维护期间,用户无法使用这个数据集市。

有的聪明人就会说,那很简单啊,包含全部字段不就行了吗?这个方法当然不行,一是当宽表的字段多到一定程度,效率也会降低,另外,这个方法也无法避免后续增加字段。举个简单的例子,比如当时客户表里没有客户区域这个字段,后来增加了这个字段,亦或者,原来客户区域这个字段有些客户没有填写,现在重新填写了,那么,仍然需要重新跑一遍历史数据。

如果有很多宽表都需要用到客户区域这个字段,那你可以想像一下,小强可能是需要通宵加班了。

二、多表join原来可能是比较慢,但随着大数据技术的快速发展,现在多表join的效率已经与单表查询不相上下了,比如starrocks mpp数据库,多表join的效率与clickhouse单表查询效率相差无几。

经过上述的此消彼长,宽表的优势不再存在,而多表join则有更多的优势体现出来:

一、多表join更灵活,对于需求的变化,运维的工作量很小。

如上述客户表增加客户区域这个例子,对于多表join情况下,只需要在客户维度表中增加客户区域这个字段,并且将客户维度表重新抽取一下即可。一旦客户维度表更新,所有用到客户表的数据集市也就一并都更新了,不需要一个集市一个集市的维护;

二、如果放在奥威BI的平台上,多表join还有更多的优势可以体现出来。

1、在奥威BI数据可视化平台中,系统会根据最终使用的场景来动态构建join语法,并不会将所有的表都join,比如仅按客户维度分析销售订单,此时,就只会join客户表,而不把产品表也join上。在这种情况下,就可以最大限度的减少对效率的影响;

2、奥威BI数据可视化平台支持多事实表,也就是说,在同一个数据集市(分析模型)中,可以包含多个事实表,既可以包含销售订单,还可以包含销售出库单,这样,就可以很方便的实现分别从订单及出库单取数来计算订单出库率,而如果用宽表,这种场景还需要另外构建一个大表,将订单与出库表的所有字段都包含进来,又会造成开发与运维成本的大幅增加。

3、奥威BI数据可视化平台中有一个非常受欢迎的功能,就是智能钻取,即可以在任意报表之间穿透钻取,系统会自动传递参数,比如在看客户销售订单报表的时候,可以钻取到客户的应收账款报表,系统会自动将客户名称传递过去。如果用宽表的模式,就无法实现了。因为奥威BI数据可视化平台无法自动识别销售订单宽表与应收宽表,到底是哪个字段代表客户名称。但多表join就可以实现,因为大家都关联了客户这个维度表。

其实,对一般的生产制造企业来说,如不涉及到生产设备物联网数据,生产经营的数据量都不是很大,最大的事实表一年下来一般也不会超过500万条。在这样的数据量下,多表join与宽表的效率相差也不是很明显。

如果是零售企业,最大的事实表可能会超过5000万条记录,这种情况下,推荐使用starrocks,但不推荐使用clickhouse,因为clickhouse就是基于宽表来提升性能的,基本不支持多表join,请谨慎使用!

最后我们再总结一下宽表与多表join的优劣势对比:

宽表虽然在效率上有一定优势,但在现今大数据技术下,优势已经不明显,但其劣势却是非常明显且致命的,即在企业级应用时,需求多变的情况下,运维成本非常高;而多表join则非常灵活,运维成本非常低,更加适合企业级多变的应用场景。

老周道数据,和你一起,用常人思维+数据分析,通过数据讲故事,我们下一讲再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/500898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Lecture 13(Preparation):Network Compression

目录 Network Pruning Knowledge Distillation Parameter Quantization Architecture Design Dynamic Computation 下面介绍五个network compression的技术。这五个技术都是以软体为导向的,在软体上面对network进行压缩,不考虑硬体加速部分。 Netwo…

springboot+vue校园宿舍管理系统

项目简介 分享一个SpringBootvue所做的一个项目,有需要的私信 1.项目描述 访问地址 http://localhost:8088/login.html?redirect_urlhttp://localhost:8087/myproject 超级管理员账户 账户名:admin 密码:123456 系统管理员账户 账户名…

【系统集成项目管理工程师】计算题专题一

一、决策树和期望货币值 1、项目经理向客户推荐了四种供应商选择方案。每个方案损益值已标在下面的决策树上。根据预期收益值,应选择设备供应商 A.供应商1B.供应商2C.供应商3D.供应商4 解题: 供应商 1:60% * 10000 (-30000&am…

DDR基础

欢迎关注我的博客网站nr-linux.com,图片清晰度和,排版会更好些,文章优先更新至博客站。 DDR全称Double Data Rate Synchronous Dynamic Random Access Memory,是当代处理器必不可少的存储器件之一。本文关于DDR介绍的核心点如下&…

Hadoop 3:YARN

YARN简介 Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器。 YARN是一个【通用资源管理系统和调度平台】,可为上层应用提供统一的资源管理和调度。 它的引入为集群在利用率、…

数据结构学习记录——堆的小习题(对由同样的n个整数构成的二叉搜索树(查找树)和最小堆,下面哪个说法是不正确的)

目录 习题一 习题二 习题三 答案区 解析区 习题一 习题二 习题三 习题一 一、下列序列中哪个是最小堆? .2,55,52,72,28,98,71 .2,28,71,72&#x…

排序(数据结构系列13)

目录 前言: 排序算法的引言: 1.插入排序 1.1直接插入排序 1.2希尔排序 2.选择排序 2.1直接选择排序 2.2堆排序 3.交换排序 3.1冒泡排序 3.2快速排序 3.2.1Hoare版 3.2.2挖坑法 3.2.3前后指针法 4.归并排序 5.排序总结 结束语: 前言&…

docker容器日常操作命令

1.docker日常命令 文章目录 1.docker日常命令1.1.运行一个容器(run)1.1.1.创建contos 7.6容器 1.2.查询容器列表(ps)1.3.容器命名(--name)1.4.容器删除命令(rm)1.5.容器命令(inspect&#xff09…

【Vue2.0源码学习】变化侦测篇-Array的变化侦测

文章目录 1. 前言2. 在哪里收集依赖3. 使Array型数据可观测3.1 思路分析3.2 数组方法拦截器3.3 使用拦截器 4. 再谈依赖收集4.1 把依赖收集到哪里4.2 如何收集依赖4.3 如何通知依赖 5. 深度侦测6. 数组新增元素的侦测7. 不足之处8. 总结 1. 前言 上一篇文章中我们介绍了Object…

5 大分区管理器 - 最好的硬盘分区软件

分区是一个计算机术语,指的是在硬盘上创建多个区域,以允许操作系统和分区管理器软件有效且单独地管理每个区域中的信息。拥有大量计算机使用历史的人最有可能受益于多个分区。在硬盘中进行分区的好处之一是可以更轻松地将操作系统和程序文件与用户文件分…

node.js (fs文件系统模块,path路径模块,http模块web服务器)

node.js是js的后端运行环境 浏览器是js的前端运行环境 node.js是无法调用DOM和BOM和ajax等浏览器内置API node.js是一个基于ChromeV8引擎的JavaScript运行环境 目录 node.js可以做什么? node.js的学习路径 node安装 在node.js环境中执行javaScript代码 fs文…

Flask搭建api服务-生成API文档(Taobao/jd/1688API 调用文档说明)

API是给别人用的,就要告诉别人如何发现api,以及api的用途、名称、出参、入参,生成api文档的做法有好多种,本文选了一种最简单的方式。 核心就是通过app.view_functions 这个字典找到每个API 的endpoint所绑定的方法,然…

flutter的环境搭建步骤(MacBook Pro)

1.下载Flutter SDK包 地址:https://docs.flutter.dev/get-started/install/macos 2.配置环境变量 vim ~/.bash_profile //在打开的文件里增加一行代码,意思是配置flutter命令在任何地方都可以使用。 export PATH/app/flutter/bin:$PATH // 从新加载 sou…

JS 实现区块链同步和共识

JS 实现区块链同步和共识 之前实现了区块链和去中心化网络,这里实现区块链的同步和共识,不过本质上来说使用的的方法和 register & broadcast 的方法是一样的。 这个也是目前学习中倒数第二篇笔记了,最后两个部分学完,block…

机器视觉之线缆字符检测

在生活当中,随处可见与印刷字符有关的产品,比如:线缆上字符,键盘上的字符,衣物上的标签字符,电器上的字符等等。 而这些产品的外观由于字符在印刷时产生的一些瑕疵,如字符拉丝、移位、多墨、缺失…

身为管理层总是被下属怼,自己毫无威严,如何改变这样的现状?

身为一名管理层,被下属怼的感觉无疑是相当不爽的。毕竟,作为领导者,我们希望能够得到下属的尊重和信任,而不是被他们视为“摆设”。如果你也有类似的经历,那么不妨试试以下几种方法,来改变这种局面。 首先…

C++ Qt5.9学习笔记-事件1.5W字总结

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

物业管理系统【纯控制台】(Java课设)

系统类型 纯控制台类型(没有用到数据库) 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Idea或eclipse 运行效果 本系统源码地址:https://download.csdn.net/download/qq_50954361/87753361 更多系统…

YOLOv5结合BiFPN:BiFPN网络结构调整,BiFPN训练模型训练技巧

目录 一、BiFPN网络结构调整1、堆叠BiFPN2、调整网络深度3、调整BiFPN的参数 二、训练技巧和注意事项1、数据增强2、学习率调度3、优化器选择4、权重初始化5、模型选择6、Batch size的选择7、模型保存和加载8、注意过拟合和欠拟合问题 三、实验结果和分析1、数据集和评估指标2、…

开发、部署应用程序APP的【12要素原则】你顺便了解一下?

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 开发、部署应用程序APP的【12要素原则】你顺便了解一下? ☘️摘要☘️介绍☘️背景☘️谁应该阅读这份文件?☘️十二要素原则🌿I. 代码库 Codebase&#x1f…