Cube模型刷新调研方案.docx
- 文档编号:10864684
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:14
- 大小:233.46KB
Cube模型刷新调研方案.docx
《Cube模型刷新调研方案.docx》由会员分享,可在线阅读,更多相关《Cube模型刷新调研方案.docx(14页珍藏版)》请在冰豆网上搜索。
Cube模型刷新调研方案
Cube模型刷新调研方案
1.Cube模型刷新
1.1全量更新和增量更新
1.1.1全量更新
Tip1:
当刷新立方体时间不是很长,要刷新的立方体的数量不是很多的时候,这时我们就可以考虑用Cube模型的全量更新。
Tip2:
目前IFAR项目组用的全部是全量更新,据他们的经验所得,大概一个刷出来的Cube模型700M需要1小时20分钟左右.
1.1.2增量更新
当刷新立方体时间过长的时候,增量更新是缩短刷新时间的好办法。
增量更新的时候,只会对立方体加载新增加的数据,以前的数据不会进行更改,这样会缩短读取数据的时间;另外在刷新立方体的时候,也会缩短刷新时间。
目前,增量更新的方式有两种:
普通增量更新(立方体属性/processing/TheCubeisincrementallyupdated)(适用目前市场上的所有版本)
Tip1:
在立方体的结构(包括指标,维度,层次等)发生变化,必须重新全部加载数据
Tip2:
推荐您定期重建立方体。
第一次建立立方体时,自动分区(Auto-Partitioning)功能可以将维度和层分割为多个分区层(partitioninglevel)。
在此之后所有新的类别将被加到“0”分区层上。
如果随时间的变化增加了很多类别,PowerCube用户最终会遇到性能问题。
通常建议7次增量更新之后,需要重新全量加载一次立方体
按时间分区更新(新增立方体/CubeGroup/EnableTime-basedPartitioning)(7.0以后版本支持)
按时间分区更新技术是基于普通增量更新之上的,使用按时间分区会生成一个虚拟立方体(该立方体并不保存数据,只保存维度信息),一个定义文件,还有包含数据的若干子立方体。
举例说明:
有一年的数据,按月分区,这样每个月就会有一个立方体,总共是12个。
Tip1:
立方体增量更新之后,请保存模型,这样可以保证Category的完整性。
如果Category不完整,可能会存在子立方体的Category在虚拟立方体中找不到的情况,这样立方体的刷新是无法继续的。
Tip2:
子立方体默认都是增量更新的,所以和普通增量更新一样,如果某个子立方体有了多次刷新之后,也必须进行一次全量更新。
比如:
按月分区但是每天都刷新数据,当月的立方体必然会进行多次更新,这时候就必须删掉当月的立方体,重新刷新一下。
Tip3:
通常建议按月分区,按日分区的话,一年的子立方体太多,打开虚拟立方体的时候速度会比较慢,如果按季度、年分区的话,可能会有Tip2中的问题。
1.1.3根据业务分析考虑Cube模型的大小来决定是用全量更新和增量更新
Tip1:
考虑方案1:
所有数据都按一个Cube模型来存放,
好处是:
可以满足跨年,整体进行数据分析和比较。
坏处是:
由于数据量比较大,查询速度就会相应的变慢,这时就不能用全量更新了,只能用增量更新了。
综合以上分析可得,此方案只适合用增量更新,用全量更新的话,会耗很长时间,而用增量更新的话,又面临着对数据非常严格的要求。
Tip2:
考虑方案2:
按年月,来划分,到底分多少个Cube模型,比如按年分,一年一个cube模型,这样的话,我们更新的时候,只更新某一年的,这样可以全量更新,速度也相对来说,比较快,不足的地方,数据分析的时候,不能cube模型数据之间的夸年进行比较,如果需要有比较的业务时,也只能事先通过计算得到。
注:
在Uinx下单个文件的存储大小,不能超过4G。
1.1.4全量更新与增量更新执行角本和格式区别
现在要实现增量刷新就要用增量的脚本来执行而不能与全量刷新角本混为一谈。
MDL是只能进行全量刷新的,增量刷新只能用PYI,且IQD所引用的表要是增量表,即表中的数据只能包括当前要新增到Cube中的数据,否则会进行累加。
在进行增量时,一般的做法是:
首先将MDL转为PYI,同时进行一次全量刷新;以后的增量刷新对PYI执行就可以了。
还有一个问题就是,如果真的要采用增量刷新的话,就要准备两套表(一全数据表,一增量表即临时表),两套立方体模型(因为度量IDQ所取的表不同,分别对应两套不同的表)。
这对于刚刚开发完的项目存在一定的挑战性。
注:
刷CUBE之前需要KILL一进程
杀进程命令:
taskkill/f/imppesbusserver
1.2Uinx下的shell角本和多线程调用
Tip1:
在Uinx下刷新Cube模型的时候,需要在Uinx下编写shell角本,通过执行shell角本来进行有目的的刷新Cube模型。
IFAR项目组:
所用的shell角本如下:
注:
上面shell角本,能对Cube模型进行刷新,同时也能对数据进行刷新。
Tip2:
在Uinx下可以开启多线程,对多个shell角本,同时进行执行。
注:
技术难点是Uinx不太熟悉,不知道怎样去开启进程和线程去执行shell角本,怎样判断是否执行完成,如果报错了,怎样去处理,怎样用日志记录。
1.3Java程序调用shell角本基本流程图
1.3.1通过编写一段java代码,进行有规律的去调用shell角本,来刷新Cube模型。
JAVA调用shell脚本并生成证书
shell脚本如下其中Dir是存入的路径 User是一个文件名称config是一个配置文件
#!
/bin/sh
Dir=$3
User=$1
CONFIG=$2
KeyFile=$Dir/$User.key
CSRFile=$Dir/$User.csr
CRTFile=$Dir/$User.crt
CMTFile=$Dir/$User.pem
# makesureenvironmentexists
if[!
-d$Dir];then
mkdir$Dir
fi
opensslgenrsa-out$KeyFile1024
opensslreq-new-config$CONFIG-key$KeyFile-out$CSRFile-in$CMTFile
以下是调用该脚本的程序
publicclassNew_User_Cert
{
publicstaticbooleanuser_cert_create(HttpServletRequestrequest,Stringfilename)
throwsIOException
{
if(log.isDebugEnabled())
log.debug("Entering'user_cert_create ' function");
Stringpath=request.getRealPath("/"); //取得项目的路径
Stringcmd[]=newString[5];
cmd[0]="sh";
cmd[1]="."+path+"openssl/new_user_cert.sh"; //在项目中存在此文件openssl/new_user_cert.sh
cmd[2]=filename;//给文件取名
cmd[3]=path+"openssl/user/config/"+filename+".config"; //配置文件中的信息
cmd[4]=path+"openssl/user"; //生成新文件存在此目录中
StringBufferbuf=newStringBuffer();
for(inti=0;i buf.append(cmd[i]+""); } request.setAttribute("new",buf.toString()); try{ Runtimerun=Runtime.getRuntime(); Processp=run.exec(cmd); BufferedInputStreamin=newBufferedInputStream(p.getInputStream()); BufferedInputStreamerr=newBufferedInputStream(p.getErrorStream()); BufferedReaderinBr=newBufferedReader(newInputStreamReader(in)); BufferedReadererrBr=newBufferedReader(newInputStreamReader(err)); StringlineStr; while((lineStr=errBr.readLine())! =null) System.out.println(lineStr); while((lineStr=inBr.readLine())! =null) System.out.println(lineStr); try{ if(p.waitFor()! =0){ if(p.exitValue()==1){ returnfalse; //老是在这儿出现非法退出 } returntrue; } }catch(InterruptedExceptione){ e.printStackTrace(); returnfalse; } }catch(Exceptione){ e.printStackTrace(); returnfalse; } returntrue; } } 感觉好像路径出错的.可是又不知道怎么调.搞的老半天的 环境是在solaris小型服务器下appfuse开发tomcat作为容器 Runtime.getRuntime.exec("/opt/usr/..../aaa.sh").waitFor() 用绝对路径 另外,waitFor是在有多个shell命令要运行,并且可能会互相影响时要保证命令执行顺序的方法,例如先用shell写一个文件,然后用shell删除这个文件,这个时候就要加上waitFor 1.3.2刷新Cube模型时的日志记录 服务器日志文件包括有关IBMCognos组件运行时发生的事件的信息。 可以使用cogserver.log 文件跟踪活动和排除故障问题。 默认情况下,IBMCognos日志服务器被配置为将所有日志消息均发送到位于c8_location/logs目录中的cogserver.log文件。 要针对IBMCognosConfiguration中的错误消息进行故障排除,可以创建一个活动日志。 1.4Transformer生成的模型存储格式.mdl和.pyj他们的区别是什么? ? 1)pyi是二进制的,mdl是ASCII码的,这是为了移植。 比如说我在nt平台下做得模型,要移植到unix上,pyi无法移植,mdl可以。 2)利用mdl格式可以把以前版本的文件用现在的版本打开,而新版本则不可以打开pyi格式的老文件. 3)模型比较大的时候,PYI访问速度快,特别在编写Transformer宏的时候,比较明显 PYI可以保留数据库用户名和密码,所以通常建议,在项目中使用PYI而不是MDL,并且定期将PYI保存为MDL以防止PYI文件失效。 4)pyi格式是二进制,性能要大大的优于mdl,个人感觉十倍的速度都不止,耗费cpu和网络的资源比较少。 而且,移植以后不受cognons的影响,可以正常打开,而且在服务器上生成cube的速度也要比mdl的速度高一些。 5)mdl是ASCII码的文件,可以用文本打开,进行手工的修改,或者编辑程序对mdl进行批量处理,对于理解模型十分有用。 综述: pyi和mdl模型各有千秋,合理互补使用会给工作带来效益。 推荐同时保存两种模型,并使之同步。 注: 根据农行IFAR项目组的经验,他们全部用的是mdl格式,我们也可以考虑借用一下。 2.参数设置文件 可以使用几种参数设置,以下是最常用的参数设置: ∙ModelWorkDirectory= 当进行模型设计时设定创建临时文件的位置。 临时文件用来在立方体创建过程中发生严重错误时恢复在战略检查点被挂起的模型。 该文件的扩展名为QYI,默认的路径是ModelSaveDirectory设置的值。 ∙DataWorkDirectory= 设定在生成立方体时Transformer创建临时工作文件的位置。 可以使用多个驱动器的能力可以消除操作系统所造成的大小限制。 当Transformer创建立方体时,它可以将临时文件写入指定的驱动器或目录。 这些文件被连接到一个逻辑文件,而无需考虑它们所在的驱动器。 这些文件的位置由您所设定的路径列表来决定。 默认的路径为CubeSaveDirectory设置的值。 ∙DataSourceDirectory= 对于除IQD文件和Architect模型以外的数据源文件,该设置可以指定Transformer搜索这些文件的位置。 默认路径是当前工作路径。 ∙CubeSaveDirectory= 指定Transformer保存立方体的位置。 默认路径为ModelSaveDirectory。 ∙ModelSaveDirectory= 设定Transformer保存模型的位置。 默认路径为当前工作路径。 下面是Transformer日志文件中有关这些设置的实例: PowerPlayTransformerWedSep1909: 39: 172001 LogFileDirectory=c: \transformer\logs ModelSaveDirectory=c: \transformer\models\ DataSourceDirectory=c: \transformer\data\ CubeSaveDirectory=e: \transformer\cubes\ DataWorkDirectory=d: \temp\ ModelWorkDirectory=e: \temp\ 下面的例子显示了如何在命令行中使用参数设置文件: trnsfrmr-n-fc: \preferences.prfmodel.mdl 2.1提示 ∙在命令行设定参数设置文件的使用会覆盖并优先于其它设置。 例如,如果在rsserver.sh文件中定义了环境设置,在命令行中使用参数设置文件将覆盖这些设置。 ∙TMPDIR、TEMP、TMP等环境变量可以定义Transformer在什么位置创建临时文件。 Transformer可以使用所定义的第一个环境变量。 这些环境变量是操作系统定义的系统环境变量。 3.刷新Cube模型前提条件 3.1Unix下的环境变量配置 配置好Unix下的环境变量(配置的文件名字profile)具体配制如下: 3.2在建立好Cube模型立方体的时候,要注意如下几个细节 3.2.11.选择PowerCubefilename的时候,要选择服务器上的空间名字目录 3.2.2要选择Processing下的ontheserver选项。 3.2.3选择View目录下的Categories,进入如下界面,但是有几个特别注意的事项,在刷新Cube模型的时候,层级不用刷新,只刷新关系,不刷新数据。 3.2.4Cognos提供权限方面的Cube模型更新,进入View下的Signons界面就可以进行权限下的Cube更新了。 4.附件 4.1如下操作是在windos平台下的增量更新步骤 设置CUBE的增量更新属性 右键PowerCubes->Properties->Processing,如下图: 把Thiscubeisincrementallyupdated勾上。 写个bat(批处理)文件 批处理代码如下: "E: \ProgramFiles\cognos\cer4\bin\trnsfrmr.exe"-n2-s-kGOSL=sa/sa"E: \ProgramFiles\cognos\cer4\bin\销售.mdl" 解析: Trnsfrmr路径: "E: \ProgramFiles\cognos\cer4\bin\trnsfrmr.exe",我的cognos安装在E: \ProgramFiles目录下; 数据库名: GOSL 数据库用户名和密码: sa/sa 模型路径: "E: \ProgramFiles\cognos\cer4\bin\销售.mdl" 具体意思可以参考附录里的Transformer命令。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cube 模型 刷新 调研 方案