中间表是什么?和报表有什么关系?会带来怎样的问题?又如何解决?

article/2025/9/22 18:19:03

在数据库中有一类用于保存中间计算结果的物理表,通常被称为“中间表”。中间表主要跟 OLAP(在线联机分析)业务有关,产生的原因主要有以下几方面。

imagepng

中间表来源

1. 计算逻辑复杂
在 OLAP(报表或查询)业务中,有些计算逻辑很复杂,每次都从头写会导致报表开发过于繁琐,而且有的计算用 SQL 很难写出来。这时会采用中间表事先计算好,再基于预计算的中间结果开发报表。

计算逻辑复杂常见于报表业务中,以固定报表最为常见;多维分析则比较少见。

2. 查询性能差
当查询涉及的数据量很大或者计算逻辑很复杂时查询性能会很差。为了提升查询性能,增强用户体验,通常会把汇总结果实现计算出来存储在中间表中。基于预汇总的中间表查询速度会快很多。

在实际业务中,大部分提升查询速度的中间表也都是为报表服务的。

3.ETL 过程转存
ETL 过程也会产生中间表。ETL 过程中常常会涉及到数据库的数据,正常的 ETL 过程应当是 E、T、L 这三个步骤逐步进行,也就是先清洗转换之后再加载进数据库,最后在数据库中的只是合理的结果数据。但是,E(清洗)和 T(转换)这两个步骤中会涉及到大量数据计算,而在数据库外实施这些计算很不方便,所以实际情况就会是把涉及到的所有数据都先加载进来然后再进行清洗和转换,ETL 过程变成了 ELT 甚至 LET。事先要加载的这些数据在关系数据库中也必须以表的形式存储,这就使数据库中增加了许多并非最终需要的中间表。

如果观察一下这些跑批任务,你会发现 ETL 任务很多都是为报表业务服务的。

4. 多样性数据源混合计算
另一种情况是多样性数据源造成的,这也是为数据呈现(报表查询)服务的。现代应用中的数据呈现经常会涉及数据库外的数据,目前一般的做法是把库外数据定时导入到数据库中,然后就能和数据库内的数据一起运算产生报表,否则很难实现数据库内外的数据的混合运算。这当然也会让数据库中多了一些表,而且,有些互联网上取过来的数据常常是多层的 json 或 XML 格式,在关系数据库中还要建立多个关联的表来存储,会进一步加剧中间表过多的问题。

通过列举的 4 个中间表产生的主要原因,我们发现一个共同点:中间表大部分情况都是为报表服务的。我们也知道,实际业务中的报表数量非常多,而且报表业务业务不稳定经常会新增修改报表,这会导致中间表数量不断增多。

中间表会带来哪些问题

中间表是一把双刃剑,提供很多便利的同时也会带来一些问题。

我们曾在一个运营商的报表系统中,发现了一个让人吃惊的现象。在 DB2 数据仓库中,有两万多个数据库表!经过深入了解发现,真正的原始数据表只有几百张,剩下的大量的数据库表都是为查询和报表服务的中间表。

像这种系统经过几年乃至十几年的运行,数据库中的中间表越来越多,甚至出现这种上万个的情况并不少见。大量中间表带来的直接困扰是数据库存储空间不够用,面临频繁的扩容需求。中间表对应的存储过程、触发器等等需要占用数据库的计算资源,也会造成数据库的扩容压力。

中间表过多还会带来管理方面的问题,对于成千上万张中间表想要梳理清楚恐怕是一件非常头疼的事情。

那么,是不是可以清理掉一些不用的中间表?一般的结论都是:搞不动。数据库中的中间表是不同程序员制作的,有的是综合查询系统使用,有的是报表系统使用。中间表之间还存在交叉引用,有些程序员看到有别人生成的中间表就直接使用了。有时候一些查询报表已经废弃不用了,但是对应的中间表没人敢删,因为不知道删掉之后会影响其他什么查询或者报表。

很多情况下,项目组只好为了越来越多的中间表去扩容数据库。但是数据库的扩容成本太昂贵了:不管是换更强的服务器(纵向扩容),还是增加数据库服务器的节点(横向扩容),都不便宜。

总结来说,中间表会带来管理、容量和性能三方面的问题。

如何解决中间表的问题?

可以很容易想到的方式是使用库外文件存储中间表数据,这样中间表脱离了数据库就不会对数据库再产生影响。但是,在实际应用中这种办法却很少使用。为什么呢?

