的数据可分为三类:公有基础字典、私有基础字典、一般业务数据。公有基础字典需要在整个企业集团内共享,比如集团企业的组织机构信息、集团公有会计科目、集团公有报表格式和公式等。公有基础字典是集团实现规范管理的基础,在整个集团企业内保持一致,一般由集团总部统一维护,然后统一下发到各下属单位,除非总部授权,一般下属单位没有维护权限。私有基础字典是需要各分支单位根据其业务特点和经营范围自行维护的基础数据,比如本单位组织结构、人员信息、私有会计科目、往来单位、设备、BOM、工艺路线、能力参数等信息。私有基础字典虽然由各单位自行维护,但需要遵守集团统一的编码和命名规范。同时部分私有基础字典也可能被其他单位所引用,也需要在整个集团内共享。公有基础字典和私有基础字典的共同特点是数据量小、更新频率低。一般业务数据是企业日常经营活动所产生的数据,比如企业的生产、物流、财务等信息。这类数据的特点是数据量大、更新频率高,除在有经济往来的单位外,一般不需要在各同级的单位之间共享,但需要汇总到上级单位和集团总部进行数据挖掘和数据分析,以作为决策支持的依据。针对不同的数据,系统采用不同的数据复制策略。对于公有基础字典数据采用只下载不上传的策略;对于需要全局共享的私有基础字典定时的上传和下载,以保持数据在整个集团的一致性,对不需要全局共享的私有基础数据处理方法等同于一般业务数据;对业务数据一般采取只上传不下载的策略,有业务往来的单位之间采用定点传输的方式实现数据共享。对于部分业务数据比如物流、库存等数据,需要通过广域网的方式到其他单位查询相关数据,如果这种异地请求过于频繁,将会严重影响数据库服务器的处理性能和业务处理的响应时间,因此对库存等部分业务数据也采用全局复制的方式,即在所有数据库服务器之间进行同步复制。系统还采用了通讯中间件以实现地域分散的各子(分)公司之间以及他们与集团总部的通讯。通讯中间件可采用IBM的MQ消息中间件或国内厂商的一些成熟产品。通讯中间件运行于系统中所有的数据库服务器和部分进行业务处理的微机上,其作用是屏蔽硬件和网络传输机制以及操作系统的差异,为软件系统间的通信建立一个基于命名服务的虚拟网络。根据集团企业呈典型的树状结构的组织机构特点,对每个子(分)公司给予逻辑上统一的上下级节点编码,不同单位之间的数据复制只针对其直接上下级节点进行,这样逐级进行,最终在全网内实现数据复制。在增加一个网络节点时,只需按统一的编码规则对其进行编码,在接入网络后,即可实现对该节点的复制。对于某些特定业务,比如统计查询,如果涉及到对海量数据的处理,直接通过前台软件来处理可能需要很长的时间,因此有必要利用服务器强大的处理能力,根据具体需要对数据进行一定的预处理(包括及时或定时处理)得到一些中间处理结果,这样有利于缩短系统对这些特定业务的响应时间。2、系统实现技术数据集中系统的实现技术主要包括两方面:数据报文的组成和数据复制方法。2.1、数据报文数据报文格式的定义对数据集中程序的编码和维护起着至关重要的作用,它决定了对数据的打包和解包的方式以及对数据处理的各个方面。在报文的压缩和加密方面,系统将直接利用通讯中间件提供的压缩机制和安全管理功能。数据加密是通过某种算法对数据进行编码防止信息被非法获取,比较常用的方法都是基于复杂的算法,通过密钥来对进行数据加密,主要的算法有DESTriple、DES、RC2RC4RC5、RSA等。在报文格式方面,由于ERP中需要复制业务数据类型较多,有大量的基础数据和业务数据在各分支机构数据库服务器之间进行复制,因此有必要对报文格式采用统一的编码规则,以便于数据集中系统中报文处理模块的维护。下面对报文格式中各个部分作用加以详细说明:(1)业务类型:指明报文的业务类型,它决定了对哪一个数据表进行操作,由4个字节构成:第一个字节:表示子系统编号,如:①生产系统;②物流系统;③;④人事系统等。第二个字节:表示子系统中的业务类编号,如:①公有基础字典;②私有基础字典;③一般业务数据。第三、四两个字节:表示子系统中的某种业务类中具体数据类型的编号:0l一50为需要全网复制的数据;51—70为逐级向上复制的数据;71—80为需要逐级向下复制的数据;81—99为定点复制的数据。例如,如果报文头为1301,则说明报文数据为生产系统中的需要全网复制的业务数据中某个数据表的编号。(2)消息类型:指明报文内容是需要复制的原始数据信息还是返回的确认信息,用以表明对报文的处理方式,由一个字节构成:s:表示需要复制的原始数据信息(Source)。R:表示返回确认信息(Resu]t),指数据接收方对成功处理的数据返回数据发送方的确认信息。数据集中系统在通信环节中采用了消息中间件,在进行数据复制的过程中,大致需要经过以下环节:数据提取一数据打包一调用中间件通讯函数发送消息一数据接收方中间件接收到消息一后台守护进程从中间件消息队列中检索到消息一数据解包一保存数据一返回确认信息一发送方接收并处理确认信息。在上述环节中任一环节出现错误就会导致复制的失败,其最终表现为对数据的复制没有得到确认,必须x,l-相应的数据进行重新复制。因此,在数据接收方处理数据后,对处理不成功的数据就没有必要返回确认信息,因为数据的复制没有收到确认信息,必然会重新复制。(3)操作类型:指明对报文进行操作的类型,由1个字节构成。yj,-为以下几种类型:I:表示插入操作(Insert),指新增一条新的数据信息。U:表示更新操作(Update),指更新原有的一条数据信息。D:表示删除操作(Delete),指删除原有的一条数据信息。(4)报文长度:指明报文的总长度,由6个字节构成。即能标识的最大报文长度为999.999K字节。(5)记录数:指明报文中的总记录数,由2个字节构成。增加该部分内容主要是为了便于系统解包模块的处理:可以根据该信息很容易地从报文中分离出各条单项记录数据。每个报文最多能包含99条记录。如果报文包含BINARY、IMAGE和TEXT数据类型,由于这种数据信息量一般较大,所以每个报文只包含一条记录。虽然可以不包含这部分内容,但为了报文格式的统一,仍予以保留,只是其内容恒为“01”。(6)报文数据:包含报文中的有效数据。具有以下特点:(1)报文数据按字节顺序存储。(2)每条记录前包含6个字节,用来表示该记录的实际长度。因此,每条记录的最大长度为999.999K字节。对BINARY、IMAGE和TEXT等BLOB数据类型而言,不能也不必用4个字节来表示其长度,但为了报文格式的统一,仍予以保留,只是其内容恒为“0000”。如果解包程序检测到记录数为1且记录长度为“0000”,即可知该记录包含BLOB数据类型。2.2、数据复制方法为了实现数据的高效、安全、完整的复制,根据业务类型的特点,采用以下方式:(1)针对每个需要复制的数据表建立一个任务分发表;(2)用触发器适时生成分发任务;(3)用守护进程定时或定点对分发表中的分发任务进行分发。2.2.1、任务分发表由于绝大多数数据都需进行多路分发,即需要分发到多个网络节点,而且对各节点的分发不可能一次性地分发成功,很可能只是部分分发成功,因此必须跟踪每条信息对每个节点的分发状态。同时为了减少对原数据表的操作量(大部分业务数据表的数据量较大,如果经常对原数据表进行扫描,将严重影响数据库的性能),针对每个需要进行多路分发的数据表建立一个任务分发表,在任务分发表中存放原数据表的全部字段信息,并增加一个机构节点标识字段,表示需要对哪些目标单位进行分发。任务表中应包含需要分发的节点信息和数据信息。数据集中系统直接从任务分发表中按节点标识分组提取分发信息并进行打包发送。为了统一操作,对任务分发表采用统一的命名规范,即任务分发表的表名统一由原数据表的表名加上后缀“-RW”构成。2.2.2、分发任务的形成和任务分发任务分发表中存放着所有需要进行分发的数据信息,因此,如何正确形成分发任务是整个复制过程中非常重要的一个环节。在设计中采用的方法是通过触发器来产生分发任务的,它建立在插入操作(Insert)和更新操作(Update)基础之上。触发器通过以下步骤确定需要对哪些节点产生分发并生成分发任务表:(1)获取本地数据库服务器通讯中间件节点名称;(2)通过本地节点名称获取上下级节点名称。如果本地机构代码等于上级机构代码,则说明该节点为顶级节点,触发器将不对上级节点产生分发信息。(3)触发器根据所操作的数据需要复制的范围(全网、向上、向下、定点复制)生成相应的记录到任务分发表。2.2.3、数据复制流程数据复制流程包括数据分发处理流程和数据接收处理流程,流程图如下:(1)数据分发处理流程图数据复制前应首先设定固定的开始时间和轮循次数,开始时间一般设在零点,从而减轻数据复制对业务系统的影响。达到设定的开始H,1间后,系统开始检索分发任务表,如果分发任务表存在需要分发的数据并且尚未达到设定的轮循次数的上限,系统则按分发目的地址检索出分发信息并按报文格式进行打包分发。如果没有分发任务或超过轮循次数的上限则结束数据分发流程等待下次开始时间。(2)数据接收处理流程图数据接收端程序为一后台守护进程,当守护进程检测到通讯中间件发过来的数据报文时,首先提取报文头并根据报文头确定报文类型、报文长度等信息,从而调用相应的报文处理模块。如果消息类型是接收端数据更新成功后发过来的确认信息,则删除分发任务表中已经发送成功的数据并等待新的数据报文。如果消息类型是需要复制的原始数据,则调用数据更新模块将数据报文中的数据逐条更新到相应的数据库表,如果更新成功则生成确认信息并将确认信息打包成数据报文发送回数据发送端,出现异常更新不成功则放弃该报文,数据发送端在没有收到确认消息的情况下会重新发送数据,直到成功。3、结束语