mysql数据库分表后 报表的存储过程怎调用

一、使用数据库中间件

使用像 Mycat 之类的数据库中间件,报表里的简单 SQL 基本都能延续使用(像 Mycat 支持 SQL92 标准),但对复杂 SQL(嵌套查询和多表 JOIN)就比较麻烦,要考虑全局表等设置。而报表业务里复杂查询会很多,有些还伴随过程和逻辑判断,这时用数据库中间件就有点吃力了。

这里列一下报表场景下使用数据库中间件的缺点:
< 缺点 >

1. 复杂计算支持不足,且无存储过程替代方案;
2. 多样性数据源支持不足,如报表数据来源还有文件或 NoSQL 时;
3. 高耦合,移植性差,仍然存在数据库中间表造成数据库和报表高耦合的问题

参考资料:Mycat 官网

但是用的是shardingSphere分表就比较悲剧了

二、使用 JAVA 硬编码

为了弥补数据库中间件的缺点,还可以在应用端使用 JAVA 硬编码为报表准备数据。这样原来的复杂 SQL 和存储过程就可以通过编码实现,而多样性数据源也不再是问题。但硬编码的缺点也很明显:

1. 太难了。用 JAVA 实现报表数据准备,完成各类集合运算对专业程序员都已经很困难(脑补一下写个 group by 的代码量),更别说让报表开发人员来做了;
2. 容易造成报表模块和应用的高耦合。报表的 JAVA 代码和应用代码一起部署,报表模块和应用其他模块紧耦合在一起,没法单独维护;
3. 没法热切换。报表修改以后,要重启整个应用才能生效,而报表却是经常要改…

三、使用支持分库查询的报表工具

有的报表工具直接支持分库查询,像 分库后的报表怎么做 介绍的,主要借助了工具本身提供的脚本计算能力,这样简单 SQL 可以延用,对于复杂计算(复杂 SQL 和存储过程)则通过分步的过程计算来实现,对人员要求也不高。
另外,对多样性数据源的支持也解决了异构源之间的关联计算问题,同时解释执行的脚本支持热切换。这样,整个报表模块就可以单独维护,报表修改也不会影响整个应用(对报表应用解耦感兴趣可以看一下 如何降低报表应用的耦合度 )。当然使用这种方式也有缺点:

1. 适应新的工具。引入新的报表工具势必会带来一定的学习成本。

分库的确会让报表开发和维护环境变得复杂,选用何种方式应对,要充分考虑自身业务和技术资源的实际情况。使用时可以“一二”组合,也可以“一三”组合,或者直接用“三”。

1,比如帆软报表就支持关联数据集查询, 缺点,数据查询速度较慢

2,帆软报表支持动态参数调用,把从哪张数据查变成一个条件, 优点树查询快,缺点,不支持分区合并查询 

四,简绍下帆软报表动态参数调用的方法

1.按年分区的数据表
    数据查询可改为  select *  from user_${year} where    create_date  between ${beginDate}  and ${endDate}   

2,把参数year设成可用而不可见

3,为提交按钮设置点击事件校验不可跨年并为参数 year赋值

var beginDate = this.options.form.getWidgetByName("beginDate").getValue();
console.log(beginDate);
 
var endDate = this.options.form.getWidgetByName("endDate").getValue();
console.log(endDate);

var dateBArr = beginDate.split("-");
var yearB = parseInt(dateBArr[0]);

var dateEArr  =endDate.split("-");
var yearE = parseInt(dateEArr[0]);
console.log("====");
console.log(yearB);
console.log(yearE);

if(yearB==yearE){
	var year = this.options.form.getWidgetByName("year");
	year.setValue(yearE);
 
}else{
	alert("不能跨年查询");
	return false;
}

4,报表主题设计省虑,查看结果

4.1数据库查看

4.2查看2021年数据 

4.2查看2020年数据 

 4.3验证是否可跨年

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值