码迷,mamicode.com
首页 > 其他好文 > 详细

润乾集算报表优化应用结构之数据分库存储

时间:2015-03-06 17:20:25      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:报表应用系统   结构优化   多数据库分别存储   

  报表项目中,可能会出现报表源数据来自于不同数据库的情况。这是因为同一张报表可能会从多个业务系统取数据。例如:员工信息从人力资源系统中取出,销售数据从销售系统中取出。还有一种可能是,同一应用系统的数据库负载太大,不得已分成多个数据库的情况。例如:销售系统数据分成当前库和历史库。

报表工具需要连接的可能是同样类型的数据库,比如都是oracle或者db2;也可能是不同类型的数据库。

报表应用中,数据分库存储的解决办法有:1、建设专门的数据仓库;2、利用跨库访问的技术。

专门数据仓库的建设和管理比较复杂。如果数据量很大效率会很低,而且要不断的ETL去各个应用系统同步数据。而且数据仓库利用的也是传统数据库的技术,如果负载较大的时候,也面临分库的问题。数据仓库方式结构示意图如下:

技术分享

如果用跨库访问的技术,例如Oracle的透明网关、DB2的联合查询等,也有不少局限。比较共性的问题是:1、配置起来比较麻烦,而且往往需要数据库写权限。2、要为跨库的表配置别名。3、不同类型的数据库数据类型不一致的情况,比较难处理。4sql语句受到限制,比较难实现复杂的计算。这种方式的结构示意图如下:

技术分享

   这种情况可以考虑使用润乾集算报表,其内置的集算引擎可以连接多个数据库,取数之后统一进行数据计算,能够较好的解决报表数据来自于不同数据库的问题。集算报表解决分库存储问题的结构示意图如下:

技术分享

这里,通过“销售人员销售报表”,看一下集算报表解决数据分库存储问题的过程。报表如下图:

技术分享

报表中的销售订单数据来自于销售系统的db2数据库,员工信息来自于人力资源系统的db2数据库。使用润乾集算报表开发这张报表的过程如下:

首先在集算报表和集算器中分别配置两个数据源,销售系统数据库“db2sales”,人力资源数据库“db2HR”。

第二,在集算器中定义网格参数state,并编写计算脚本:


A
1>salesdb=connect("db2sales")
2>hrdb=connect("db2HR")
3=salesdb.query("select* from sales")
4=hrdb.query("select* from employee")
5=A3.run(SELLERID=A4.select@1(EID:A3.SELLERID))
6=A5.select(SELLERID.STATE==state)
7=A6.new(ORDERID,CLIENT,SELLERID.NAME:SELLERNAME,AMOUNT,ORDERDATE)
8>salesdb.close()
9>hrdb.close()
10result A7

    A1:连接预先配置好的db2sales数据源。

    A2:连接预先配置好的db2HR数据源。

    A3A4:分别从两个数据源中读取sales序表和employee序表。

    A5:使用集算器的对象引用机制,将sales序表和employee序表通过sellerid=eid关联。

    A6:按照参数state="California"过滤序表。

    A7:生成一个新的序表,得到需要的字段。

    A89:关闭数据库连接。

    A10:返回给集算报表。

第三,在报表设计器中定义参数argstate,配置集算数据集:


技术分享

第四,设计报表如下:

技术分享

输入参数计算后,即可得到前面希望的报表。报表上部的查询按钮是集算报表提供的“参数模板”功能,具体做法参见教程,这里不再赘述。


本文出自 “高性能报表数据计算” 博客,请务必保留此出处http://report5.blog.51cto.com/8028595/1617920

润乾集算报表优化应用结构之数据分库存储

标签:报表应用系统   结构优化   多数据库分别存储   

原文地址:http://report5.blog.51cto.com/8028595/1617920

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!