java元数据是什么_用存储过程和 JAVA 写报表数据源有什么弊端?

用存储过程和 JAVA 写报表数据源有什么弊端?跟着小编一起来一看一下吧!

我们在报表开发中经常会使用存储过程准备数据,存储过程支持分步计算,可以实现非常复杂的计算逻辑,为报表开发带来便利。所以,报表开发中这样的存储过程并不少见:

24cd08cce263f4c39d3f58fa55602272.png

3008 行,141KB 的存储过程,会给报表开发带来什么不好的影响?1. 编辑调试性
存储过程难以编辑调试,这样几千行存储过程的开发周期往往要以周或月计,这样会严重影响报表的开发效率,而业务提的报表需求似乎都“很急”。2. 维护性
相对开发的一次性,维护的工作可能要经常做。实际业务中报表经常会修改,这种现象叫做报表业务的稳定性差。报表的数据准备逻辑变化,修改上千行的存储过程对绝大多数报表开发人员来说都是噩梦。
有时这样的报表会分两拨人来做,DBA 或专业程序员负责编写存储过程给前端报表开发人员做报表,这样就避免了报表开发人员写存储过程。但这样报表修改的流程会变长,修改一张报表涉及多个人员之间沟通(还包括业务人员),如果负责报表前后端的两拨人隶属不同的团队就更麻烦了。3. 知识传承
从维护性可以直接引出另一个“知识传承”的问题。还是拿上面的报表为例,如果一个新人要改上面的报表,你觉得他要多久能看懂存储过程,改完报表?
当然,这个问题还涉及很多管理方面的手段,单纯从技术本身来看,这样的报表想要很好地传承知识是很难的。4. 安全性
对存储过程的修改需要较高的数据库权限,而报表经常要改就要经常操作数据库,这对数据库安全也是一个隐患,同样需要强管理机制才能保障一二。5. 移植性
现在绝大多数规定禁止使用存储过程的原因,首当其冲的就是存储过程没有移植性。如果未来数据库发生变化需要迁移,不管将来是更换数据库类型,还是系统扩展(分表分库),大量无法移植的存储过程绝对是最头疼的问题。
当然,“换库”这件事情即使在今天仍然不会频繁发生,但是只要发生一次就够受了(有国产化或系统扩展预期的就要注意了)。6. 耦合性
从维护性、安全性和移植性看来,存储过程会导致报表应用(前端)和数据库(后端)紧耦合。紧耦合除了会导致前面的三个问题外,还会让数据库编的臃肿,影响数据库性能。
重要的事情说好多遍,报表的业务不稳定,报表除了经常增加和修改,有时还会删除(不用了),而为这个报表准备的存储过程还在数据库里,这时想要删掉这个存储过程就比较难了。
为什么?
因为你不知道是不是还有其他程序在共用这个存储过程,删除会不会对其他程序产生影响。结果就是数据库的存储过程越积越多导致数据库臃肿,而有的存储过程还会涉及自动运行,虽然存储过程可能不再使用,但仍然在消耗数据库资源,长此以往数据库性能下降就成为必然了。7. 多源支持
存储过程运行在封闭的数据库内,无法进行跨多数据源混合计算。关于多源问题,几年前在报表开发还不显著,那时大家都用关系库;但现在不一样了,同一个报表的数据可能来自多个不同类型的数据源(RDB/NoSQL/TxT/Excel/Hadoop/ES 等等),这时存储过程就无能为力了。如何搞定这些问题?
有没有办法解决存储过程带来的这些问题呢?
当然有!
没有什么是硬编码解决不了的!用 JAVA 替代存储过程,脱离数据库运行来解决上面的问题(自行搜索 SOA 和微服务理念)。存储过程一个显示的好处是可以分步实现报表数据准备逻辑,这个优点 JAVA 也有,甚至比存储过程更彻底,说句文绉绉的话:JAVA 的离散性更好。
只是 JAVA 写起来比较麻烦,对于报表开发人员来讲太难了,如果还要加一个修饰词那就是太 XX 难了。存储过程使用的 SQL 语言非常适合做集合运算,分组汇总一句 group by 就写出来了,反观 JAVA 就不具备这个优点了,分组汇总可能要写上几十上百行才行(类库缺失会让开发复杂度急剧上升,想想你为什么不用汇编写程序而要用 JAVA?)。
JAVA 还有一些其他的问题也不容忽视。不支持热切换
JAVA 还有一个非常致命的缺点,就是不支持热切换。报表经常要改(又来一遍),修改报表数据源以后还要重新编译、重启应用才能生效,对绝大多数业务系统都是不能接受的。报表讲究的不仅是查询立等可取,修改也要实时生效才行。报表与应用紧耦合
与使用存储过程会导致报表与数据库紧耦合类似,用 JAVA 准备报表数据源会导致报表模块和应用的其他业务模块紧耦合不宜维护。
我们知道,报表大多数情况都是作为一个模块集成到应用系统提供报表查询服务,集成的方式可以是 API(jar 包)方式紧集成;也可以将报表单独发布成服务,通过服务调用的方式松集成,这样报表服务器产生的任何压力或问题都不会影响应用系统(高可用)。
*API 紧集成后,由于报表数据源是 JAVA 写的,这样就要和主应用的代码一起打包,无法作为独立的模块维护,而未来想要拆分也基本不可能了;
* 服务松集成则完全无法实现。
所以,用 JAVA 写报表数据源虽然可行,但也不是特别理想。
那有没有其他办法呢?
我们比较一下存储过程和 JAVA 的优缺点可以发现,解决问题应该是沿着继承二者优点,改进缺点的方向进行。清晰起见,总结一下需要的点。

