发展背景
我们知道,对于BI(Business Intelligence商业智能的缩写,下同)系统而言,前端访问后台系统的整体响应时间是影响业务用户实际体验的重要指标。如果响应时间太长(一般而言超过10秒),即使前端的图形界面再眩再好看,也会严重打击最终用户对BI系统的使用兴趣。因此,BI系统的客户体验差往往是我们很多分析系统项目实施失败的重要原因之一。
为了应对这一挑战,IBM Cognos BI从版本 10.1.0 中开始提供了基于Java增强查询执行模式(Dynamic Query Mode,简称DQM,也就是动态查询模式),同时仍保留对主要数据源的本地访问权限。通过改进后的查询执行,动态查询模式提供了主要的查询优化,可处理查询复杂性和数据量。它还提供了增强的查询功能(如内存缓存),该功能可在保留用户安全权限的同时针对查询计划。
IBM Cognos 动态查询模式简介
Dynamic Query Mode是IBM Cognos BI一种增强的基于Java的查询模式,提供以下主要功能:
- 查询优化,通过改进的查询执行语言解决查询复杂性、数据量和及时性期望等相关问题。
- 通过本地和远程处理以及更佳 MDX 生成的智能结合,极大地改进复杂的 OLAP 查询。
- 安全感知的缓存。
- 利用 64 位处理的新数据接口。
- 易于维护和查询可视化。
查询优化
查询的优化通过严格查询规划规则的高级应用实现。这些规划规则纳入了下一代规划方法,该方法更精简且能够提高质量和执行查询的速度。查询规划流程本质上也经过优化,以更好地利用元数据和表达式缓存,包括提供更高应用程序吞吐量的规划缓存。
通过平衡的本地处理工具实现性能提升
Dynamic Query Mode制定智能的、基于规则和系统负载的决策,其中部分查询应当在应用程序服务器本地执行,而不是在数据库服务器中远程执行。这确保用户拥最高级的功能,不管基础数据源是否支持商务智能报表的意图。此外,Dynamic Query Mode包含一个细粒度元数据和单元数据缓存(即一个trickle fed)以及一个比以前更高的缓存命中率。另外,被发送到远程数据源的查询由执行层根据缓存内容和高级空值抑制逻辑进行进一步优化。
安全感知的缓存
当连接到安全的元数据源时,Dynamic QueryMode下提供的缓存逻辑能够在每个用户访问数据源时确定安全的元数据源。然后该信息用于优化内存使用率和内部表示该用户的数据源元数据的安全视图。也可以设置安全性,这样就可以共享整个 OLAP 维度,提供缓存重用和性能效益。
利用 64 位处理的新数据接口
Dynamic Query Mode 是一个完全支持 64 位的数据访问环境。它允许使用 64 位数据源驱动程序,且可以利用 64 位满足查询处理、元数据缓存和数据缓存的空间。
易于维护和查询可视化
Query Visualization 能够让系统管理员分析 Dynamic QueryMode生成的查询,并可视化地看到其处理方式。这些可视化包括来自查询执行的基于成本的信息。该信息允许快速识别模型和查询优化,应用该优化的目的是达到更好的性能。
技术架构解析
传统的兼容查询模式的架构图如下所示:
如上图所示,查询模式架构包括多个层。当从QueryStudio、Report Studio、AnalysisStudio、Cognos Workspace、CognosWorkspace Advanced之一、Cognos Viewer或 IBM Cognos Software Development Kit (SDK) 等客户端模块收到报表请求时,该请求首先会由 Query Planning 层处理。
Query Planning 层的上部是 Query Framework (QFW)。QFW 会检查报表请求并确定它是否包含一个或多个请求,且应当在这里处理查询。针对 SAPBW,比如 Oracle Essbase 和 IBMCubing Services 类型的数据源的 OLAP 式查询,会转到 OLAP 查询规划器。针对 IBM DB2、Oracle、Teradata 类数据源的关系型查询会转到关系型查询规划器。Dimensionally Modeled Relational (DMR) 式的查询会转到
DMR 查询规划器。
每个查询规划器会生成适当的查询语言,并将请求发送到其各自的查询执行层。对于 OLAP,查询规划器生成一个 MDX (MultidimensionalExpressions) 查询并将其发送到多维数据服务(MDDS);对于关系型查询,它生成 SQL 并将其发送到通用数据访问(UDA)模块。对于 DMR,首先处理一个多维数据集构建请求,这会创建和加载一个临时多维数据集,然后生成一个新 OLAP 式的查询,发送该查询并针对该临时多维数据集处理此查询。架构的最低层表示IBM Cognos BI 支持的单个数据源类型和数据源。通过
MDDS 或 UDA 处理的查询会被转化成一种数据源理解的查询语言惯用语,然后使用一个直接专用接口或通过 ODBC 或 XMLA 等通用接口发送到数据源。
最新的动态查询模式的架构图如下所示:
从上图看,虽然支持非常类似的请求流,动态查询模式的架构大大不同于兼容查询模式。顶部的客户端层显示一个系统管理客户端,它与查询模式交互来显示指标和统计并更改配置设置,比如运行查询日志。
规划层被整合到一个名为 TransformationLayer 的层中。转换层本身不实现任何查询规划逻辑,它仅仅提供一个用于查询转换的执行环境,这些转换存放在名为转换库的独立库中。这是为了将规划逻辑与规划层分离开来。转换库为所有受支持的 OLAP 查询提供查询规划逻辑,且在兼容查询模式下支持查询框架提供的所有功能。
在兼容查询模式下Execution Layer 提供类似的查询执行功能给 MDDS 和 UDA,但是也是整合到单一模式中。它可以独立于查询或目标数据源的类型执行任何查询请求,且能够在单一环境中执行 SQL、MDX 和 XML。这部分地通过混合结果集(HResult)格式实现,该格式允许内存中的单个查询结果同时以 OLAP 型(带有轴、维度和单元)和关系型(表格,行和列)呈现。通过 HResult,执行模式可以在单个运行树中结合 MDX 和 XML,实现更高的灵活性和查询性能。
动态查询模式支持的数据源
您可以将动态查询方式与数个 OLAP 数据源搭配使用,包括以下列表中的数据源:
- IBM Cognos TM1
- SAP Business InformationWarehouse (SAP BW)
- Oracle Essbase
- Microsoft SQL Server AnalysisServices
您也可以将动态查询方式与数个关系数据源搭配使用,包括以下列表中的数据源:
- IBM DB2
- IBM DB2 for z/OS
- IBM Informix
- IBM Netezza
- Oracle
- Microsoft SQL Server
- SAP ECC
- Siebel
- Teradata
下面以DB2为例,我们来看看如果使用动态查询模式实现与数据源的连接。
1. 在BI服务器上需要安装 IBM DB2 客户端软件
2. 由于DQM需要通过jdbc访问数据源,因此需要将jdbc驱动程序复制到cognos的相应目录。
a) 在要用于连接的数据库的 IBM DB2 安装目录内,找到 ..\SQLIB\JAVA 目录。
b) 在该目录内,找到并复制 db2jcc4.jar 和 db2jcc_license_cu.jar 文件。
c) 在 IBM Cognos安装目录内,找到 ..\webapps\p2pd\WEB-INF\lib 目录。
d) 将 db2jcc4.jar 和 db2jcc_licencse_cu.jar 文件粘贴到该目录中。
e) 为了让 IBM Cognos接受 IBM DB2 驱动程序,需要停止和启动 IBM Cognos服务。
3. 创建数据源。
a) 使用浏览器打开Cognos主页IBM Cognos Connection。
b) 点击右上角“启动”链接,并在弹出菜单里选择IBMCognos Administration。
c) 点击“配置”标签页,选择“数据源连接”,并点击“新建数据源”的按钮。如下图所示。
d) 在输入数据源的名字后,点击“下一步”,并在类型列表里选择“IBM DB2”。注意这里一定要把 “配置JDBC连接”的复选框选中。如下图所示:
e) 点击“下一步”后,输入DB2数据库名称和登录用户名密码后,兼容查询模式测试通过。
f) 然后进入JDBC的配置界面,将相关信息输入后,动态查询模式测试通过。
这样,我们就可以使用动态查询模式来实现Cognos的报表分析与DB2数据库的连接了。
Dynamic Query Mode 特有的管理功能
随着 Dynamic Query Mode 的引入,IBM Cognos Administration 中提供新的功能来配置、调优和诊断新查询服务。以下部分将识别新 UI 元素并简要描述每个功能。
DQM参数设置
在 IBM CognosAdministration 中,可在“系统”下的“计分卡”选项卡上看到 QueryService服务,在“设置 - QueryService”窗口里可以到“高级设置”、“环境”、“日志”、“调整”设置。如下图所示:
点击右上角的“设置属性”按钮,可以进行QueryService中DQM相关参数的调整。如下图所示:
DQM使用维护
在IBM Cognos Administration中,可在“配置”下的“内容管理”菜单选项的界面内容看到“新建查询服务管理任务”的按钮。该功能中可用的任务是能够针对不同的数据源进行Dynamic Query缓存的维护。如下图所示:
例如:对于 DMR(Dimensionally Modeled Relational)数据源,可以定义的任务有清理 Dynamic Query 缓存(使用过时的数据避免)或将缓存状态写到(以便进行缓存使用分析)IBM Cognos服务器上的一个文件上。
而对于10.2.0版本之后新发布的Dynamic Cubes,则提供更多的Dynamic Query维护功能项,如下图所示:
结束语
如需了解更多关于cognos的功能特性,请点击以下链接,发现惊喜!
http://bigdata.evget.com/product/200.html