APP下载

处理tibco中间件交互数据的通信系统设计与开发

2018-04-15唐钢信息自动化部胡运杰

电子世界 2018年7期
关键词:发送数据触发器进程

唐钢信息自动化部 胡运杰

0 前言

按照以往的惯例,数据库用来保存数据,而对数据的处理由相应的进程处理。在以前的项目中有过类似的案例,通常的解决思路是MES将XML数据写入本地数据库。数据处理进程内部会维护一个定时器,该定时器会定时触发查询数据库的新数据。进程查询到新数据后,把存储通信数据的XML文档从数据库内读出,然后按照通信XML的格式进行解析,将解析的结果存入变量中,最后将解析完的的数据写入数据库。发送数据也一样,先把待发送数据写入数据库,数据处理进程扫描到新数据后将数据封装成XML文件,然后写入数据库再发送给MES。目前常用的处理方式有很多亟待解决的问题。所以需要一种全新的处理方法解决上述问题。

1 解决思路

原通信的数据处理方式简单直观,技术较成熟。但是有一些不能避免的缺点:数据流复杂,系统开销大,由此导致处理效率低,资源占用高。为了保证数据处理进程处理数据的即时性,只能缩短数据处理进程对数据库进行查询的周期。这样的话,即使数据库中没有新数据也要对数据库进行查询。为了保证通信就需要保持以高频率查询数据库。同时数据先写入本地数据库,再由数据处理进程读出解析,再写入本地数据库,这种处理方式也会额外占用磁盘的读写资源。综上,这种处理方式会导致很多不必要的开销,而且也不能完全弥补它自身的弊端。

为缩短数据处理流程决定去掉后台的数据处理程序,对新数据的处理采用触发方式,收到新数据触发解析,没有新数据时没有额外的资源开销。减少数据的流转过程,数据不再交由后台进程处理,减少服务器硬盘读写操作,降低出错几率的同时减少磁盘资源占用,该部分数据的处理完全交给数据库操作。数据库直接解析或者封装XML数据并保存处理后的信息。

2 设计与实现

2.1 接收数据的解析处理

在与MES通信接口方式中采用传递XML文件的方式进行数据交换。XML作为轻量级的数据储存文件非常适合系统间的数据交换,具有统一的标准语法,并且在传递过程中保留了诸如父/子关系这样的数据结构。在MES系统中由于采用了Tibco中间件,能够简单有效的处理XML文件,而在无人天车的系统中只能手动解析处理通信数据。

在通信报文中有3条用于生产的步进梁跟踪数据对时间要求较高,需要及时对该数据进行处理并下发给WMS系统。在WMS与A模块系统中钢卷信息与钢卷实物的对应关系依靠步进梁的跟踪数据处理。如果步进梁跟踪数据滞后或者不准确会导致严重的安全问题。其它生产数据也需要及时获取并处理,所以及时准确与MES通信非常重要。

在以前的技术解决方案中,数据库不仅作为最后结果的存储器,也可以用作各个处理进程间的“共享缓冲”使用。使用数据库作为“共享缓存”的弊端就是速度慢、开销大。经过技术攻关决定采用新的数据处理结构,从根本上解决通信及时性问题。接收MES数据时,本地数据触发器触发新数据的解析处理,然后将解析后的数据存入本地。向MES发送数据时,本地数据库触发数据封装处理,封装完成后存入MES远程数据表。很明显如果这样处理极大的提高了处理效率,并且降低了资源开销。因为老的处理结构并没有把全部系统资源用于处理数据,而是浪费在了等待、扫描新数据和无用的重复读写上面。

2.2 XML文档的结构

通过查阅有关XML的资料发现,XML文档虽然是线性存储的文档,但是其内部的标准格式能保存完整的数据结构。很多软件都提供了对XML对象的支持。XML DOM文档对象模型类是XML文档的内存中表示形式,DOM文档对象模型能够以编程方式读取、处理和修改XML文档。XML数据在内存中表示是常见的结构化方法,尽管实际的XML数据在文件中时或从另一个对象传入时以线性方式存储。

2.3 构建存储过程

在XML文档结构中,XMLNode对象是DOM树中的基本对象。通过将XML文件转换成对象,能够用程方式操作XML文档。通过查找、学习相关资料发现Oracle有一个包XMLDOM,可以很方便的处理XML对象。

通过oracle的XMLDOM包解析出的数据直接插入数据表中。存储过程运行于数据库内部,不需要再由程序将数据读出来,所以减少了系统资源占用。在实际使用过程中发现数据库的执行效率非常高,解析时间在毫秒级,CPU占用率也极低。

解决了XML数据解析问题后还存在一个问题,就是收到MES新数据后的触发处理,这是解决通信数据处理及时性的关键。采用定时器扫描处理的方式有先天的弊端,并不适合对速度要求较高的环境。通过比较认为采用触发器比较适用于及时处理通信数据。触发器在数据库以独立的对象存储,触发器不需要显示调用而是由一个事件启动运行。

这样当MES有新数据存入本地接口表时,在插入新数据前就会触发解析新数据的存储过程。存储过程会把解析好的数据保存到相应的表。MES发送的原始数据也插入本地接口表存档。使用触发器触发新数据处理,免去了定时器对某个表的频繁读取,减轻了对数据库的冲击,能够提高整个数据运行效率。数据库解析过程对于上层程序来说是透明的,上层进程不需要知道数据来源,只需使用即可。

2.4 发送数据封装

向MES发送的数据采用类似的处理方式,不用后台进程处理,直接由oracle数据库进行封装,然后发送到MES的接口表。oracle对数据的封装调用了oracle的DBMS_XML包,这个包能够把SQL查询的结果转换成XML文件。最后将生成的XML文档放入clob字段并发送给MES。封装XML的过程重点是根据报文结构构造查询结果集,查询结果集要和生成的XML数据结构一致,否则会生成错误的XML文件。

3 结语

经过后期的应用测试,去掉后台处理程序后缩短了数据处理流程。缩短数据流程后数据处理速度更加迅速,满足了生产的实时性要求。新数据通过触发的方式处理速度更加迅速,同时降低了服务器的资源占用。并且通过数据库解析、封装XML通信数据,使数据与应用程序的分层更加清晰。数据的问题全部交由数据库处理,数据库不仅是“容器”还作为“处理器”。前台应用程序只需调用现成处理好的数据。也为以后大项目的分工协作提供了新的方法。

猜你喜欢

发送数据触发器进程
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
一种车载自组织网络的媒体接入控制协议
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
主从JK触发器逻辑功能分析
使用触发器,强化安全性
使用IPSec安全传输数据
社会进程中的新闻学探寻
俄罗斯现代化进程的阻碍