用友软件股份有限公司NC6.1数据缓存及配置使用说明1NC6.1数据缓存及配置使用说明NC6.1的缓存在NC5系列产品缓存的基础上做了一些改进,增加了后台的图形配置界面,下面就按数据缓存的一般性说明,缓存配置文件、后台缓存配置工具、前台缓存配置四个部分,分别说明。1数据缓存的一般性说明1.1数据缓存类型数据缓存分为三类:一般性的数据缓存:用于缓存普通的档案,一般来说数据量小于10万行。解决公式计算、参照和查询的效率问题,在缓存配置文件中被标识为“full”。LFU数据缓存:一种按照命中率进行缓存的档案,最常命中的档案保留在数据缓存中。其中数目的四分之一数据考虑了最近使用的情形,最近使用的数据档案被保留。一般来说用于数据量大的档案,如人员、客户、供应商、物料等。lfu数据缓存引入是为了解决公式的计算效率问题,在缓存配置文件中被标识为“lfu”。常用数据缓存:用于常用档案的设定。常见档案是由应用程序逻辑设定的,用户最经常使用的档案。主要用于解决参照的效率问题,只适用于参照。1.2数据缓存使用的前提前提:数据缓存启用;数据缓存经过了数据初始化;所有配置需要数据缓存的表,都具有版本控制机制,也就是说需要配置数据缓存的表的增、删、改都需要通知版本的变化。1.3数据缓存配置的原则原则:原则上各产品只负责配置各产品数据自己管理的表。如果需要配置别的产品组的表,应该先沟通;所有需要配置数据缓存的表都需要版本变化支持,前面已经描述过;对于UAP提供的表来说,产品组只能在UAP能够提供缓存机制支持的表中加入配置,具体的说就是UAP提供的只缓存了部分列的表,产品组才能配置。类似的规则可应用于各种跨产品配置数据缓存表的情况,这种情况只能配置其他产品组的允许配置的表用友软件股份有限公司NC6.1数据缓存及配置使用说明2(这些表都是具有版本机制支持的表)。人员、客户、供应商、物料等需要使用LFU数据缓存;1.4缓存表的初始化在缓存启用后,所有表都需要初始化:普通数据缓存表:建表,按配置的要求下载所有的数据,或按集团过滤数据;LFU数据缓存表:建表,按lfuMax的大小,结合数据表的数据量来初始化数据。通常初始化lfuMax三分之二大小的数据(最大数目为10000),但如果后台数据库中的数据超过了lfuMax值两倍时,不会初始化任何数据。常用档案初始化:根据后台的指定用户常见数据的表中的信息结合当前用户进行初始化。2后台配置文件的相关说明缓存的配置文件分为原始配置文件和生成配置文件。原始配置文件有两种,一类是tabsqls.xml,存放于UAP模块下,规定了整个系统使用前台缓存的默认参数,缓存数据源参数;另一类是tabconfig.xml,存放于需要使用前台缓存的模块中,位于模块的config目录下,规定了模块需要缓存的表及表中的字段。2.1缓存的基本属性配置文件tabsqls.xml
org.hsqldb.jdbcDriverjdbc:hsqldb:filesa50用友软件股份有限公司NC6.1数据缓存及配置使用说明3nc.vo.dbcache.utils.TestVariableTranslaternc.vo.dbcache.utils.TestFilterPluginapplicable:缓存是否启用,该属性值为true时,启用缓存;为false时,未启用缓存;该属性对应缓存配置面板上“启用数据缓存”选项。系统默认值为false;autoRefresh:自动刷新,该属性值为true时,启用缓存后,系统会启动自动刷新服务,自动刷新线程会每隔一段时间刷新一次前台缓存;该属性对应缓存配置板上的“启动自动刷新”选项;refreshInterval:自动刷新时间间隔,单位分钟。系统默认值为120分钟;configurable:是否可以配置缓存。此属性用于控制用户可否配置前台缓存,对应缓存配置板上的“缓存表配置”页签中的添加表/删除表,添加列/删除列,过滤sql是否可用;系统默认值为true;lfuMax:lfu类型的缓存表缓存的最大记录数,用于控制该表缓存下载及刷新时的数据量。当lfu类型的缓存表的数据超过定义的最大数的两倍速时,默认不下载;小于定义的最大数时,全部下载;大于最大数且小于最大数的两倍时,随机下载最大数的三分之二。当该表的记录数超过了该最大值,在下一次刷新lfu表时,将根据数据的读取次数,删除超过lfuMax并且读取次数少的数据。系统默认值为10000;tableType(MEMORY/CACHED):这个参数主要用来控制HSQL缓存表的类型。该属性值为MEMORY时,是指前台数据全部存在内存中;该属性值为CACHED时,是指一部分数据存在内存中,一部分数据存在硬盘上。CACHED类型比较节省内存,但如果缓存的数据量非常大,导致前台下载缓存后内存溢出,就建议用CACHED类型,这种类型前台查询速度会慢一些。系统默认为MEMORY类型。pagedSize:下载缓存数据时分页的大小。单位是记录的条数,系统默认值为2000;HeadSql:前置sql,只在初始化缓存前执行。该标签有个属性ignoreRrror,当其值为ture时,则忽略掉执行该sql时发生的异常;格式固定为:分句1;分句2;分句3……分句前如果有“--”则该分句不执行;EndSql:后置sql,只在初始化缓存后执行。其它情况同HeadSql;:这个标签下的内容为缓存的数据源,默认为hsql数据库;2.2缓存表配置文件tabconfig.xml用友软件股份有限公司NC6.1数据缓存及配置使用说明4……Table:它的一个属性值name,用来标识缓存的数据表的名字;PrimaryKeys:缓存表的主键;Columns:列名。如果缓存该表的所有字段时,这个属性为空,如果缓存该表的部分字段时,列出需要缓存的字段名;每个Column还有一个属性system,表示是否允许用户配置该列。通常除了主键以外,其他列都可以设为false。Strategy(LFU/FULL):分别表示时行lfu缓存算法的表,或全表。名该表是否为LFU类型。当该属性值为lfu时,表明该表是lfu类型的表,缓存时遵循LFU类型表的规则;当该属性值为full或不配置时,为普通类型表。groupColumn:集团列,一般为pk_group,不配表示没有按照集团过滤。filterSql:如果某个表有特殊的业务条件则将配置这个属性。其格式为:条件1and条件2and条件3,filterSql中支持变量,变量的语法为”${}“包围的部分,缓存将根据需求,提供变量替换机制和一些内置的变量,用户出口部分的变量自动进入变量解释计算中。SqlIndex:索引创建语句。在前台创建该表后,会紧接着执行索引创建语句,如果该索引中的列不在缓存的列中,则忽略该条语句;postCreateSql:创表后的的SQL语句,比如建索引语句。不过现在索引都是动态创建的,所以这个属性现在也没啥用了。用友软件股份有限公司NC6.1数据缓存及配置使用说明52.3缓存配置文件的存放位置及合并规则1.3.1缓存配置文件的存放位置缓存基本属性配置文件tabsqls.xml文件,存放于服务器端的NC_HOME/Modules/uap/cacheconfig/tabsqls.xml各模块的缓存表配置文件tabconfig.xml,存放于服务器端的NC_HOME/Modules/模块目录/cacheconfig/tabconfig.xml通过tabsqls.xml和tabconfig.xml合并生成的cacheconfig.xml配置文件,存放于服务器端的NC_HOME/resources/cacheconfig/cacheconfig.xmlcacheconfig.xml配置文件,在首次安装时通过后台的配置工具合成。它会被前台缓存加载。在后台配置工具中,可通过右键菜单来维护tabsqls.xml和各模块的tabconfig.xlm两个文件,保存后即可重新合成配置文件。1.3.2缓存配置文件的合并规则1.如果多个模块同时配置了同一个数据表,有的为lfu,有的是full,合并后生成的表为lfu表;2.如果多个模块中配置了同一个数据表,其中一个模块配置A和B两列,而另一个模块中配置了B和C两列,合并后生成的表取各模块的并集,为A、B、C三列。如果主键和groupColumn过滤列不在A、B、C中,则合并后的配置文件自动将主键和groupColumn过滤列加上;如果有的模块没有配置任何列,有的模板配置了列,则合并后的表的列与配置了列的表相同;如果各模板均未配置列,则合并后的表也不配置任何列;3.如果多个模块均配置了filterSql,则合并生成的配置文件也将把filterSql合并;4.如果多个模块中,有一个配置了groupColumn,则合并生成的配置文件也会加上groupColumn列(下载缓存时只下载pk_group={当前集团}的数据)。3后台缓存配置工具的相关说明NC6.1将修改缓存配置文件,合并各模块的缓存配置,生成客户端缓存jar包等功能提供了一个图形化的工具,方便用户及实施人员使用。该工具存放在后台配置工具中。打开NC后台配置工具,在最左边窗口选择“数据缓存”,界面显示如上图所示。用友软件股份有限公司NC6.1数据缓存及配置使用说明6图13.1缓存配置文件的修改在图1所示的界面上,显示的是缓存全局配置文件tabsqls.xml中的内容,如lfu表的最大数据,是否自动刷新,刷新间隔等等,修改完后,选中中间窗口的“全局配置信息”点右键,在弹出的右键菜单上,点击“保存配置”,“源文件”或“文件路径”,可以得到相应的结果。在中间窗口,点击下某个模块的tabconfig.xml文件,弹出如图2所示的界面,在这个界面中,可对某个模块下的tabconfig.xml文件进行修改,在弹出的右键菜单中,可对修改后的配置文件进行保存,删除配置文件,查看配置文件的源文件等。用友软件股份有限公司NC6.1数据缓存及配置使用说明7图2在图2右边窗口列示出来的是选中模块的缓存表配置文件中的具体内容,在这个配置文件中描述了这个模块中需要缓存的数据表,缓存表的类型,是否按集团过滤,以及缓存表的字段等信息。在这个界面中可以很方便地增加删除缓存表,增加和删除缓存的字段,修改缓存表的策略等。如何修改和增加缓存表配置文件中表和列的信息?选中中间缓存表列表中需要修改的行,可对其内容进行修改,这里只能修改“策略”和“集团过滤”两列。单击鼠标右键,在弹出的右键菜单上,可以选择增加缓存表或删除当前选中的缓存表。增加时,在弹出的窗口中需要先选择系统及需要缓存的数据表,然后再定义策略和集团过滤字段,增加完毕单击右键菜单保存修改的设置。如果需要给某个缓存表增加缓存列,选中某个缓存表,在最右边窗口单击鼠标右键,选增加,然后在弹出的窗口中选择系统信息,选中表的字段信息就列示出来了,选择需要缓存的字段,点确定,需要缓存的字段就列示在最右边的窗口中了。修改完毕,选中配置文件单击鼠标右键保存修改的设置。原始配置文件是在软件出厂前配置好的,无特殊情况,用户一般不需要修改。3.2合并缓存配置现在NC6.1会在启动中间件时自动合并缓存配置。单击图1中的“合并缓存配置”按钮,系统自动按合并规则将各模块的tabconfig.xml用友软件股份有限公司NC6.1数据缓存及配置使用说明8文件合并生成整个系统适用的cacheconfig.xml文件。合并后生成一个报告,将本次合并的结果及不合法配置列示出来,如下所示。--------NC缓存各模块配置文件合并结果----------------[-UAP模块与业务模块配置冲突信息-](列冲突是指UAP(所有以uap开头的模块)中没有设置表列信息,而其它业务模块对相同的表设置了表列信息的情况)未发现列信息冲突[-业务模块缓存表配置检测-](业务模块最好不要配置全列缓存)业务模块未发现不合法配置。[-所有模块缓存表配置信息摘要-]共有2个模块配置了数据库缓存uap模块配置的表有sm_usersm_dpprofile_regorg_acb_accchartorg_obspsnorg_trafficorg_vorg_ppsmemberorg_assetorg_vorg_stockstatstruorg_obsdeptorg_moduleperiodorg_corporg_costregionorg_stockorgorg_itemorgom_postorg_ot_ruletypeorg_finorgstru_vorg_reportorg_vorg_fundorg_vorg_liacenterorg_adminorg_vorg_salesorgorg_dept_vorg_associateentorg_saleappendstruorg_sssmemberom_postseriesorg_liacenter_vorg_relvalidatororg_datavalidatororg_liabilitybookorgtype_busiregionorg_cr_stockorgorg_orgtypeorg_setofbookom_joborg_purchaseorg_vorg_rtypelefttypeorg_reportmanastruorg_reportorgorg_bosmemberorg_stockorg_vorg_deptstrumem_vorg_bosmember_vorg_financeorg_vorg_maintainorgorg_grouporg_fundmanasystemorg_cr_stockstoreorg_associatedeforg_purplanstruorg_orgs_vorg_fmsmemberorg_financeorgorg_sasmemberorg_ot_ruleorg_qccenterorg_crectlregionorg_hrorgstru_vorg_associateattrorg_brsmemberorg_hrorg_vorg_maintainorg_vorg_trafficorgorg_sas_prodlineorg_orgmanagerorg_finorgmember_vorg_deptorg_itemorg_vorg_rmsmemberorg_adminorgstru_vorg_deptstru_vorg_associateruleorg_hrorgorg_bos_vorg_orgsorg_assetorgorg_liacenstru_vorg_busireportstruorg_purchaseorgorg_planbudgetorg_operateorg_liacenmember_vorg_accountingbookorg_ccr_financeorgorg_relation_attrorg_salesorg_vorg_relationorg_budgetorgstruorg_stockinvestorg_corp_vorg_hrorgmember_vorg_uagrouporg_closeaccorg_qccenter_vorg_fms_vorg_fmsmember_vom_jobtypeorg_fundorgorg_relationtypeorg_planbudget_vuapbd模块配置的表有bd_transporttypebd_templetitembd_workcalendrulebd_currratebd_material_vbd_marasstrstbd_marasstframebd_material_cbd_addressdocbd_bankaccsubbd_materialprodbd_material_v_cbd_accctrlorgbd_balatypebd_cust_supplierbd_marbasclassbd_accperiodquarterbd_materialpubd_custsalebd_accctrlasoabd_psnjob_cbd_accasoabd_custclassbd_ptratebd_freecustombd_vouchertype用友软件股份有限公司NC6.1数据缓存及配置使用说明9bd_materialbd_materialreplbd_psnbankaccbd_psndocbd_branddocbd_inoutbusiclassbd_measdocbd_accperiodschemebd_custlinkmanbd_accperiodbd_prodlinebd_supplierclassbd_custsaleclassbd_marasstrangebd_supbankaccbd_currtypebd_fundplanbd_marasstrstvalbd_psnjobbd_accassitembd_workcalendardatebd_supplier_cbd_materialwarhbd_userdefrulebd_custfinancebd_materialplanbd_bankaccusebd_cfadjitemsetbd_notetypebd_customer_cbd_bankdocbd_userdefrulerefbd_accctrlrulebd_accsystembd_marsaleclassbd_psndoc_cbd_stordocbd_taxitemsbd_accassbd_costmodebd_supplierbd_rackbd_custbankbd_materialstockbd_bankaccbasbd_projectroutebd_customerbd_accasshistorybd_cashflowbd_projectorgbd_defdoclistbd_defdocbd_channeltypebd_accchartbd_projectclassbd_netbankinftpbd_workcalendarbd_psnclbd_currinfobd_supfinancebd_countryzonebd_accperiodmonthbd_marassistantbd_supstockbd_materialsalebd_accountbd_userdefitembd_areaclbd_cashaccountbd_exrateschemebd_accasoahistorybd_materialcostmodbd_custcreditctlbd_banktypebd_addressbd_projectbd_accperiodhalfyearbd_materialcostbd_marcostclassbd_materialfibd_incomebd_incomechbd_payment当修改了任意产品的tabsqls.xml或tabconfig.xml文件后,重启中间件时会自动合并缓存配置,客户端需清理缓存数据并重新初始化。3.3生成客户端缓存jar包图3用友软件股份有限公司NC6.1数据缓存及配置使用说明10为节省用户生成前台缓存的时间,NC6.1提供了一个离线生成缓存数据的工具。在图3所示的界面中,点击“生成客户端缓存jar包”按钮,在这个界面中,按界面提示选择生成缓存数据的数据源,修改导出文件的存放位置,点击“为选中的集团分别独立生成安装jar包”按钮生成文件。4前台缓存配置4.1前台缓存配置文件的存放位置前台客户端启用缓存后,后台合并生成的缓存配置文件同时被保存在前台,具体存放位置:盘符:\DocumentsandSettings\登录用户\NCCACHE\服务器的IP及路径\CACHE\cacheconfig.xml同时还在这个文件夹下自动生成一个“系统名_cacheconfig.xml”文件,保存登录系统自己独有的配置文件。在前台缓存配置面板中,修改缓存表配置,会直接更新系统的配置文件。(注:每个系统会有一个cacheconfig.xml,如下图系统对应的数据源design的cacheconfig.xml就保存在design目录下。):如果后台的配置文件发生变化,前台必须清缓存重新下载才能使后台配置生效,或者重启中间件。(注:前台也可以重新远择解决方案。如下图,这样也会加载新的配置文件。)用友软件股份有限公司NC6.1数据缓存及配置使用说明114.2缓存管理登录到NC系统后,点击屏幕右上角“帮助”右边的“>>”按钮,选择“缓存配置”选项,就打开了缓存配置的面板。如图3所示。图4启用数据缓存:默认不勾选此项。该客户端是否启用缓存的标识,当启用数据缓存时,界面下方的“刷新”和“初始数据”两个按钮可用。启用自动刷新:默认勾选此项,系统启用自动数据同步服务,和下面的“数据刷新间隔时间”配合使用,即每隔这个间隔时间,系统自动将前台缓存与后台数据库同步。刷新:手动同步后台数据;初始数据:初始化缓存数据;在同一个客户端,同时打开两个以上的IE时,先打开的IE可以正常使用缓存配置,第二个IE打开缓存配置时,就会提示数据库链接错误。4.3初始数据用友软件股份有限公司NC6.1数据缓存及配置使用说明12图5服务器初始化:直接从数据库服务器下载需要缓存的数据,当数据量很大时,可能需要很长的时间。后面两种导入方式需要有通过缓存离线导出工具导出的缓存数据文件。也就是通过2.3中描述的生成的数据jar包。本地导入:将通过缓存数据离线导出工具导出的缓存jar包,从本地客户端本地导入;请确保缓存数据与当前数据源相同,否则可能出错;从服务器导入:将通过缓存数据离线导出工具导出的缓存jar包,从FTP服务器导入,建议导入之前测试连接。输入形式如:ftp://user:password@ip/filename。4.4缓存表配置在缓存配置面板上,切换页签到“缓存表配置”,在这个页签上,可以个性化配置当前客户端下载哪些缓存表,某张表的某些列,以及按某些条件过滤的过滤sql。用友软件股份有限公司NC6.1数据缓存及配置使用说明13图6在图6所示界面中,缓存表列表中列示的是在后台合并生成的配置文件cacheconfig.xml中配置的所有的缓存表信息,各客户端可根据自己的需要,选择自己需要表下载,添加或删除缓存表后,点确定,当前修改的信息被保存到客户端本地的缓存文件夹中。缓存表是否可配置,受参数configurable控制。如果想恢复与服务器端缓存一样的配置,点击“同步配置方案”按钮即可恢复,或者删除前台缓存重新下载。用友软件股份有限公司NC6.1数据缓存及配置使用说明144.5错误日志图7这个页签列示出来的,是初始数据时,下载失败的表的错误信息。如图7所示。5Lfu类型缓存5.1什么是lfu类型缓存以前版本在下载数据缓存的时候有一个限制,就是数据超过30万条的表默认是不下载缓存的。在V5.6版本中,为了解决一些数据量太大的表,缓存数据下载不下来的问题,新增了一个新的缓存类型,lfu类型。Lfu的含义就是最近最常使用,这种类型的特点是,前台数据库中缓存的最近最常使用的少量的数据,用于单据上的公式取数,而报表和参照直接从数据库中取数,不走前台缓存。本版系统默认定义了以下表为lfu类型缓存,这些表分别是:物料,客户,供应商,人员等。其他表默认为普通类型,可通过修改配置文件,修改为lfu类型。用友软件股份有限公司NC6.1数据缓存及配置使用说明155.2lfu类型缓存的容量Lfu类型缓存表能缓存多少数据,是由用户自己来定义的。系统自动默认大小为10000条。如果用户在缓存配置模板中定义了“lfuMax”属性的值,那么系统在合并生成配置文件时,按这个属性值生成,如果没有,则取默认值10000条。这个容量是对所有lfu类型表生效的。这个属性,存在服务器端\nchome\modules\uap\config”文件夹下的tabsql.xml文件中。5.3lfu类型缓存的初始化Lfu类型缓存表的初始化是与其他缓存表一起进行的。初始化时下载数据的多少与其相应的数据表的数据量相关。当下载的数据表的数据超过lfu类型表定义的容量的两倍时,系统默认不下载数据;当下载的数据表的数据不足lfu类型表定义的容量时,系统默认下载全部数据;当下载的数据表的数据不足lfu类型表定义的容量的两倍时,系统自动按lfu类型表容量的2/3随机下载到前台。例如,我们定义了lfu类型表的容量是10000条记录,如果数据库中,物料档案表的数据量超过了20000条记录,那么在初始化前台缓存数据后,前台该表的数据是0;如果数据库中该表只有15000条数据,那么初始化前台缓存数据后,下载过来的数据有6666条,取lfu类型表容量的2/3;如果数据库中该表只有6000条数据,那么初始化前台缓存数据后,下载过来的数据就是6000条。5.4lfu类型表的热命中率如何增加Lfu类型缓存表中有个字段Dbcache_lfu_ts,它是用来记录当前记录的最后一次使用的时间戳和使用频率的,我们也称它为热命中率。前台缓存中的数据每被使用一次,其使用频率和时间戳都会被更新。那么在什么情况下,lfu类型表的热命中率会增加呢?a、使用单表单参数取数公式getColValue(tablename,fieldname,pkfield,pkvalue);b、参照中选中档案在界面上显示出来、输入编码带出档案、输入部分编码选档案等;这两种情况下,如果lfu类型缓存表中不存在这条记录系统会自动增加且热命中率增加;如果lfu类型表中存在这条记录,那么它的热命中率会增加。c、增加常用数据时,还会去判断相关的lfu类型的表中是否存在该条记录,如果不存在则自动加入,如果存在则不加入,同时不会改变热命中率的次数;用友软件股份有限公司NC6.1数据缓存及配置使用说明165.5lfu类型表的数据保护区为了保护lfu类型表中最近加入的数据不会马上被挤出去,特别引入了保护区的概念。保护区是指lfu类型表容量的25%的空间,用于保护最新加入的数据。处于保护区中的数据永远是最新的数据。5.6lfu类型表的刷新lfu类型表刚开始使用时,表中数据或为空或为表容量的2/3,在使用过程中,会不断地将新数据插入及更新热命中率,同时也会不断地将表中不常用的数据给剔除出去,这就涉及到了lfu类型表的刷新。Lfu类型表的刷新,有自动刷新和手动刷新两种情况。自动刷新(以容量10000条为例):插入数据时,一般情况下不会自动刷新,但当新加入的数据和该表原来数据之和大于表容量的2倍,也就是20000条时,系统会自动刷新数据。插入数据时,一般情况下不会自动刷新,但当新加入的数据和该表原来数据之和大于表容量的2倍,也就是20000条时,系统会自动刷新数据。刷新时,首先计算保护区的数据,将本次加入的数据和表中原有数据按使用频率进行排队,取前250条数据加入到保护区;然后,将其余处于保护区外的数据重新按使用频率排队,频率相同的时间早排在前面,使用频率最多的数据将被保留,超出容量部分将被挤出。缓存面板上的手动刷新:对于lfu类型的表,除上述情况会自动刷新进行容量压缩外,在缓存配置面板上的数据同步和刷新动作也是起作用,但前提是被刷新的数据表的版本有变化,即该表中的数据有增删改等操作,导致缓存版本变化了,需要刷新前台数据;如果版本表没有变化,那么刷新和数据同步是不起作用的。缓存的版本表,每隔5分钟自动刷新一次。这两个刷新,在压缩缓存表时,同样会考虑到保护区的情况,外于保护区外的,使用频率最少且使用时间最早的数据将会被挤出。