肖金赫,鄧義斌
(1.中國(guó)船級(jí)社武漢分社,武漢430022;2.武漢理工大學(xué)能源與動(dòng)力工程學(xué)院,武漢430063)
船舶管理系統(tǒng)船岸數(shù)據(jù)同步機(jī)制分析
肖金赫1,鄧義斌2
(1.中國(guó)船級(jí)社武漢分社,武漢430022;2.武漢理工大學(xué)能源與動(dòng)力工程學(xué)院,武漢430063)
針對(duì)船舶管理系統(tǒng)網(wǎng)絡(luò)特點(diǎn)及其獨(dú)特的分布式數(shù)據(jù)庫(kù)同步需求,分析船岸數(shù)據(jù)同步更新機(jī)制,以數(shù)據(jù)同步組件方式,從數(shù)據(jù)采集、網(wǎng)絡(luò)數(shù)據(jù)交互模型、數(shù)據(jù)緩存、數(shù)據(jù)同步流程等方面設(shè)計(jì)和實(shí)現(xiàn)船岸數(shù)據(jù)同步。通過(guò)軟件技術(shù)解決數(shù)據(jù)同步的可靠性問(wèn)題,為船舶管理系統(tǒng)的數(shù)據(jù)同步提出可行的解決方案。
船舶管理系統(tǒng);分布式數(shù)據(jù)庫(kù);數(shù)據(jù)同步;觸發(fā)器
現(xiàn)代船舶電氣自動(dòng)化程度越來(lái)越高,已從單一設(shè)備、子系統(tǒng)向全船綜合自動(dòng)化發(fā)展[1],部分設(shè)備和船舶的整體狀況已能夠通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)岸基自動(dòng)管理。船舶岸基自動(dòng)化管理有助于航行安全,包括船隊(duì)的管理協(xié)調(diào)、船舶事故原因分析、船舶設(shè)備狀態(tài)監(jiān)控[2]、船舶的維修保養(yǎng)指導(dǎo),以及行政主管部門(mén)的監(jiān)管等;有助于提高航運(yùn)企業(yè)的經(jīng)營(yíng)效率,降低生產(chǎn)成本。由于水運(yùn)的特殊性,其通信不像岸上通信方便、穩(wěn)定和同步,并且船舶具有的分散性、流動(dòng)性及船岸分離等特點(diǎn),使多數(shù)船舶管理系統(tǒng)采用分布式數(shù)據(jù)庫(kù)的架構(gòu)。
構(gòu)建一個(gè)數(shù)據(jù)庫(kù)首先要確定該船的主要功能和主要技術(shù)參數(shù)[3],每一艘船舶都是分布式數(shù)據(jù)庫(kù)系統(tǒng)中具有個(gè)性的獨(dú)立的數(shù)據(jù)庫(kù)。而分布式數(shù)據(jù)庫(kù)的同步是一項(xiàng)復(fù)雜的系統(tǒng)工程,在數(shù)據(jù)的采集、打包、傳輸、解包及更新等步驟中面臨著一致性、安全性、高效性等特殊要求[4-5]。一些商業(yè)數(shù)據(jù)庫(kù)廠商提出較為通用的數(shù)據(jù)庫(kù)復(fù)制方案,如基于電子郵件的同步方式、基于FTP的數(shù)據(jù)同步方式及數(shù)據(jù)同步組件方式,等[6],但仍無(wú)法滿(mǎn)足用戶(hù)的多樣性需求[7]。目前,分布式數(shù)據(jù)庫(kù)通信方式以移動(dòng)載體數(shù)據(jù)庫(kù)和無(wú)線(xiàn)網(wǎng)絡(luò)應(yīng)用為主。薛明剛等[8]將基于電子郵件的船岸數(shù)據(jù)同步方式用于船舶燃料監(jiān)測(cè)系統(tǒng),但是存在郵件丟失和郵件的發(fā)送和接收順序不一致的情況,使數(shù)據(jù)同步變得非常復(fù)雜。因此需要針對(duì)船舶管理系統(tǒng)較為獨(dú)特的船岸同步需求,設(shè)計(jì)靈活方便的數(shù)據(jù)同步組件,使船舶管理系統(tǒng)從岸基版擴(kuò)展到船舶版,實(shí)現(xiàn)完整的船岸一體化船舶管理系統(tǒng)。
1.1 分布式數(shù)據(jù)庫(kù)系統(tǒng)網(wǎng)絡(luò)架構(gòu)
大多數(shù)船舶管理系統(tǒng)采用分布式數(shù)據(jù)庫(kù)系統(tǒng)網(wǎng)絡(luò)架構(gòu),見(jiàn)圖1。
圖1 分布式數(shù)據(jù)庫(kù)系統(tǒng)網(wǎng)絡(luò)架構(gòu)
總庫(kù)數(shù)據(jù)服務(wù)器是岸基版船舶管理系統(tǒng)的數(shù)據(jù)中心,匯集整個(gè)系統(tǒng)的數(shù)據(jù)。各分庫(kù)布置在相應(yīng)的船舶上,只管理與本船相關(guān)的數(shù)據(jù)信息。不管是船舶版還是岸基版的船舶管理系統(tǒng),只對(duì)本地?cái)?shù)據(jù)庫(kù)進(jìn)行操作,通過(guò)總庫(kù)與各分庫(kù)的數(shù)據(jù)同步來(lái)完成系統(tǒng)的數(shù)據(jù)更新。這種架構(gòu)優(yōu)點(diǎn)突出[9]。
1.2 船舶管理系統(tǒng)數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn)
1)為方便進(jìn)行船岸數(shù)據(jù)交換,保持船端和岸端數(shù)據(jù)庫(kù)結(jié)構(gòu)的一致性,并且把船岸業(yè)務(wù)數(shù)據(jù)在數(shù)據(jù)表層面上分離,把船舶版的管理數(shù)據(jù)與岸基版的管理數(shù)據(jù)分別設(shè)計(jì)在不同的數(shù)據(jù)表中。
2)為保持?jǐn)?shù)據(jù)一致性同時(shí)減小數(shù)據(jù)傳輸量,在數(shù)據(jù)交換時(shí),船舶分庫(kù)的變更數(shù)據(jù)全部更新至岸基總數(shù)據(jù)庫(kù),而僅把總庫(kù)中與該船相關(guān)的數(shù)據(jù)更新至相應(yīng)的分庫(kù)。
1.3 數(shù)據(jù)庫(kù)之間的網(wǎng)絡(luò)狀況特點(diǎn)
總庫(kù)所在網(wǎng)絡(luò)有固定IP影射到外網(wǎng)。分庫(kù)所在網(wǎng)絡(luò)為動(dòng)態(tài)分配IP,無(wú)固定IP,環(huán)境不穩(wěn)定,但都可以保證有連接機(jī)會(huì)。
1.4 數(shù)據(jù)同步功能要求和特點(diǎn)
1)記錄分庫(kù)的數(shù)據(jù)變更,定時(shí)同步分庫(kù)變更數(shù)據(jù)到總庫(kù)。
2)記錄總庫(kù)的數(shù)據(jù)變更,將總庫(kù)變更數(shù)據(jù)同步到相應(yīng)的分庫(kù)。總庫(kù)并不是把全部變更數(shù)據(jù)同步到分庫(kù),而是把與該分庫(kù)有關(guān)的變更數(shù)據(jù)進(jìn)行同步。
3)各分庫(kù)之間不需要進(jìn)行數(shù)據(jù)同步。
4)鑒于船岸網(wǎng)絡(luò)連接的不穩(wěn)定,必須采用一種可靠的工作機(jī)制,保證同步數(shù)據(jù)的正確性。
1.5 設(shè)計(jì)程序框架
根據(jù)數(shù)據(jù)庫(kù)部署的網(wǎng)絡(luò)結(jié)構(gòu),采用C/S程序架構(gòu),在總庫(kù)所在網(wǎng)絡(luò)的外網(wǎng)服務(wù)器部署總庫(kù)同步服務(wù)端,在分庫(kù)所在的網(wǎng)絡(luò)部署分庫(kù)同步服務(wù)端。為了方便開(kāi)發(fā)和維護(hù),把數(shù)據(jù)同步程序集成在一起開(kāi)發(fā),形成一個(gè)同步服務(wù)程序,通過(guò)配置文件來(lái)決定該同步服務(wù)程序是分庫(kù)還是主庫(kù),方便更新和維護(hù)。
1)數(shù)據(jù)庫(kù)自動(dòng)同步配置工具。同步服務(wù)配置程序,負(fù)責(zé)定制同步任務(wù)和網(wǎng)絡(luò)通信的基礎(chǔ)參數(shù)。
2)數(shù)據(jù)同步服務(wù)程序。負(fù)責(zé)查詢(xún)本地?cái)?shù)據(jù)庫(kù),將變更數(shù)據(jù)發(fā)送到遠(yuǎn)端同步程序,同時(shí)負(fù)責(zé)把遠(yuǎn)端發(fā)來(lái)的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。
3)上傳數(shù)據(jù)任務(wù)。分庫(kù)上傳到總庫(kù)的查詢(xún)?nèi)蝿?wù),任務(wù)在分庫(kù)配置程序定義。
4)接受數(shù)據(jù)任務(wù)。分庫(kù)接收總庫(kù)數(shù)據(jù)的查詢(xún)?nèi)蝿?wù),任務(wù)在分庫(kù)配置程序定義,通過(guò)網(wǎng)絡(luò)發(fā)送到總庫(kù)服務(wù)端,總庫(kù)服務(wù)端將會(huì)依據(jù)這個(gè)查詢(xún)?nèi)蝿?wù)來(lái)查詢(xún)要同步的數(shù)據(jù),發(fā)送給分庫(kù)服務(wù)程序。
5)分庫(kù)數(shù)據(jù)時(shí)間戳。分庫(kù)只會(huì)從總庫(kù)下載這個(gè)時(shí)間以后的數(shù)據(jù)。
6)同步服務(wù)網(wǎng)絡(luò)配置參數(shù)。
7)本地修改緩存。從網(wǎng)絡(luò)端傳來(lái)的數(shù)據(jù),不會(huì)直接寫(xiě)入數(shù)據(jù)庫(kù),先存入本地修改緩存,只有全部網(wǎng)絡(luò)數(shù)據(jù)交互完畢才會(huì)把本地修改緩存數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。
8)本地刪除緩存。分庫(kù)把數(shù)據(jù)傳到網(wǎng)絡(luò)的同時(shí),會(huì)把這些數(shù)據(jù)寫(xiě)入本地刪除緩存,待全部同步數(shù)據(jù)交互完畢才會(huì)執(zhí)行對(duì)數(shù)據(jù)庫(kù)的刪除。
9)注冊(cè)啟動(dòng)數(shù)據(jù)同步服務(wù)。
10)停止反注冊(cè)數(shù)據(jù)同步服務(wù)。
11)異常日志。
2.1 數(shù)據(jù)采集
采用差異同步法得到最小數(shù)據(jù)變動(dòng)集,進(jìn)行數(shù)據(jù)同步可以減小傳輸數(shù)據(jù)量[10]。利用數(shù)據(jù)庫(kù)自身的數(shù)據(jù)觸發(fā)器功能來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的變更記錄,對(duì)每張表建立一個(gè)變更記錄表,變更記錄表比原表多兩個(gè)字段。
1)字段一,標(biāo)識(shí)本次數(shù)據(jù)操作是Insert還是Delete,對(duì)于數(shù)據(jù)庫(kù)記錄的上傳數(shù)據(jù)操作,數(shù)據(jù)庫(kù)實(shí)際上是先執(zhí)行Delete,然后執(zhí)行一次Insert,因此,一條記錄的上傳數(shù)據(jù)操作,將會(huì)產(chǎn)生2條記錄到變更記錄表。
2)字段二,數(shù)據(jù)類(lèi)型為datetime,記錄數(shù)據(jù)的變更時(shí)間。
對(duì)原表進(jìn)行的所有數(shù)據(jù)操作將會(huì)記錄到相應(yīng)的變更記錄表中。
2.2 數(shù)據(jù)交互模型
鑒于網(wǎng)絡(luò)傳輸數(shù)據(jù)的不穩(wěn)定性,分庫(kù)與主庫(kù)通過(guò)網(wǎng)絡(luò)交互數(shù)據(jù)時(shí),并不直接寫(xiě)入數(shù)據(jù)庫(kù),而是存入本地緩存文件,當(dāng)網(wǎng)絡(luò)數(shù)據(jù)交互完畢,對(duì)數(shù)據(jù)庫(kù)的操作無(wú)異常發(fā)生時(shí),才是一次有效的同步。主庫(kù)與分庫(kù)的網(wǎng)絡(luò)交互模型見(jiàn)圖2。
圖2 主庫(kù)與分庫(kù)之間的數(shù)據(jù)同步模型
2.3 數(shù)據(jù)庫(kù)寫(xiě)入緩存設(shè)計(jì)
數(shù)據(jù)緩存分為2類(lèi),分別為修改緩存和刪除緩存,兩者結(jié)構(gòu)完全相同,其作用如下。
1)從遠(yuǎn)端網(wǎng)絡(luò)發(fā)來(lái)的同步數(shù)據(jù)記錄,這些記錄將會(huì)寫(xiě)入本地?cái)?shù)據(jù)庫(kù)的原始表中,因此把這些數(shù)據(jù)寫(xiě)入本地的修改緩存文件。
2)本地備份表的變更記錄,在發(fā)送到遠(yuǎn)端服務(wù)器成功后,需要寫(xiě)入刪除緩存文件。
2.4 數(shù)據(jù)同步流程設(shè)計(jì)
總庫(kù)同步服務(wù)程序啟動(dòng)后,就啟動(dòng)網(wǎng)絡(luò)監(jiān)聽(tīng)線(xiàn)程,等待分庫(kù)發(fā)起同步連接。總庫(kù)同步工作流程見(jiàn)圖3,有3類(lèi)線(xiàn)程。
1)等候網(wǎng)絡(luò)連接線(xiàn)程。等待分庫(kù)的服務(wù)程序接入。
2)接收和發(fā)送同步數(shù)據(jù)線(xiàn)程。與分庫(kù)同步線(xiàn)程進(jìn)行交互,傳遞和接收同步數(shù)據(jù),同時(shí)把數(shù)據(jù)寫(xiě)入本地緩存文件。
3)枚舉緩存線(xiàn)程。枚舉本地?cái)?shù)據(jù)緩存文件,寫(xiě)入數(shù)據(jù)庫(kù),支持?jǐn)帱c(diǎn)寫(xiě)入。
圖3 總庫(kù)同步服務(wù)工作流程圖
分庫(kù)同步工作流程見(jiàn)圖4。
分庫(kù)同步服務(wù)程序啟動(dòng)后,分庫(kù)同步申請(qǐng)線(xiàn)程將定時(shí)發(fā)起,定時(shí)時(shí)間間隔由用戶(hù)設(shè)置。線(xiàn)程首先枚舉修改緩存和刪除緩存,寫(xiě)入數(shù)據(jù)到數(shù)據(jù)庫(kù);然后向服務(wù)器發(fā)起連接,連接成功后查詢(xún)本分庫(kù)的數(shù)據(jù)變更集,發(fā)到服務(wù)器端,在收到服務(wù)器端寫(xiě)入緩存完畢的反饋后,將本地?cái)?shù)據(jù)變更集刪除。至此,分庫(kù)數(shù)據(jù)向總庫(kù)更新傳輸過(guò)程已完成,將數(shù)據(jù)更新到總庫(kù)服務(wù)器的工作由服務(wù)器端的枚舉緩存線(xiàn)程完成。此后分庫(kù)同步服務(wù)將向總庫(kù)服務(wù)器申請(qǐng)將總庫(kù)有關(guān)本分庫(kù)的數(shù)據(jù)更新同步到本分庫(kù)中。首先將該分庫(kù)的數(shù)據(jù)同步配置文件中下載任務(wù)列表發(fā)送到總庫(kù)服務(wù)器。對(duì)于一些所有分庫(kù)都需要的公共基礎(chǔ)數(shù)據(jù),可以不指定查詢(xún)條件;而對(duì)于本船相關(guān)的數(shù)據(jù),可以在下載任務(wù)列表中將船舶作為查詢(xún)條件,由總庫(kù)服務(wù)器從數(shù)據(jù)庫(kù)中查詢(xún)出相關(guān)數(shù)據(jù)形成數(shù)據(jù)包,發(fā)送到相應(yīng)的分庫(kù),由分庫(kù)同步服務(wù)線(xiàn)程寫(xiě)入數(shù)據(jù)庫(kù),從而完成主庫(kù)與分庫(kù)之間的同步數(shù)據(jù)傳輸。
圖4 分庫(kù)同步服務(wù)程序工作流程
由于各分庫(kù)數(shù)據(jù)同步時(shí)間不一致,而且總庫(kù)上一些公共數(shù)據(jù)變更,每個(gè)分庫(kù)都需要進(jìn)行同步,所以不能對(duì)服務(wù)器端的變更記錄表進(jìn)行刪除操作,因此引入上次下載時(shí)間戳,每次同步后,在分庫(kù)保留一個(gè)時(shí)間戳,這個(gè)時(shí)間戳記錄該分庫(kù)取得服務(wù)器變更數(shù)據(jù)的最后時(shí)間,當(dāng)下次同步查詢(xún)數(shù)據(jù)時(shí),把上次時(shí)間戳反饋給總庫(kù)服務(wù)端,總庫(kù)服務(wù)根據(jù)分庫(kù)的時(shí)間戳,過(guò)濾出該時(shí)間以后的變更數(shù)據(jù)進(jìn)行同步。
1)數(shù)據(jù)傳輸。構(gòu)建本地緩存能有效避免由于網(wǎng)絡(luò)不穩(wěn)定造成數(shù)據(jù)丟失引發(fā)的數(shù)據(jù)不一致問(wèn)題。通過(guò)網(wǎng)絡(luò)交互邏輯來(lái)保證正確有效的緩存才是一次完整的同步數(shù)據(jù)傳輸操作,從而解決網(wǎng)絡(luò)不穩(wěn)定可能引發(fā)的問(wèn)題。
2)緩存數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)。從緩存向數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù)時(shí),記錄寫(xiě)入的斷點(diǎn)。一旦數(shù)據(jù)庫(kù)服務(wù)器斷電或應(yīng)用程序異常崩潰,下次程序啟動(dòng)時(shí),可以接續(xù)斷點(diǎn)向數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù),從而保證數(shù)據(jù)庫(kù)的數(shù)據(jù)完備性。
3)數(shù)據(jù)沖突。由于船岸數(shù)據(jù)表分離,業(yè)務(wù)流程產(chǎn)生的船岸數(shù)據(jù)不會(huì)發(fā)生沖突;對(duì)于一些公共基礎(chǔ)數(shù)據(jù),全都由總庫(kù)在負(fù)責(zé)管理,同步到各分庫(kù)也不會(huì)發(fā)生沖突,而各分庫(kù)的專(zhuān)用數(shù)據(jù)都有船舶編碼作為主鍵,也保證不會(huì)發(fā)生數(shù)據(jù)沖突。
該數(shù)據(jù)同步更新機(jī)制的實(shí)時(shí)性受制于網(wǎng)絡(luò)環(huán)境,但只要有可用網(wǎng)絡(luò),數(shù)據(jù)同步就會(huì)自動(dòng)進(jìn)行,并且能保證數(shù)據(jù)的一致性和完備性,這非常適用于實(shí)時(shí)性要求不那么嚴(yán)格的船舶管理等相關(guān)業(yè)務(wù),從而為實(shí)現(xiàn)完整的船岸一體化船舶管理系統(tǒng)奠定基礎(chǔ)。
目前該技術(shù)已在長(zhǎng)江上航行的某些船舶上成功應(yīng)用,其數(shù)據(jù)同步效果良好。
[1]劉沿陽(yáng),邵 旻.艦船綜合自動(dòng)化系統(tǒng)的現(xiàn)狀與發(fā)展趨勢(shì)[J].船舶工程,2006,28(2):63-66.
[2]吳志東,楊士喜.基于3G無(wú)線(xiàn)通信網(wǎng)絡(luò)的船舶遠(yuǎn)程監(jiān)控系統(tǒng)研究[J].船海工程,2011(5):16-19.
[3]張茴棟,何炎平.基于EXCELL的ACCESS起重船數(shù)據(jù)庫(kù)的實(shí)現(xiàn)[J].船海工程,2010(3):5-9.
[4]IQBAL H,MUHAMMAD M A.SQL query based data synchronization in heterogeneous database environment[C]∥2012 International Conterence on Computer Communication and Informatics(ICCCI2012),Jan,10-12, 2012,Coimbatore,INDIA,2012:1-5.
[5]ZHANG Y H,KANG P.The data synchronization server design based on middleware technology[C]∥2010 2nd International Conference on Computer Engineering and Technology,2010(3):462-466.
[6]姜亦學(xué).分布式數(shù)據(jù)庫(kù)系統(tǒng)同步技術(shù)研究[D].長(zhǎng)春:長(zhǎng)春理工大學(xué),2008.
[7]LOU X A,CHEN J,YUAN P.The design and implementation of data synchronization mechanism in the food tracing system[C]∥Advances in Computer Science,Environment,Ecoinformatics,and Education-International Conference 2011,Part V,Communications in Computer and Information Science,2011:175-179.
[8]薛明剛,徐承飛,趙衛(wèi)麗,等.船岸一體化數(shù)據(jù)同步的實(shí)現(xiàn)[J].中國(guó)修船,2011,24(1):21-24.
[9]閔 媛,熊前興.移動(dòng)數(shù)據(jù)庫(kù)數(shù)據(jù)同步技術(shù)研究[J].武漢理工大學(xué)學(xué)報(bào):交通科學(xué)與工程版,2008,32 (2):156-159.
[10]孫廣雨,山 嵐.數(shù)據(jù)同步中差異數(shù)據(jù)捕獲的設(shè)計(jì)與實(shí)現(xiàn)[J].北京化工大學(xué)學(xué)報(bào):自然科版,2011,38 (3):125-128.
Data Synchronization Mechanism for Ship Management System
XIAO Jin-he1,DENG Yi-bin2
(1Wuhan Branch of China Classification Society,Wuhan 430000,China; 2 School of Energy and Power Engineering,Wuhan University of Technology,Wuhan 430063,China)
According to network architecture features of ship management system and its unique requirements of distributed database synchronization,the ship-to-shore data synchronization updatemechanism is researched.Bymeans of data synchronization components,the ship-to-shore data synchronization is designed and realized in aspects of the data acquisition,network data interactionmodel,data caching and data synchronization process.The reliability of data synchronization is ensured by software technology,offering feasible solutions to the data synchronization of ship management system.
ship management system;distributed database;data synchronization;trigger
10.3963/j.issn.1671-7953.2015.03.030
U692
A
1671-7953(2015)03-0128-04
2015-02-09
修回日期:2015-03-10
交通運(yùn)輸部科技項(xiàng)目(2012lg0122)
肖金赫(1977-),男,碩士,工程師
研究方向:船舶電氣系統(tǒng)檢驗(yàn)
E-mail:jhxiao@ccs.org.cn