4126b1d7d9c0d4b20affcec029cd8f12.png

把主要的点列了一下,我们的目标就是找到支持这些点的技术手段(问号所在行)。易开发、易维护
这注定了这些能力应该是报表工具内置的,这样报表开发人员自己就能使用工具搞定报表开发,而不必依赖其他人或团队;热切换
热切换要求这个技术应该是解释执行的,这样才能做到实时修改实时生效;支持多源
能够对接多种不同类型的数据源进行混合计算,比如文本和数据库表的 join;低耦合、可移植
数据准备能力和报表呈现能力都报表内置了,自然与应用和数据源都解耦了,未来系统扩展自然毫无压力。
这样我们可以很容易想到在报表端增加一个计算模块,来替代存储过程或 JAVA 为报表准备数据,这个模块可以是由嵌入报表工具的脚本来实现,结构可以是这样的

f38244555d5646cd8518dcacf685d6ba.png


脚本要具备完善的计算能力(什么计算都能算),支持多源,解释执行允许热切换这些能力。

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

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

相关文章

mysql多实例安装启动_MySQL多实例安装启动

Tips:之前我们的一个实例是mysql3306,我们现在再安装一个mysql33071。和之前一样,创建需要的目录文件夹mkdir -p /data/mysql/mysql3307/{data,logs,tmp}创建完 就给文件授权chown -R mysql:mysql /data/mysql/mysql3307/2.进入mysql3307cd /…

用vhdl实现4位加减法计数器_32位加减法器设计

功能特性设计思路基于一位全加器,设计32位并行加法器。并行加法器中全加器的位数与操作数相同,影响速度(延时)的主要因素是进位信号的传递。主要的高速加法器【1】有基本上都是在超前进位加法器(CLA)的基础…

绿色背景配什么颜色文字_灰色裤子配什么颜色上衣好看

我们许多人都喜欢灰色。灰色是一种很酷的自然色。灰色大气而沉稳。它介于黑白之间,是一种多用途的颜色,与其他颜色搭配将变得时尚而优雅。那么秋冬季节灰色裤子配什么颜色的上衣好看呢?接下来就来看一组时尚大人的灰色裤子穿搭吧。look1 保温…

浮栅场效应管 符号_场效应管主要参数与特点,场效应管与其他管子的对比

场效应晶体管(Field Effect Transistor缩写(FET))简称场效应管。主要有两种类型:结型场效应管(junction FET—JFET)和金属-氧化物半导体场效应管(metal-oxide semiconductor FET,简称MOS-FET)。场效应管由多数载流子参与导电,也称为单极型晶体…

super go_Go 简单性的价值:来自对 Go 倍加青睐的谷歌软件工程师的自述

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言Go 语言最近几年逐渐获得越来越多的开发者的喜欢。在 Go 社区前不久刚刚庆祝Go诞生10周年生日之际,谷歌云软件工程师 Benjamin Congdon 发表个人博客(11 月 11 日发表)&a…

判断鼠标是否在元素上_是否清扫保洁、是否雾撒降尘?江城环卫车装上了北斗,动动鼠标就知道了...

