用集算器实现跨数据库关联报表

标签: 数据库 关联 | 发表时间:2014-08-07 12:17 | 作者:顺其自然EVO
出处:http://www.blogjava.net/qileilove/
实际应用中很多报表的数据来源于多个不同类型的 数据库,报表数据源跨数据库是报表开发中的常态。目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题。
   使用报表工具自身多源关联功能
  现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利。然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定)。这当然容易理解,报表工具主要是来做数据展现的,而对数据计算本身来说并不擅长。
  即使有的能实现,在报表中做跨库关联计算的效率也较低,远远不如数据库的性能,而且经常因为在实现过程中使用了大量隐藏行列进一步降低报表性能并加大内存占用。
  于是一般会采用下面的两种方式。
   将数据统一到一个数据库中
  将不同数据库的数据统一到一个数据库中,这种做法在各类应用中很常见,目的是使用数据库( SQL)强大的计算能力。然而,这种做法会增加额外的成本开销,将多个数据库中的数据统一到一个数据库中势必会占用昂贵的数据库空间,并造成该数据库数据过多、管理困难、压力增大等问题,而且还可能负担额外的数据库购买成本以及管理成本。另外,完成ETL迁移数据也是一份不小的 工作量,对实时性要求较高的报表还得用触发器方式来做ETL(一般ETL是定时的),会严重影响原数据库的性能。
   使用高级语言实现跨库关联为报表准备数据
  基于上面提到两种方式中存在的问题,有些用户使用高级语言(Java等)编程完成跨库运算,为报表自定义数据源。这种做法的优点是灵活,理论上任何运算通过程序都能完成;缺点是太难写。很多像Java这样的高级语言缺乏对集合运算的有效支持,没有相应的类库,导致完成个简单的group也要写很多(循环)代码,更不用说关联以后还要再进行分组汇总等其他运算了。
  这种情况下,使用集算器来实现跨库关联报表就是个不错的选择。
   集算器如何实现跨库关联报表?
  我们通过一个例子来看集算器是如何快速实现跨库关联报表的。
   业务描述
  企业员工每月应发工资跟员工的基本工资、考勤以及绩效有关,考勤信息来源于人力部门的考勤系统(hsql数据库),基本工资和绩效信息则存储在财务系统(mysql数据库)中。需要将这两类信息合起来计算员工的工资。
   实现步骤
   编写脚本(crossDB.dfx)完成跨库关联计算,为报表准备数据
  
  在A1、A2中通过connect分别连接hsql和mysql数据源
  在A3、A4、A5中通过query语句分别从两个数据库中取出用到的数据,此时数据已全部取出,不再需要与数据库交互,在A6、A7中关闭两个数据库连接
  在A8中使用join完成三表的连接
  在A9中计算应发工资,算法为:基本工资*(1-考勤系数+绩效系数)
  最后通过A10的result生成供报表使用的结果集
  报表调用集算器脚本完成报表展现
  集算器的类包封装成标准的JDBC,允许报表工具以类存储过程的调用方式调用集算器脚本,如本例中在报表工具中像配置数据库连接一样配置起好集算器的JDBC,然后建立存储过程数据集后使用 call crossDB()即可完成调用。
  这里以BIRT为例说明调用过程:
  1、 复制集算器JDBC驱动包到相应目录
  2、 配置报表数据源
  
  3、 设置DataSet,调用集算器脚本
  
  简单几步完成调用,BIRT即可使用集算器的计算结果直接展现输出。
  结语
  通过这个例子可以看到,集算器擅长完成跨库计算,并将计算后的结果以标准ResultSet方式返回为报表提供数据源,而报表采用类存储过程调用的方式调用集算器脚本非常简单。
  还有一个重点需要关注,就是价格。集算器是个需要付费的商业软件,好在只针对大数据的集群才收费,用作报表数据源功能是免费的,不需要增加成本就能轻松解决多数据库关联报表问题。


顺其自然EVO 2014-08-07 12:17 发表评论

相关 [数据库 关联] 推荐:

用集算器实现跨数据库关联报表

- - BlogJava-qileilove
实际应用中很多报表的数据来源于多个不同类型的. 数据库,报表数据源跨数据库是报表开发中的常态. 目前实现这类跨库关联报表的方式有多种,但都会存在这样那样的问题.    使用报表工具自身多源关联功能.   现在大多数主流报表工具都支持多数据源关联,这在某些方面确实为报表用户带来了便利. 然而我们也经常会遇到通过报表自身的多源关联功能很难实现一些跨库关联的报表(由于数据结构和业务本身决定).

纯真ip数据库与全国行政区域规划关联

- - Java - 编程语言 - ITeye博客
想实现一个功能:根据用户在公网上的ip地址对应到该用户所在的行政区划,精确到县. 这个功能能不能实现的关键还是在能不能找到一个数据较为完善的ip地址库. 在网上找了一下,还是觉得纯真ip数据库好用. 1 下载纯真ip数据库,然后解压成文件导入自己建的数据库(见附件). 2 下载全国省市县行政规划(见附件).

数据库sharding

- - 数据库 - ITeye博客
当团队决定自行实现sharding的时候,DAO层可能是嵌入sharding逻辑的首选位置,因为在这个层面上,每一个DAO的方法都明确地知道需要访问的数据表以及查询参数,借助这些信息可以直接定位到目标shard上,而不必像框架那样需要对SQL进行解析然后再依据配置的规则进行路由. 另一个优势是不会受ORM框架的制约.

数据库索引

- - CSDN博客推荐文章
索引是由用户创建的、能够被修改和删除的、实际存储于数据库中的物理存在;创建索引的目的是使用户能够从整体内容直接查找到某个特定部分的内容. 一般来说,索引能够提高查询,但是会增加额外的空间消耗,并且降低删除、插入和修改速度. 1.聚集索引:表数据按照索引的顺序来存储的. 2.非聚集索引:表数据存储顺序与索引顺序无关.

数据库事务

- - 数据库 - ITeye博客
事务传播发生在类似以下情形:. 假设methodB的配置是:. 如果methodA在事务里,那么methodB也在这个事务中运行. 如果methodA不在事务里,那么methodB重新建立一个事务运行. 如果methodA在事务里,那么methodB也在这个事务中运行. 如果methodA不在是事务里,那么methodB在非事务中运行.

数据库优化

- - 数据库 - ITeye博客
程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: . a) SQL的使用规范: .   i.尽量避免大事务操作,慎用holdlock子句,提高系统并发能力.   ii.尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接.   iii.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作.

数据库调优

- - 数据库 - ITeye博客
1、1、调整数据结构的设计. 这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等. 这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构.

MySQL数据库的修复

- Xin - 博客园-首页原创精华区
找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:. 然后myisamchk 工具会帮助你恢复数据表的索引. 好象也不用重新启动mysql,问题就解决了. 当你试图修复一个被破坏的表的问题时,有三种修复类型. 如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的.

Oracle 发布 NoSQL 数据库

- 冷月 - 博客园新闻频道
  Oracle 作为全球最大的关系型数据库提供商,在其产品链条中,也加入了 NoSQL 数据库这一环,而且这个新的数据库名字很霸气,就叫 NoSQL Database,想起了当年新浪微博更换 weibo.com 域名之时的一个笑话:. 原来有三家人做面包,张三家的面包叫三张牌面包,李四家的牌子叫李四牌面包,王五家出品的是王五牌面包,而突然有一天,张三家的面包改名了,叫面包牌面包.