1 引言
随着预拌混凝土产业在国内的迅速发展,混凝土搅拌站呈现由单站向多站经营的发展趋势,即形成混凝土集团公司。此类公司的规模一般比较大,在物理分布上形成了以某城市为中心,其他搅拌分站多点布局的态势。在这种情况下,集团总部迫切需要某种控制手段,通过它来监管其下属分站的经营情况,以方便高层的决策。
伴随着该行业的激烈竞争,在某些地区出现由某个大型混凝土公司来定价的局面,为了预防这种局面的出现,抑制行业的恶性竞争,混凝土行业协会和混凝土散拌协会需要知晓某个地区的总体生产经营情况,以便出台相应的政策来干预这种不良竞争,促进行业健康持续的发展,他们也迫切需要有一种能将所辖区域的搅拌站生产数据及时获取并进行汇总的信息化管理工具,以便做出合理分析。如何准确高效地获取这些海量数据,是摆在混凝土集团公司,行业协会面前的难题。
2 混凝土行业海量数据协同的构想
通过对大量混凝土搅拌站、混凝土集团公司、混凝土协会的调研,目前国内混凝土行业的逻辑架构可以分为四层,如图1所示清晰地描述了这种层次架构。
最底层是混凝土搅拌站,即混凝土的生产工厂。随着企业规模的扩大,混凝土集团公司随即出现,这类集团公司由多个混凝土搅拌站组成,相对于集团总部,此类混凝土搅拌站称之为搅拌分站。集团公司总部可通过数据协同程序获取下属搅拌分站的相关生产数据;同理混凝土集团公司的上级管理单位即省(市)级混凝土协会,同样可通过数据协同程序来获取其下属混凝土集团的所有生产数据;最上一层为国家级混凝土协会,它也通过同样的方式获取其下属协会的混凝土生产数据。从图1 可以看出,不管是哪一层,数据协同程序(模块)始终是其核心,因此,如何对它进行高效设计成为该行业海量数据协同构想实现的关键。
3 混凝土行业海量数据协同的数学模型
为了能够描述该海量数据协同程序的量级,或者称之为时间复杂度O,以便对各级单位需要进行同步的数据总量有一个清晰的了解,同时也为程序设计人员提供相关参考信息,需要有一个数学模型能对其进行说明。结合之前描述的海量数据协同总体架构和对实际业务的分析,得出表达式(1)所描述的数学模型,其中s表示协同的数据范围。
当s=1时,表示同步的数据范围为混凝土集团公司,即需要将集团公司所有下属搅拌分站的相关业务生产数据同步到总部,这个时候需要同步的数据总量可用表达式(2)表示。
(2)
某搅拌分站需要传输的数据总量可以用表达式(3)表示,其中q表示集团公司下属的第q个搅拌分站。n表示这个分站需要同步的数据的种类数,表达式(3)右边的分量表示该搅拌分站下某类数据要传输的总量。
考虑到搅拌分站的实际情况,每个搅拌分站传输的数据种类数可能不一样,我们用n1表示某集团下属第一个分站需传输数据的种类数,n2表示该集团下属第二个分站需传输数据的种类数,以此类推。当s=1时,实际应用中需要传输的数据总量可以由表达式(4)精确的表示。
取n=max(n1,n2,n3...,nn)即可得到表达式(2),实际上它是表达式(4)的一种特殊情形。在程序设计和实现中,我们可以通过配置文件的灵活设置,来达到这一转换的目的。通过逻辑推理和分析我们可以得到表达式(5),它表示某集团公司下属的d个搅拌分站需要传输的数据总量。
当s=2,即当同步的数据范围为省市级混凝土协会,采用相同的推理可以得到表达式(6), institute D表示某省市级混凝土协会需要传输的数据总量。
同理,当s=3时,可以得到表达式(7),countryD表示国家级混凝土协会需要传输的数据总量。
4 海量数据协同模块的高效设计
4.1 JCS多级缓存设计
JCS是复合式缓存工具,具有配置灵活的特点。JCS缓存对于高并发异步数据的入库程序性能的提升有非常显著的效果。一个JCS可以根据实际情况,定义多个region,而每个region可以定义自己的存储类型和存储对象的数量。在JCS中一般通过map,即键值对(Key、Object)来存储和操作缓存对象。
在该海量数据协同模块中,JCS缓存的主要目的是先将从客户端获取的业务数据缓存起来 ,然后通过一个后台异步程序将相应数据进行入库处理,这样可以显著提升程序的效率。在该海量数据协同模型中,key可定义为一个字符串,而object则是一个复杂的对象,它包含多个属性。
4.2 自定义数据解析器的设计
由表达式(4)可知,集团下属分站需要同步的数据类型数量极有可能不一样,为了解决这类难题,提升程序的可扩展性,需要设计自定义数据解析器。如图2所示是该解析器模型的说明。将clientKey和clientValue放入properties配置文件中,code为要同步的数据类型编码,isSync表示是否要同步,isResend表示是发送正常数据还是异常数据,sqlId表示数据库配置文件中的key,通过它可以找到相应sql语句,captionInfo为日志提示信息。
4.3 两级map实现Server端与Client端的1对多通信
在基于socket的TCP通信程序中,客户端和服务端通过connction建立连接,而客户端的session和服务端的session并非同一个。本文论述的数据协同程序中,1个服务端要对应多个客户端,如何准确的建立两端session的联系,实现两端在各种异常情况下的准确通信,需要在服务端建立一个两级map。以s=1为例进行说明,第一级map的key由常量字符串和搅拌分站id构成,value为服务端新分配的session,第二级map的key的服务端新分配的sessionId,value为常量字符串和搅拌分站id的组合字符串。如图3所示清晰地描述了这种设计思想。
5 海量数据协同模块的高效实现
5.1 客户端实现
客户端的实现主要包括两部分:一部分为基于异步事件的通信模块,主要用途为与服务端建立连接,接收服务端推送过来的数据,其核心方msgReceived,getCurrentConnect;另一部分为异步后台线程,其核心方法为数据同步方法syncErpClientData和网络异常诊断方法dealwithReconnectException。
5.2 服务端实现
与客户端对应,服务端的实现也包括两部分:一部分为基于异步事件的通信模块,主要用途为启动监听并响应客户端的连接请求,接收客户端推送过来的数据并解析,其核心方法为startAcceptor,messageReceived;另一部分为异步后台线程,其核心方法为缓存对象入库处理程序storeCacheObjsToDatabase,其主要作用是从服务器端缓存中取出对象,将之批量写入服务端数据库中,并通知相应客户更新其对应标志位。限于篇幅,这里不一一列举其实现代码。
6 结束语
本文在描述了国内预拌混凝土行业对生产数据迫切要求的现状后,结合行业规则和数据协同总体架构提出了其实现的数学模型,之后,从多角度对该海量数据协同模型的高效设计进行了论述,并最终结合Socket技术和异步线程实现了该模型。该数据协同模型对混凝土行业各级管控单位有着重要的现实意义,为高层提供经营决策的数据支持,对预防混凝土行业的恶性竞争有着重要的导向作用。
参考文献
[1] Michanel o. 数据库设计、应用开发和管理[M]. 清华大学出版社,2007: 181~189.
[2] 陈希孺. 高等数理统计学[M]. 中国科技大学出版社, 1999:291~295.
[3] 陈希孺. 概率论与数理统[M]. 中国科技大学出版社, 2009:110~133.
[4] 王梓坤. 概率论基础及其应用[M]. 北京师范大学出版社, 2007:60~85.
[5] 陈吉平. 构建Oracle高可用环境[M]. 电子工业出版社, 2008: 5~421.
[6] Henning Kohler. Global Database Design based on Storage Space and Update Time Minimization[J]. Universal Computer Science,2009,15(1): 195~240.
作者简介:
温创新(1981-),男,湖南益阳人,中南大学,硕士研究生;主要研究方向和关注领域:Oracle数据库设计及优化、计算机应用、算法研究。
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。