您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 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/imppesbusserver1.2Uinx下的shell角本和多线程调用Tip1:在Uinx下刷新Cube模型的时候,需要在Uinx下编写shell角本,通过执行shell角本来进行有目的的刷新Cube模型。IFAR项目组:所用的shell角本如下:注:上面shell角本,能对Cube模型进行刷新,同时也能对数据进行刷新。Tip2:在Uinx下可以开启多线程,对多个shell角本,同时进行执行。注:技术难点是Uinx不太熟悉,不知道怎样去开启进程和线程去执行shell角本,怎样判断是否执行完成,如果报错了,怎样去处理,怎样用日志记录。1.3Java程序调用shell角本基本流程图java监控程序是否要执行角本多个shell角本结束否是java监控程序怎么去监控数据库状态表,在去调相应的shell角本shell角本是否执行成功抛出shell执行失败异常否是1.3.1通过编写一段java代码,进行有规律的去调用shell角本,来刷新Cube模型。JAVA调用shell脚本并生成证书shell脚本如下其中Dir是存入的路径User是一个文件名称config是一个配置文件#!/bin/shDir=$3User=$1CONFIG=$2KeyFile=$Dir/$User.keyCSRFile=$Dir/$User.csrCRTFile=$Dir/$User.crtCMTFile=$Dir/$User.pem#makesureenvironmentexistsif[!-d$Dir];thenmkdir$Dirfiopensslgenrsa-out$KeyFile1024opensslreq-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.shcmd[2]=filename;//给文件取名cmd[3]=path+openssl/user/config/+filename+.config;//配置文件中的信息cmd[4]=path+openssl/user;//生成新文件存在此目录中StringBufferbuf=newStringBuffer();for(inti=0;icmd.length;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删除这个文件,这个时候就要加上waitFor1.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=path当进行模型设计时设定创建临时文件的位置。临时文件用来在立方体创建过程中发生严重错误时恢复在战略检查点被挂起的模型。该文件的扩展名为QYI,默认的路径是ModelSaveDirectory设置的值。DataWorkDirectory=path1;path2;...设定在生成立方体时Transformer创建临时工作文件的位置。可以使用多个驱动器的能力可以消除操作系统所造成的大小限制。当Transformer创建立方体时,它可以将临时文件写入指定的驱动器或目录。这些文件
本文标题:Cube模型刷新调研方案
链接地址:https://www.777doc.com/doc-2907247 .html