盧紹宗 魯玲
摘要按照氣象臺站存儲管理MICAPS數(shù)據(jù)文件、構(gòu)建本地氣象數(shù)據(jù)中心、促進氣象業(yè)務(wù)發(fā)展的要求,基于模塊化設(shè)計原理,設(shè)計了一種MICAPS數(shù)據(jù)文件存儲系統(tǒng)。系統(tǒng)應(yīng)用面向?qū)ο蠹夹g(shù)、線程技術(shù)、.NET框架等編程實現(xiàn)MICAPS數(shù)據(jù)文件的自動化存儲,對資料進行逐日壓縮備份。系統(tǒng)包括自動壓縮備份模塊和手動壓縮備份模塊,在自定義類中調(diào)用WinRAR,然后在主程序中調(diào)用該類將MICAPS數(shù)據(jù)文件壓縮為RAR文件,既節(jié)省服務(wù)器存儲空間,又方便日后使用和管理。系統(tǒng)采用C#編程實現(xiàn),在用戶層面和結(jié)構(gòu)層面都有良好的表現(xiàn)。
關(guān)鍵詞MICAPS;數(shù)據(jù)文件;存儲;壓縮備份
中圖分類號S126文獻標識碼A文章編號0517-6611(2015)31-362-03
Design and Implementation on Storage System of MICAPS Data Files
LU Shaozong, LU Ling(Beihai Meteorological Bureau, Beihai, Guangxi 536000)
AbstractBased on the requirements for storage management of MICAPS data files, construction of local meteorological data center and promoting development of meteorological business, according to the modular design principles, a storage system of MICAPS data files is designed, the system takes advantage of objectoriented programming, threading technology and .NET Framework to achieve the automatic storage of MICAPS data files. The system can compress and backup files daily, including automatic and manual compress and backup modules, the system is devised to call WinRAR in selfdefining class. The main program then call the class to compress MICAPS data files to RAR files. This can save disk space of the server. It is convenient for using and managing the files in the future. The system is implemented by C# programming language and proved to be good in the levels of user and structure.
Key wordsMICAPS; Data files; Storage; Compress and backup
隨著氣象現(xiàn)代化事業(yè)的發(fā)展,對氣象業(yè)務(wù)信息化也提出了新的要求,構(gòu)建本地氣象數(shù)據(jù)中心是一項重要的工作,可進一步實現(xiàn)氣象資料自動化存儲和數(shù)據(jù)共享,提高氣象業(yè)務(wù)數(shù)據(jù)的利用率,促進業(yè)務(wù)發(fā)展。
MICAPS系統(tǒng)是氣象臺站中短期天氣預報業(yè)務(wù)的主要工作平臺[1]。目前中國氣象局新一代衛(wèi)星廣播系統(tǒng)CMACast大幅增加了氣象資料廣播的種類和數(shù)量,地市級氣象臺每日接收的衛(wèi)星廣播數(shù)據(jù)超過200 G,生成的MICAPS產(chǎn)品數(shù)據(jù)文件超過20 G。由于本地MICAPS服務(wù)器存儲空間有限,需要定時刪除數(shù)據(jù)文件以保證系統(tǒng)的正常運行。在專用服務(wù)器上及時備份MICAPS產(chǎn)品數(shù)據(jù)文件,保證資料的完整,積累氣象檔案,構(gòu)建本地業(yè)務(wù)數(shù)據(jù)應(yīng)用環(huán)境,是提高天氣預報準確率、增強氣象臺站業(yè)務(wù)、科技服務(wù)和科研能力的基礎(chǔ),對提高工作效率也有很大幫助[2]。為實現(xiàn)MICAPS產(chǎn)品數(shù)據(jù)文件自動化存儲模式并保障數(shù)據(jù)安全,筆者設(shè)計了一種MICAPS數(shù)據(jù)文件存儲系統(tǒng),應(yīng)用面向?qū)ο缶幊碳夹g(shù)、線程技術(shù)、.NET框架等實現(xiàn)MICAPS服務(wù)器產(chǎn)品數(shù)據(jù)文件在另一臺專用服務(wù)器上的自動化存儲,逐日定時分類壓縮過去24小時的MICAPS產(chǎn)品數(shù)據(jù)文件。該存儲專用服務(wù)器上的壓縮文件可以通過網(wǎng)絡(luò)共享或FTP下載的方式實現(xiàn)對氣象業(yè)務(wù)及科研工作的支持。
1系統(tǒng)設(shè)計
1.1系統(tǒng)功能設(shè)計對系統(tǒng)功能進行設(shè)計時按照“高內(nèi)聚、低耦合”的原則,采用模塊化設(shè)計,將系統(tǒng)劃分為2個功能模塊,即自動壓縮備份MICAPS數(shù)據(jù)文件模塊和手動壓縮備份MICAPS數(shù)據(jù)文件模塊。使用WinRAR創(chuàng)建RAR格式的壓縮文件能提供較好的壓縮率,并允許物理受損的數(shù)據(jù)的恢復。RAR格式能鎖定重要的壓縮文件,防止意外更改。此外,RAR格式可以管理的文件大小幾乎是無限制的。因此,系統(tǒng)采用WinRAR軟件壓縮保存MICAPS產(chǎn)品數(shù)據(jù)文件,便于日后對文件的管理和維護。
正常情況下,系統(tǒng)在每天設(shè)定的時間分別對前24 h的8個MICAPS產(chǎn)品數(shù)據(jù)目錄surface、high、physic、fy2、japan 、japan_thin、ecmwf、ecmwf_thin下的文件進行自動壓縮備份,生成8個RAR文件。當自動備份失敗時,可以運行手動備份程序完成相關(guān)目錄文件的備份。
自動壓縮備份MICAPS數(shù)據(jù)文件模塊工作流程見圖1。
1.2系統(tǒng)配置在存儲專用服務(wù)器上安裝運行MICAPS數(shù)據(jù)文件存儲系統(tǒng)軟件。該服務(wù)器型號為DELL PowerEdge R730,磁盤陣列級別設(shè)為RAID5,安裝Windows Server 2008,存儲空間約為5.4 TB,使用NTFS磁盤格式并選擇壓縮驅(qū)動器以節(jié)約磁盤空間。該服務(wù)器與本地MICAPS服務(wù)器位于同一個局域網(wǎng)內(nèi)。
2系統(tǒng)實現(xiàn)
系統(tǒng)開發(fā)平臺選擇Visual Studio 2010集成開發(fā)環(huán)境,在.NET框架下,使用面向?qū)ο蟮某绦蛟O(shè)計語言C#進行開發(fā)。
2.1自動壓縮備份MICAPS數(shù)據(jù)文件模塊自動壓縮備份MICAPS數(shù)據(jù)文件模塊基于定時器觸發(fā)運行。在存儲專用服務(wù)器上將本地MICAPS服務(wù)器產(chǎn)品數(shù)據(jù)目錄映射為“X:\”,在系統(tǒng)中將待備份文件目錄設(shè)置為“X:\”。在該模塊中設(shè)計有2個類,分別完成2個功能。Syslog類實現(xiàn)寫日志功能,CWinRAR類實現(xiàn)文件壓縮備份功能。在模塊中聲明3個全局變量format1、zippath1和myThread。將字符型變量format1初始化為“yyyyMMdd”,用于表示日期格式。zippath1是一個int類型的一維數(shù)組,該數(shù)組中包含8個元素,初始化其中的元素值分別為surface、high、physic、fy2、japan 、japan_thin、ecmwf、ecmwf_thin,代表需要壓縮的文件夾名稱。myThread是程序中將要創(chuàng)建的線程。
在模塊中添加timer控件并定義為timer1,用于定期引發(fā)事件。將timer1的Interval屬性設(shè)置為86 400 000 ms。定義方法SetTimer1() ,在該方法中設(shè)置每天12:00定時執(zhí)行壓縮備份操作。此外,模塊還定義了RunFileBak()方法,該方法實例化CWinRAR類的一個對象,并使用該對象名調(diào)用RAR方法,實現(xiàn)文件自動壓縮備份并在文本框中給出相應(yīng)的運行信息,說明系統(tǒng)當前的運行情況。因為程序執(zhí)行打包壓縮操作比較費時間,會導致用戶界面長時間處于停滯狀態(tài),因此在模塊中創(chuàng)建一個線程去執(zhí)行壓縮操作,避免出現(xiàn)用戶界面停滯的情況。
正常情況下,文件壓縮完成后,在當天的備份目錄下將生成surface_yyyyMMdd.RAR、high_yyyyMMdd.RAR、physic_yyyyMMdd.RAR等8個文件(“yyyyMMdd”表示當天的年月日格式)。
完成寫日志功能的Syslog類的關(guān)鍵代碼如下:
public static void Add_log(string LogInfo)
{
StreamWriter sw = File.AppendText(@"e:/log/SysLog_cf.log");
sw.WriteLine(DateTime.Now.ToString() + ": " + LogInfo);
sw.Close();
}
完成文件壓縮備份功能的CWinRAR類需要引用Microsoft.Win32命名空間,該命名空間提供了2個用于注冊表操作的類,即Registry類和RegistryKey類。在程序設(shè)計中,通過Registry類找到注冊表中指定的主鍵,再通過RegistryKey類打開指定的子鍵并獲取該子鍵的鍵值[3]。CWinRAR類的關(guān)鍵代碼如下:
public bool RAR(string path, string rarPath, string rarName)
{
bool flag = false;
string rarexe;
RegistryKey regkey;
Object regvalue;
string cmd;
ProcessStartInfo startinfo;
Process process;
try
{
regkey = Registry.ClassesRoot.OpenSubKey(WinRAR_KEY);
regvalue = regkey.GetValue("");
rarexe = regvalue.ToString();
regkey.Close();
rarexe = rarexe.Substring(1, rarexe.Length - 7);
Directory.CreateDirectory(path);
cmd = string.Format("a {0} {1} –r –ibck –tn24",
rarName,
path); //在后臺壓縮過去24小時的文件(含子目錄下的文件)
startinfo = new ProcessStartInfo();
startinfo.FileName = rarexe;
startinfo.Arguments = cmd;
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
startinfo.WorkingDirectory = rarPath;
process = new Process();
process.StartInfo = startinfo;
process.Start();
process.WaitForExit();
if (process.HasExited)
{
flag = true;
}
process.Close();
}
catch (Exception e)
{
throw e;
}
return flag;