我们知道,中间表是要再计算的,基于中间表查询的报表还要进行数据过滤,有的还要再次汇总,还可能涉及关联计算,这些操作在数据库里通过 SQL 完成很简单。但是文件没有计算能力,要实施这些计算只能硬编码,用 JAVA 来做,使用 JAVA 来做集合运算又非常麻烦,远没有数据库(SQL)方便。所以采用文件存储中间表的方式使用并不广泛,主要是由实现复杂度过高导致的。

那还有什么好的方式呢?

使用支持文件源的报表工具
既然中间表大部分是为报表服务的,而通过将中间表外置到文件中可以解决中间表带来的这些问题,那么直接使用支持文件源的报表工具是否就可以了呢?

答案是肯定的。

我们来看一下要实现这个目标,报表工具要具备哪些能力?

(1) 丰富的计算类库
要解决文本计算难的问题,报表工具要提供丰富的计算类库,除了能完成所有数据处理任务(都能算)以外,还要实现简单,这是基础,太复杂了没法用;

(2) 多样性数据源接口
支持多样性数据源以后,就可以不用通过数据库中转直接读取多样性数据源数据出报表;

(3) 异构数据源混合计算能力
提供多样性数据源接口后,还要能够进行异构源间的混合计算,这样就可以彻底解决掉多样性数据源带来的中间表问题;

(4) 高性能
除了实现简单以外,计算性能也要有保障,从而满足前端报表查询的性能需要。

具体实现上可以在报表工具中增加计算模块来对接“库外中间表”,结构类似这样

imagepng

其中库外中间数据文件可以采用本地文件,也可以使用网络或分布式文件系统,或其他数据源。

要解决中间表问题,需要报表工具强化自身的计算能力才能实现!

参考资料:
【数据蒋堂】第 14 期:计算封闭性导致臃肿的数据库
【数据蒋堂】第 15 期:开放的计算能力为数据库瘦身
有效减少数据库中间表的报表开发方法
为什么会有这么多中间表?


http://chatgpt.dhexx.cn/article/t8g5EviX.shtml

相关文章

mysql 中中间表是什么意思_为什么会有这么多中间表?

中间表的由来 中间表是数据库中专门存放中间计算结果的数据表。报表系统中的中间表是普遍存在的。那么,这些中间表是如何出现的?为什么中间表会越来越多?中间表会给项目组带来什么样的困扰,如何解决这些困扰?这里我们就尝试探讨一下这个问题。 中间表出现的典型场景主要有…

IT 接口对接:足迹第十二步接口对接的定义(接口对接分三种:中间库方式的接口对接,Rest格式URL对接和HTTP格式URL对接;)

1)接口对接的定义:服务端通过暴露地址/参数名称/编码,指引客户端发送一个Rest风格的URL请求,服务端读取Rest风格的URL,并返回一个响应; 接口有四部分组成:方法、uri、请求参数、返回参数&#…

MSSQL中间库对接MySQL

需要下载MySQL ODBC数据源驱动程序, 在MSSQL所在服务器安装MySQL ODBC数据源驱动程序,安装完成之后,在【控制面板】->【工具管理】->【ODBC数据源(64bit)/ODBC数据源(32bit)】->【系统DSN】->【添加】下多了MySQL数据源的驱动程…

四点流程做好商机管理

企业想做好商机管理,仅凭员工是做不到的,借助CRM销售管理系统是比较明智的选择。接下来小编从客户信息管理、业务进程跟踪、设置提醒、销售漏斗等方面讲讲企业如何做好商机管理。 只有提高商机的转化率,企业的利润才会增长。想做好商机管理&…

想通过互联网创业,如何找到商机项目创业呢

很多人都像在互联网上创业,但是互联网创业看着简单,其实挺考验一个人的眼力和思维能力,最重要是经验,今天不说什么理论方面的,只说一个简单牛逼的方法 首先你创业目的是为了什么? 拯救世界?做…

与山东云蚁旅游一起,发现旅游行业的无限商机和潜力!

随着人们生活水平的不断提高,旅游业迅猛发展已成为大势所趋。山东云蚁旅游作为一家专业的旅游服务机构,一直致力于为广大消费者提供最优质的旅游服务,在市场上享有良好的声誉和知名度。 如今,随着旅游市场的进一步开放和竞争加剧…

把信息变成商机

在商界的高层管理人员看来,公司中充斥着各种各样的信息。他们试图对这些信息进行管理和利用,从而为决策、财务管理和客户服务提供支持。 但是他们没有意识到,即便能够实现上述目标,他们也仅仅只是赶上了昨天的步伐而已。信息的发展…

旅游发现商机,他开店依靠创意经营,月收入高达万元

