信息化建设这么多年,大部分用户已经建立起了基本的企业信息系统,但由于发展阶段、技术限制以及成本考虑,会发现普遍存在多种异构数据库并存且规模各异的情况,如果有一种新的报表工具,能方便地访问任何数据库系统,并具有对多个分布、异构数据源进行分析、加工和处理的能力,对用户来说,具有相当高的实用价值。
报表工具的异构性
----作为异构报表工具必须具备以下功能:
----(1) 能够查询任何数据源的数据
----报表工具应该允许用户访问各种数据源。由系统管理员负责管理数据表、文件,对用户屏蔽数据的物理分布,用户可以在一个查询语句访问各种数据源。这种方式的问题在于报表的效率低,语法分析、数据处理、进程调度、多个数据源读取同步等。
----(2) 能够在数据源之间进行连接
----报表工具除了要达到对异构数据库的数据读取、连接外,还必须提供一种机制进行数据源之间的连接。允许在一个查询语句中定义抽象的参数,这个参数代表另外一个查询结果的某一列,被引用的查询必须定义在引用查询的前面。通过这种参数的传递,达到数据源之间相互连接的目的。
----(3) 能保证异构数据的安全性
----报表工具要达到对异构数据库的数据读取的安全,防止数据的越权操作,能保证对每个数据源的操作都是在该用户规定的权限内完成。
设计与实现
----异构综合报表工具的体系结构可以用下图来表示:
----整个报表工具分为两个部分,一部分是框架管理工具,一部分是报表解释器,这两者的接口正是报表框架(库),如图所示。框架管理工具的任务是生成和维护报表框架,而报表解释器的任务是根据报表框架的定义生成一张具体的报表。报表框架是用来描述某一类报表的专有语言的脚本。这种语言主要是SQL语言和表达式语言的综合。报表框架可以看做是多个数据源中的多个表的逻辑视图,但是它的定义语言比视图定义语言要丰富得多。
----从图中还可以看出工具对异构数据源的集成结构。报表框架中可以定义若干个不同数据源的数据来源,报表框架的存储和历史数据的管理都是以主数据库为基础的。换句话说,工具可以分析和加工若干个数据源的数据,然后存储在主数据库中,从这个角度来看,报表框架充当了工具的数据字典或成员数据的功能。
----多数据源的管理与连接缓冲
----工具涉及到多个数据源的管理,对于每一个数据源的管理至少必须包含用户名和口令。用户在定义一个查询语句时,应该只需要指定一个数据源名称即可。工具应该有一种在本地用户环境下的策略,相应的远程数据源有一个用户环境,而不用在每一次查询语句执行时都动态连接。这个问题的核心是用户名的问题,有两种解决办法,一种是远程数据源的管理源在其系统中设置一个远程服务代理用户,并且指定主数据源的若干用户可以映射上去,即这些用户是可信任的,一旦他们在主数据库中登录,则当他们用主数据库的用户名向远程请求时,自动转换成对应的代理名,不用再给出密码信息。这种策略首先要求远程数据库的配合,牺牲了自治性,其次也不×××全。另一种策略是给每一个用户在每一个数据库中指定一个用户名(即代理名),用户名和数据源名确定时,一定可以找到一个唯一的远程用户名。在这种策略下,如果允许本地的若干用户对应某一远程数据库的同一代理,则密码管理就会出现冲突,如果不允许,则用户映射会付出很大的开销。让系统管理员统一进行安全管理可能是一个较好的策略。
----多个远程数据库查询的另一个问题是连接管理问题。工具不能在每次SQL查询时都动态连接,必须采用缓冲技术来提高效率。我们认为采用连接池的技术是较好的。在远程数据库第一次执行时,则进行连接,某一查询结束后,并不断开连接,而是将其插入到连接队列的尾部,在每次执行查询时,首先搜索该队列,如果没有找到数据源名称则认为是第一次执行该数据源的操作。在插入到该队列时,如果队列长度超过某一系统定义的长度,则将队列的首元素摘除,将对应的连接断开。这种淘汰算法可以保证系统资源和性能的折衷。
http://web.tongji.edu.cn/~yangdy/database/paper5.htm
转载于:https://blog.51cto.com/report5/1385339