将数据放至数据库外或文件系统来提高报表系统性能
来源:互联网 发布:q扫雷软件 编辑:程序博客网 时间:2024/06/06 01:53
在报表应用中,针对历史数据查询的报表占比很大,这类报表的特点是:第一,数据变化小,查询的历史数据几乎不会发生变化;第二,数据量大,数据量随时间跨度增大而不断增加。如果数据始终存放在数据库中,由于大多数数据库的JDBC性能都很低下(JDBC取数过程要做数据对象转换,比从文件中读取数据会慢一个数量级),这时涉及数据量较大或在并发较多的时候,报表的性能会急剧下降。如果能将这些变化不大的历史数据移出数据库,采用文件系统存储,将可能获得比数据库高得多的IO性能,从而提高报表的整体性能。
但是,报表并不是直接使用原始数据进行呈现,还需要做进一步的运算。而文件本身没有计算能力,这种情况数据量一般也较大,不可能靠报表呈现端的计算能力实现。
集算报表在内置集算引擎的帮助下可以基于库外文件做计算,支持的文件类型包括:文本、Excel、JSON格式文件等,还支持效率更高的二进制文件。将较大数据量的历史数据从数据库中剥离,这样除了可以满足历史查询类报表的性能需求外,还可以借助集算报表对混合数据源(文件+数据库)的支持,进行大数据量的实时数据查询,从文件系统中读取往期较大的历史数据,从数据库中读取当期较小的实时数据进行混合计算。这样的做法可以避免数据库的IO瓶颈,快速提升报表性能,增大数据查询范围。同时,这也是优化数据库的过程,将历史数据移出,数据库可以专注于保证业务系统数据的一致性,而不是耗费资源在大量的历史查询任务上。
具体使用上,当用户将数据保存到文件系统中后,即可使用集算报表进行数据查询和计算,集算报表内置的集算引擎可以基于文件(和数据库)进行数据计算。使用时,可以参考如下步骤(举例说明):
1、将数据库中历史数据导出到文件
用户可以自行选择适当的方法将历史数据导出到文件,当然这个过程也可以使用集算器来做,可以将数据导出到文本,如果希望更高的性能,集算报表还可以支持更高效的二进制文件格式(比文本能快出2-5倍)。在集算器(用免费版本即可)中执行类似如下代码可将文本文件转换成二进制格式:
file("E:/订单明细.b").export@b(file(“E:/订单明细.txt”.cursor())
2、使用集算报表内置的集算引擎读取数据文件
当数据外置后,采用集算报表就如同使用文件数据源做报表了,比如根据订单明细数据按客户统计订单数量和订单金额,由于原始订单数据非常大,所以读入文件时采用流式(文件游标)的方式逐步读入。
脚本中使用的参数及其含义如下:
脚本:
A1:通过文件游标采用流式处理的方式读入大源文本数据;
A2:按照指定的多个维度进行数据过滤,结果仍然是游标;
A3:根据选出的结果,按照客户ID汇总订单数量和订单金额;
A4:为报表返回结果集。
如前面提到的,集算报表既可以针对单独的文件(历史数据)进行查询计算,还可以进行文件+数据库混合运算,进行大数据量实时查询。
A1-A3:与上一个脚本一样,汇总历史数据;
A5:根据指定参数执行sql,汇总当期数据;
A6:将两部分汇总数据合并(纵向拼接);
A7:根据合并后的历史和当期汇总数据再次汇总,得到各客户的订单数量和订单金额。
3、在集算报表中调用集算脚本,编辑报表表达式完成报表制作
通过以上的过程可以清晰的看到,集算报表可以很好解决针对往期历史(+当期)数据进行查询时往往存在性能不高的问题,通过数据外置提升报表性能。
- 将数据放至数据库外或文件系统来提高报表系统性能
- 将数据放至数据库外或文件系统来提高报表系统性能
- 数据库设计来提高系统性能
- 提高ORACLE数据库系统import性能
- 提高系统性能之数据库设计
- 提高系统性能之数据库设计
- 【转】提高系统性能之数据库设计
- 如何提高系统性能之数据库设计
- 提高web性能之--将CSS和JS放到外部文件中引用,CSS放头,JS放尾
- 使用先进工具将粒子系统性能提高 3 倍
- 制作报表或数据统计之ORACLE数据库函数
- 将EXECL数据导进ALV报表并存进数据库
- 【使用数据加密来提高xp系统安全性】
- ArcSDE性能优化-Oracle将数据库对象Pin到共享池中来提高数据库性能
- ArcSDE性能优化-Oracle将数据库对象Pin到共享池中来提高数据库性能
- 提高intelliFlow工作流系统性能的数据库部署方式
- db2 数据库的历史数据分离,提高业务系统的性能
- 数据归档方案提高数据库性能增强法规遵从
- 日历--给input赋值
- php通过ssh2扩展控制linux,模拟阿里云web控制台
- Oracle资料整理
- 【Java并发编程】之十七:深入Java内存模型—内存操作规则总结 (r)
- 非常好用的List交集、并集
- 将数据放至数据库外或文件系统来提高报表系统性能
- opengl es三角形例子
- Java学习片段
- 【Java并发编程】之十八:第五篇中volatile意外问题的正确分析解答(含代码)(r)
- C++之string
- 跨域资源共享 CORS 详解
- 经典排序算法总结
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--修改BUG防止坦克重叠(六)
- Linux进程管理概述