在自己创业之前,黄建均在某厂当电器维修工,工作辛苦而且收入不高。自己创业做生意,他"想都没想过"。 几年前,黄建均一家人外出旅游。在某景区,他发现一个不起眼的小店外排着长龙--60多岁的老人和3岁的孩童排…

什么是企业商机管理 管理销售商机流程方法

现代企业发展道路上,市场竞争愈演愈烈,很多企业都开始重视客户信息化管理来促成销售交易,在销售管理中的商机需按照轻重缓急进行分类、跟进、监控,才能对商机进行有效管理。 从某种程度上来说,一个订单成功与否的关键…

这两年大量实体店灭亡,那么商机来了,什么东西又会崛起?

我认为实体店不会灭亡,虽然这几年看到好多沿街商铺都关门了,但这只是一部分,这一部分为什么会倒闭; 一,是不断上涨的店租金和人工成本的上升; 二,网络电商价格越来越透明化,这时期出…

如何寻找商机线索

企业在寻找商机线索时,要“天时地利人和”,也就是正确的产品和服务,正确的价格,正确的地点和时间,正确的客户和正确的渠道。那么,企业如何寻找商机线索? 前言 对于企业来说,寻找商机…

数据中的商机

“与数据同行”开通了微信群,分为数据仓库、数据分析、产品经理、数据治理及机器学习五大专业,现已汇聚了4000位小伙伴了,加微信号:frank61822702 申请入群。 正文开始 下面是一篇字数为34639字的深度长文,它的长度明显…

解决ubuntu打不开软件更新器和软件中心的问题

打不开可能是软件源的问题,试试: sudo gedit /etc/apt/sources.list 然后把第三方软件源全部删除掉,重启软件更新器. 如果能够启动,但有提示请检查网络连接的信息,那么点设置,在其它软件选项卡看情况取消勾选一些软件源,可以先只保留Canonical合作伙伴试试: 然后切换到Ubunt…

Ubuntu软件中心不显示软件解决办法

18.04版本的Ubuntu有的会出现软件中心打开是没有软件,空白的,如图所示: 有效解决办法: 终端输入: sudo apt update sudo apt upgrade sudo systemctl reboot如果文章对你有帮助,不要忘了给我点个赞吼(&am…

linux ubuntu软件中心,Ubuntu软件中心

ubuntukylin软件中心是专为Ubuntu Kylin用户制作的一款软件下载中心,和国内几种大型软件管家很是相似,不过ubuntukylin软件中心是支持Linux系统的。 更新日志 1、推荐软件的自动提醒功能:开机后判断若干推荐软件(搜狗输入法、WPS办公软件、金…

Ubuntu常用软件下载

Ubuntu常用软件下载 下载工具uGET编辑器推荐字体Consolas秒表stopwatch福昕pdf阅读器foxit 下载工具uGET Windows下的下载工具–迅雷,之所以下载速度快,乃是它能搜索资源、为己所用,而不是仅仅从原始地址这单一资源处下载。 Ubuntu下也有类…

ubuntu相关软件下载

百度云下载: 第一步:找到百度云官网:https://pan.baidu.com/download,下载linux版本的deb格式。 第二步:找到deb文件的下载位置,打开终端,运行 sudo dpkg -i baidunetdisk_4.3.0_amd64.deb b…

ubuntu软件中心无法安装软件问题

一、 Ubuntu20.04软件中心打不开 尝试了很多方法 Ubuntu 20.04 默认把软件中心换成了 snap, 感觉 snap 应用老出状况, snap 应用不但体积大, 安装好的应用还不时就崩溃, 所以如果要把电脑里的所有 snap 应用全部替换了, snapd 也卸载了. 下面这三句可以有效的解决 sudo apt…

Ubuntu 12.04 软件管理

相比于Windows下需要去不同软件供应商的网站上下载安装软件的繁琐,Ubuntu提供了非常简洁有效的软件管理方法。我们先来了解下在Ubuntu环境下对软件以及其他系统资源的管理方案。 1)Ubuntu软件中心 Ubuntu软件中心是Ubuntu环境下管理软件安装卸载的一个…

Ubuntu server安装ubuntu桌面,安装软件中心-ubuntu software

目录 安装ubuntu桌面 1、 使用ssh工具链接(堡塔远程工具) 2、切换root 3、更新软件和系统 4、安装桌面 5、桌面登陆​编辑 6、安装商店 7、设置中文 8、删除多余软件 9、网络图标消失? 10、挂载nfs 不管什么都要遵守能量守恒,图形…