楚天都市报12月1日讯(记者卢成汉 通讯员金婵 潘婷)环卫车装上北斗定位系统,它是否上路进行清扫保洁,是否雾撒降尘。城管队员通过手机或电脑,就可以查到它的运行状态。1日,东湖高新区城管执法局称,该区运行的北斗智能环…

Object 对象详解

2019独角兽企业重金招聘Python工程师标准>>> 面向对象的核心思想:“找合适的对象,做适合的事情”。 合适的对象: 1. 自己描述类,自己创建对象。 2. sun已经描述了好多常用的类,可以使用这些类创建对象。 API&#xff0…

vi/vim命令

概述 vi: Visual Interface vim: VI iMproved vim模式 有三种: 编辑模式(命令模式) 如:通过命令新增一行,删除一行,复制一行,光标移动等 输入模式 输入模式在屏幕末尾一定有这个“-- INSERT --” 末行模式 ESC&…

主mysql删除从服务不同步_MySQL主从不同步解决

由于binlog日志带多删除了几个后发现MySQL主从不同步1、由于binlog日志带多删除了几个后发现MySQL主从不同步mysql> show slave status\G;Slave_IO_Running: NoSlave_SQL_Running: Yes查看报错日志为[ERROR] Slave I/O: Got fatal error 1236 from master when reading data…

机器学习(一)梯度下降算法的实现及过程分析

机器学习(一)梯度下降算法 因为算法最好能应用到实际问题中才会让读者感到它的真实的用处,因此首先我来描述一个实际问题(梯度下降算法用以帮助解决该问题):给定一个指定的数据集,比如由若干某一…

quick time不可用_那些校园中“不可言说”的鄙视链

原标题:那些校园中“不可言说”的鄙视链俗话说,有人的地方就有江湖,有江湖的地方总有人喜欢论论剑,分个高低,更何况是聚集了五湖四海人群的大学呢!今天小U总结出了一篇高校鄙视链大全,快来看看符…

select怎么设置默认值_20200817:详细说下数据倾斜怎么解决?

福哥答案2020-08-17:数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。很可能有几周甚至几月都要头疼于数据倾斜导致的各类诡异的问题。数据倾斜是指:…

数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...

移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响…

vs 启动调用的目标发生异常_协程中的取消和异常 | 取消操作详解

在日常的开发中,我们都知道应该避免不必要的任务处理来节省设备的内存空间和电量的使用——这一原则在协程中同样适用。您需要控制好协程的生命周期,在不需要使用的时候将它取消,这也是结构化并发所倡导的,继续阅读本文来了解有关…

pytorch 图像分割的交并比_Segmentation101系列-最简单的卷积网络语义分割(1)-PASCAL VOC图像分割...

作者:陈洪瀚 /洪瀚笔记知乎专栏摘要:介绍了使用PyTorch和torchvision加载训练好的全卷积网络FCN或DeepLab模型,并对PASCAL VOC图像进行分割并显示结果。网址:github代码链接, 码云代码链接陈洪瀚​www.zhihu.com一. 准备实验数据下…

系统目录结构 ls命令 文件类型 alias命令

2019独角兽企业重金招聘Python工程师标准>>> 2.1/2.2 系统目录结构 /bin:bin是Binary的缩写,该目录下存放的是最常用的命令。 /boot:该目录下存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 …

运维老鸟教你安装centos6.5如何选择安装包

原文:http://oldboy.blog.51cto.com/2561410/1564620 ------------------------------------------------------------------------------ 近来发现越来越多的运维小伙伴们都有最小化安装系统的洁癖,因此,找老男孩来咨询,这个“洁癖”好习惯…

服务器centos怎么部署_我什么都不会,怎么拥有自己的个人博客呢

博客每个人都想拥有一个属于自己的博客,可以分享自己的心得、技术等,可以很好地展示自己的作品,但是自己又什么都不会怎么才能拥有自己的个人博客呢?一、搭建个人博客需要什么呢(1)购买服务器,个人博客可以购买香港服务…

修改yum的镜像服务器为阿里云

1、进入阿里云镜像网站 http://mirrors.aliyun.com/ 2、选择centos---help 3、安装help里的步骤进行操作 1、备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ CentOS 5 wget -O /e…

java instanceof 继承_Java中的instanceof关键字

Java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。也就是说:使用…