基于Zlib的AVEVA Marine数据异地同步方法的研究与实现

2022-03-12 10:03武宏刚李杰
电脑知识与技术 2022年3期

武宏刚 李杰

摘要:针对AVEVA Marine数据异地同步耗时长的问题,研究减少数据异地同步耗时的方法。该文通过分析AVEVA Marine数据的特点和结构,以化零为整、化大为小的思路,结合Zlib压缩技术对数据进行压缩、传输和解压缩三步连续操作,代替简单的复制文件同步方式,实现了AVEVA Marine数据高效异地同步的方法。

关键词:Zlib;AVEVA Marine;数据同步

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2022)03-0021-02

开放科学(资源服务)标识码(OSID):

1 概述

AVEVA Marine是英国AVEVA公司开发的船舶设计专业软件系统,我司已利用该系统设计完成多个项目。这些项目中其中部分在江苏南通建造,部分在辽宁大连建造。在大连建造的项目,设计数据需要每天夜间整体从我司所在地南通通过网络同步到大连。经过测试,使用操作系统自带的复制粘贴功能或者第三方软件比如Second Copy等进行数据同步,平均每个项目耗时5~6个小时,因此并不能在夜间完成目前所有目标项目的同步。设计数据的及时性直接影响项目作业进度。虽然提升网络专线带宽和服务器硬件条件可以提高同步速度,但是同时也增加了额外成本。目前尚无针对AVEVA Marine数据同步的相关文献记录,但刘丽伟等[1]提出的文件压缩传输思路值得借鉴。本文将以C#语言为开发工具,探讨如何实现在不提升网络带宽和硬件条件的情况下满足要求的同步方法。

2 问题分析

造成同步不能及时完成的原因很多,比如网络带宽、网络稳定性、设备硬件条件、数据量及文件大小等因素都直接影响同步效率。如前文所述,网络带宽、网络稳定性和设备硬件条件等的改善需要增加额外成本,因此本文从AVEVA Marine数据结构入手进行分析。

AVEVA Marine各个项目的设计数据以文件形式分别保存在以三位项目代码命名的主文件夹中,其内部根据文件用途和类型的不同又分别设置了多个子文件夹,其文件结构如图1所示(其中XXX为项目代码)。经统计,我司项目平均总文件大小为100GB左右,总文件数量为190000个左右,每个文件大小为0.52MB。由此可见,需要同步的数据文件总体积较大,而且绝大部分都是體积较小的小文件。

在文件传输中,当传输的是大量的小文件时,传输过程中会因为文件过小,而文件数量过多,使得文件读写请求次数增加,造成大量的硬盘读写操作;同时,文件在的时候偏向于随机写入而不是顺序写入,因此过多的小文件会使得硬盘寻址时间变长,从而从一定程度上影响了文件存储效率[2]。

3 解决方案

基于前文分析,减小传输数据大小,减少传输文件总数量,减少读写请求次数,可以提高数据同步效率。解决目前这种状况最好的方案就是采用数据压缩存储技术将所有零散的文件打包为一个文件,并进行压缩以减少文件大小[1]。

3.1 Zlib简介

Zlib是一个免费的、开源的、无损的、跨平台的数据压缩开发库[3],它使用了无损且可逆的压缩技术,具有达到与WinZip和Winrar等商业软件相近的压缩率,已成功在MySQL、JAVA、3Dmax等众多大型系统中应用[4],其源码可在http://www.zlib.net网站中免费下载使用[5]。Zlib在.Net平台也有对应的开发库,并提供了接口可供程序员调用,可以实现数据的压缩和解压缩,对于使用C#等.Net平台开发语言的程序员来说非常方便[6]。

Zlib在.Net平台进行开发需要进行的准备工作如下:

1)将zlibnet.dll拷贝到程序工程目录下;

2)在程序引用管理器里添加对zlibnet.dll的文件引用;

3)在程序文件头部添加ZLibNet的类库引用:using ZLibNet。

3.2 压缩功能实现代码

private bool zip(string directory) //directory为待压缩文件夹路径

{

Zipper zip = new Zipper(); //将Zipper类实例化

zip.ZipFile = directory + ".zip";//设定压缩后文件名

zip.ItemList.Add(directory + "\\*"); //设定压缩文件范围,*表示所有文件

zip.PathInZip = enPathInZip.Relative;//保持文件夹下所有文件的相对路径

zip.Recurse = true;//递归

zip.Zip();//开始压缩

return true;//返回结果

}

3.3 解压缩功能实现代码

private bool unzip(string filepath) // filepath为待解压缩文件路径

{

UnZipper unzip = new UnZipper();//将UnZipper类实例化

unzip.Destination = file.Replace(".zip", "") + "\\";//文件解压缩后保存的目标文件

unzip.IfFileExist = enIfFileExist.Overwrite;//覆盖已存在文件

unzip.ItemList.Add("*");//设定解压缩范围,*表示解压缩所有文件

unzip.Recurse = true;//递归

unzip.ZipFile = file;//设定待解压缩文件路径

unzip.UnZip();//开始解压缩

return true;//返回结果

}

3.4 数据文件同步设计实现

此同步功能通过C/S(客户端/服务器)结构设计,整个程序分为客户端和服务器端两个程序。南通运行客户端程序,主要完成文件压缩、文件传输和结果发送的功能;大连运行服务器端程序,主要完成结果接收和文件解压缩的功能。其中结果发送和结果接收功能通过TCP协议的套接字(socket)传输实现。

南通客户端程序在数据压缩并拷贝后发送信息到大连[7],大连服务器端在监听信息通知后开始解压缩,各个功能环节实现无缝衔接自动运行。数据文件同步流程如图2所示。

客户端界面如图3所示,设置需要同步的项目,设定开始时间使程序夜间自动运行,程序运行中会在界面窗口显示运行日志。

服务端程序界面如图4所示,设定开始时间,使程序夜间自动运行,收到信息通知后开始运行,并在窗口显示运行日志。

程序开发完成后,进行夜间连续同步测试,测试结果如表1。根据测试结果推算,假设每天从夜间9:30到第二天早上7:00共9.5小时进行数据同步,大约可以同步6个项目,可以完成目前所有大连建造项目的数据同步。

4 结束语

基于Zlib的数据同步程序已经开始试用,并在试用过程中不断持续优化,截至目前程序运行稳定,数据夜间同步可以按计划完成,满足使用需求。此数据同步方法可以实现在不增加额外成本的前提下实现数据完整的异地同步,可以拓展到其他数据、其他企业或者其他行业中得到应用,具有较强的通用性。

参考文献:

[1] 刘丽伟,邓春健.多文件压缩传输及解压缩的方法[J].武汉理工大学学报(交通科学与工程版),2009,33(6):1211-1214.

[2] 周兰凤,赵鹏飞,彭俊杰.基于云环境下一种小文件传输策略研究[J].计算机工程与科学,2016,38(1):20-27.

[3] Zlib 官方网站.Zlib Home Site[EB/OL].[2021-08-20].http://www.zlib.net.

[4] 孫萍.基于ZLib的数字文献压缩技术的设计与实现[J].农业图书情报学刊,2007,19(11):5-7,13.

[5] 李铁兵,雷满生,雷志芳,等.基于Zlib的机车无线重联数据分析软件的实现[J].机车电传动,2017(1):65-68.

[6] 陈钧,刘爱华.基于Zlib的图像差异压缩算法研究与实现[J].东华理工大学学报(自然科学版),2010,33(1):92-96.

[7] 代亮,马海武.基于Zlib的视频监控系统[J].网络安全技术与应用,2006(5):58-59.

【通联编辑:谢媛媛】