◎文/喬金海 叢磊
當(dāng)前,出版企業(yè)的大量數(shù)據(jù)如機(jī)構(gòu)數(shù)據(jù)、人員數(shù)據(jù)、產(chǎn)品數(shù)據(jù)、政務(wù)數(shù)據(jù)、商務(wù)數(shù)據(jù)、用戶數(shù)據(jù)和內(nèi)容數(shù)據(jù)等分散在黨和政府部門(mén)、出版單位、發(fā)行商、圖書(shū)館、科研院所、廣電商平臺(tái)、電商平臺(tái)等等主體當(dāng)中?,F(xiàn)有的數(shù)據(jù)交換技術(shù)往往不能將這些數(shù)據(jù)有機(jī)地結(jié)合起來(lái),收入數(shù)據(jù)較分散,導(dǎo)致相關(guān)部門(mén)和出版行業(yè)主體之間信息不暢,信息系統(tǒng)缺乏互聯(lián)互通,產(chǎn)業(yè)鏈上的數(shù)據(jù)不能真正地融合起來(lái),要達(dá)到匯聚、高效、共享、聯(lián)合、協(xié)同更是天方夜譚。
而且,當(dāng)前國(guó)內(nèi)外出版企業(yè)普遍采用“FTP+XML”接口模式進(jìn)行數(shù)據(jù)交換,此模式開(kāi)發(fā)的接口采用的是“軟件代碼與業(yè)務(wù)代碼交織在一起”的模式,任意節(jié)點(diǎn)業(yè)務(wù)規(guī)則的變化都會(huì)導(dǎo)致所有接口需要重新設(shè)計(jì)。此種數(shù)據(jù)交換模式無(wú)論是研發(fā)還是后續(xù)的維護(hù)和修改都耗資巨大,遠(yuǎn)遠(yuǎn)超出了出版企業(yè)的承受能力。因此,通過(guò)通用數(shù)據(jù)交換耦合器實(shí)現(xiàn)數(shù)據(jù)(含文件)的安全、可控、準(zhǔn)確傳遞是很有必要的。
通用數(shù)據(jù)交換耦合器承擔(dān)了不同的“端交換方案”中的公有部分,同時(shí)接收來(lái)自不同出版企業(yè)或者第三方服務(wù)商所提供的“端交換方案”,對(duì)其進(jìn)行準(zhǔn)確地分析處理,再轉(zhuǎn)化為相對(duì)應(yīng)主體所需要的格式,完成對(duì)不同信息系統(tǒng)數(shù)據(jù)的統(tǒng)一部署管理和滿足各個(gè)信息系統(tǒng)之間的數(shù)據(jù)交換需求??紤]到目前出版行業(yè)以及與其有業(yè)務(wù)聯(lián)系的企業(yè)所建立的信息系統(tǒng)大都采用關(guān)系型數(shù)據(jù)庫(kù)存放數(shù)據(jù),把通用數(shù)據(jù)交換的研究鎖定在關(guān)系型數(shù)據(jù)庫(kù)尤其是各種主流的關(guān)系型數(shù)據(jù)庫(kù)是可行的而且極具代表性的。
通用數(shù)據(jù)交換耦合器首先是一個(gè)異構(gòu)數(shù)據(jù)的管理平臺(tái),可以連接到各個(gè)異構(gòu)數(shù)據(jù)庫(kù),比如Oracle、SQL Server、Mysql等,并且能夠進(jìn)行實(shí)時(shí)的新增、刪除、修改、查詢等操作。其次,通用數(shù)據(jù)交換耦合器又是相關(guān)數(shù)據(jù)的轉(zhuǎn)換備份平臺(tái),在耦合器這個(gè)平臺(tái)上可以把滿足條件的數(shù)據(jù)轉(zhuǎn)化為XML格式的文件備份起來(lái),也可以把所有需要備份的數(shù)據(jù)轉(zhuǎn)存到對(duì)應(yīng)的數(shù)據(jù)庫(kù)中,利用數(shù)據(jù)庫(kù)的備份功能統(tǒng)一備份,使其在系統(tǒng)當(dāng)中流動(dòng)起來(lái)。再次,數(shù)據(jù)交換耦合器是異構(gòu)數(shù)據(jù)間數(shù)據(jù)傳輸和交換的控制平臺(tái),通過(guò)定義數(shù)據(jù)傳輸?shù)姆椒ú呗?,?shí)現(xiàn)定時(shí)或臨時(shí)指定的增量或全部的數(shù)據(jù)的傳輸、加載。
通用數(shù)據(jù)交換耦合器需要具有以下具體功能特性:
1.傳輸可靠。要確保數(shù)據(jù)的穩(wěn)定、可靠傳輸,做到唯一性、不重復(fù)、不遺漏,實(shí)現(xiàn)高效、穩(wěn)定、完整傳輸。
2.接入簡(jiǎn)便。通過(guò)簡(jiǎn)單的配置就可以連接各種異構(gòu)數(shù)據(jù)庫(kù),允許同時(shí)連接多個(gè)不同的數(shù)據(jù)庫(kù),各個(gè)應(yīng)用能夠以相對(duì)簡(jiǎn)便的方式接入系統(tǒng),進(jìn)行數(shù)據(jù)的接收、存儲(chǔ)、發(fā)送、加載,進(jìn)而簡(jiǎn)化應(yīng)用系統(tǒng)開(kāi)發(fā)工作量與開(kāi)發(fā)難度。
3.操縱方便。系統(tǒng)可以方便地讀取各個(gè)數(shù)據(jù)源的數(shù)據(jù)字段,得到對(duì)應(yīng)的表、函數(shù)、視圖的清單,也可以通過(guò)開(kāi)發(fā)好的圖形界面直接進(jìn)行操控;可以直觀方便地對(duì)數(shù)據(jù)進(jìn)行增刪改查,也可以采用緩存提取的方式逐段提取數(shù)據(jù),不會(huì)造成數(shù)據(jù)量查詢過(guò)大時(shí)出現(xiàn)的死機(jī)現(xiàn)象。
4.數(shù)據(jù)轉(zhuǎn)存??梢园训玫降臄?shù)據(jù)轉(zhuǎn)存成XML格式的文件,既方便對(duì)數(shù)據(jù)進(jìn)行備份,也可以滿足把數(shù)據(jù)轉(zhuǎn)出后再加工的對(duì)應(yīng)要求。
5.靈活交換。在數(shù)據(jù)交換耦合器中可以定義靈活多樣的數(shù)據(jù)傳輸和交換策略,借助通用數(shù)據(jù)交換XML文件或者在任意兩個(gè)數(shù)據(jù)源之間按定義好的交換策略進(jìn)行數(shù)據(jù)傳輸和交換。
6.安全管理。通過(guò)對(duì)用戶增加權(quán)限,限制用戶可操作的數(shù)據(jù)源,讓指定用戶只能操作指定的數(shù)據(jù)源,從而維持系統(tǒng)的相對(duì)安全。
7.多種傳輸模式。支持一對(duì)一、一對(duì)多的數(shù)據(jù)傳輸模式,既能夠定時(shí)定向傳輸變更數(shù)據(jù),也可以臨時(shí)指定任意數(shù)據(jù)的傳輸。
8.數(shù)據(jù)安全。能夠?qū)鬏數(shù)臄?shù)據(jù)進(jìn)行加密、解密,以保證數(shù)據(jù)安全;請(qǐng)求代理服務(wù),隨時(shí)響應(yīng)用戶請(qǐng)求,完成各類數(shù)據(jù)庫(kù)的查詢和新增、刪除、修改任務(wù)。
9.遠(yuǎn)程監(jiān)控。能夠遠(yuǎn)程監(jiān)控并且維護(hù)數(shù)據(jù)交換系統(tǒng)的運(yùn)行狀態(tài),在系統(tǒng)出現(xiàn)異常情況的時(shí)候能夠及時(shí)提供報(bào)警信息。
10.遠(yuǎn)程配置管理。對(duì)數(shù)據(jù)交換系統(tǒng)進(jìn)行遠(yuǎn)程管理,包括定義交換系統(tǒng)之間的連接關(guān)系、定義數(shù)據(jù)路由規(guī)則、配置交換系統(tǒng)各功能參數(shù)等。
1.開(kāi)發(fā)工具和開(kāi)發(fā)環(huán)境
耦合器選在Windows操作系統(tǒng)下進(jìn)行開(kāi)發(fā),開(kāi)發(fā)工具選擇Visual Studio Code。之所以選擇此開(kāi)發(fā)工具的原因是它是跨平臺(tái)的編輯器,支持多種編程語(yǔ)言,并且內(nèi)置Git集成,方便版本管理。Visual Studio Code代碼還提供了代碼管理功能,例如轉(zhuǎn)到定義、查看定義、查找所有引用并重命名符號(hào),通過(guò)右鍵單擊代碼文件可以在VSC中輕松找到這些功能。同時(shí),Visual Studio Code帶有內(nèi)置調(diào)試器,這也是其主要功能之一,有助于加速任何程序員的編輯、編譯和調(diào)試循環(huán)。但是在默認(rèn)情況下,它僅帶有支持NodeJS的調(diào)試器,該調(diào)試器可以調(diào)試任何轉(zhuǎn)譯為Java的內(nèi)容,也可以將擴(kuò)展名用于其他運(yùn)行時(shí)。
耦合器選取Mysql數(shù)據(jù)庫(kù)作為平臺(tái)運(yùn)行的支持?jǐn)?shù)據(jù)庫(kù),將基礎(chǔ)配置信息放在數(shù)據(jù)庫(kù)中,并將數(shù)據(jù)交換過(guò)程當(dāng)中需要備份的數(shù)據(jù)備份在Mysql數(shù)據(jù)庫(kù)中。
2.耦合器設(shè)計(jì)過(guò)程中的關(guān)鍵點(diǎn)
通用數(shù)據(jù)交換耦合器在設(shè)計(jì)過(guò)程當(dāng)中需要明確以下關(guān)鍵點(diǎn):
(1)XML中的內(nèi)容、屬性、元素等到數(shù)據(jù)庫(kù)中字段的映射。
(2)XML中屬性的相對(duì)關(guān)系到數(shù)據(jù)庫(kù)中類與類的關(guān)系和字段之間的映射關(guān)系。
(3)數(shù)據(jù)交換服務(wù)需要根據(jù)模型編號(hào)在模型庫(kù)中提取模型定義的XML文件并生成模型對(duì)象,然后根據(jù)模型定義中的具體數(shù)據(jù)類型調(diào)用特定數(shù)據(jù)采集插件。
(4)數(shù)據(jù)采集插件根據(jù)模型中定義的數(shù)據(jù)源及數(shù)據(jù)集信息并根據(jù)具體參數(shù)值從數(shù)據(jù)源中檢索數(shù)據(jù)解釋和運(yùn)行數(shù)據(jù)交換模型生成中立格式的數(shù)據(jù),如果模型中包含腳本則需要在生成過(guò)程中按照事件驅(qū)動(dòng)的方式執(zhí)行腳本。
(5)由于數(shù)據(jù)源的類型是不唯一的,可以是數(shù)據(jù)庫(kù),也可以是文件,所以數(shù)據(jù)采集組件需要實(shí)現(xiàn)統(tǒng)一接口。
3.耦合器數(shù)據(jù)流和工作流系統(tǒng)分析交互
數(shù)據(jù)交換的基本流程是用對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接管理工具來(lái)訪問(wèn)源數(shù)據(jù)庫(kù),將待交換的數(shù)據(jù)在一定的轉(zhuǎn)換策略方法下導(dǎo)出為加密的XML文檔,最后再通過(guò)解密工具和數(shù)據(jù)庫(kù)連接將得到的數(shù)據(jù)存儲(chǔ)到相對(duì)應(yīng)的數(shù)據(jù)庫(kù)中。在國(guó)內(nèi)外的一些信息系統(tǒng)中,耦合器中要完成的工作流交互和應(yīng)用越來(lái)越受到重視,如IT行業(yè)、電氣行業(yè)等出版以外的行業(yè)進(jìn)行數(shù)據(jù)交換時(shí),不僅要交換一些靜態(tài)數(shù)據(jù)如工作人員信息、商品信息、電氣設(shè)備信息,還要把對(duì)應(yīng)的工作流應(yīng)用交換到各級(jí)公司當(dāng)中,讓工作流延伸到范圍之外,使其既可以在公司內(nèi)部進(jìn)行流轉(zhuǎn),也可以在不同公司之間進(jìn)行流轉(zhuǎn)。比如電氣行業(yè)中的一個(gè)檢修工作流,就需要各個(gè)地區(qū)、各個(gè)部門(mén)的人配合起來(lái),有時(shí)候甚至還需要上下游的企業(yè)單位都融入到這個(gè)流程中來(lái)。
工作流應(yīng)用系統(tǒng)對(duì)數(shù)據(jù)交換系統(tǒng)而言是密不可分的,交互主要體現(xiàn)在以下幾個(gè)方面:
(1)技術(shù)人員通過(guò)工作流應(yīng)用調(diào)用通用數(shù)據(jù)交換系統(tǒng),將數(shù)據(jù)處理成對(duì)方所需要的樣子并且交給對(duì)方。
(2)第三方技術(shù)人員通過(guò)通用數(shù)據(jù)交換系統(tǒng)調(diào)用工作流應(yīng)用進(jìn)而完成工作流的操作流程,比如激活、注冊(cè)、管理、阻塞、等待,等等。
(3)技術(shù)人員同時(shí)在工作流應(yīng)用和數(shù)據(jù)交換系統(tǒng)中完成對(duì)數(shù)據(jù)的加密處理,從而形成一個(gè)閉環(huán)的信息交換流,保護(hù)數(shù)據(jù)的完整性。
4.數(shù)據(jù)庫(kù)連接
由于系統(tǒng)初步開(kāi)發(fā)時(shí)用的是Mysql數(shù)據(jù)庫(kù),所以數(shù)據(jù)庫(kù)連接工具采用Navicat。Navicat premium是一款數(shù)據(jù)庫(kù)管理工具,也是可多重連線資料庫(kù)的管理工具,它具有完備的功能特性,并有以下幾個(gè)優(yōu)點(diǎn):
(1)無(wú)縫數(shù)據(jù)遷移。利用數(shù)據(jù)傳輸、數(shù)據(jù)同步和結(jié)構(gòu)同步可以低成本、輕松快速地遷移數(shù)據(jù),并提供詳細(xì)的指引,可以在各種數(shù)據(jù)庫(kù)管理系統(tǒng)之間傳輸數(shù)據(jù)。
(2)操作工具多元化。導(dǎo)入向?qū)軐⒉煌袷降臄?shù)據(jù)傳輸?shù)綌?shù)據(jù)庫(kù),或者設(shè)置數(shù)據(jù)源連接并使用 ODBC傳輸;表、視圖或查詢結(jié)果的數(shù)據(jù)可導(dǎo)出為 Excel、Access、CSV等格式;使用樹(shù)視圖、JSON視圖、數(shù)據(jù)表樣式的網(wǎng)格視圖以及一系列數(shù)據(jù)編輯工具來(lái)添加、修改和刪除記錄,方便編輯數(shù)據(jù);通過(guò)Navicat提供有效管理數(shù)據(jù)所需的工具,并確保數(shù)據(jù)傳輸順利進(jìn)行。
(3)簡(jiǎn)單的查詢編輯。通過(guò)可視化查詢創(chuàng)建工具進(jìn)行創(chuàng)建、編輯和運(yùn)行查詢,自動(dòng)完成代碼和自定義的代碼段功能,可以讓編碼更加快速;調(diào)試組件能快速尋找、更正PL/SQL和PL/PGSQL編碼時(shí)的錯(cuò)誤,用戶可以設(shè)置斷點(diǎn)、逐步運(yùn)行程序、查看和修改變量值以及檢查調(diào)用堆棧。
5.數(shù)據(jù)的導(dǎo)入、導(dǎo)出及加密
將數(shù)據(jù)庫(kù)中的信息導(dǎo)出為XML文件,然后使用XML解析器進(jìn)行解析,再根據(jù)解析的內(nèi)容把數(shù)據(jù)按順序?qū)氲綄?duì)應(yīng)的數(shù)據(jù)庫(kù)的對(duì)應(yīng)表中。XML解析器提供了兩種做法:第一,直接用解析器中已經(jīng)封裝好的方法讀寫(xiě)XML文件;第二,用XML解析器中的控件所提供的XML Data創(chuàng)建單元接口,再根據(jù)這個(gè)單元接口提供的其他接口一起來(lái)實(shí)現(xiàn)XML文件的讀寫(xiě),但是這種方法的可用度不是很高,所以耦合器在開(kāi)發(fā)時(shí)候主要選擇前一種方法。
數(shù)據(jù)的加密則主要采用Base64加密算法。這種算法最初主要存在于電子郵件的傳輸當(dāng)中,是一種多用途的網(wǎng)際郵件擴(kuò)充協(xié)議,其出現(xiàn)的意義在于解決郵件傳輸過(guò)程中的加密以及聲音、圖形圖像傳輸問(wèn)題。它實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單,與其他機(jī)密算法相比速度更快,還可以防止和XML的標(biāo)記符發(fā)生沖突。
通用數(shù)據(jù)交換耦合器作為通用數(shù)據(jù)交換技術(shù)的一個(gè)載體,旨在解決現(xiàn)有交換接口投入費(fèi)用高、綁定規(guī)則死、應(yīng)用標(biāo)準(zhǔn)難、保障安全少的共性問(wèn)題。而通用數(shù)據(jù)交換技術(shù)從以往軟件代碼與業(yè)務(wù)代碼交織在一起的模式當(dāng)中取其精華、棄其糟粕,從理論和實(shí)踐兩個(gè)層面解決了出版行業(yè)數(shù)據(jù)交換需求與現(xiàn)實(shí)條件之間的矛盾,從而推動(dòng)了出版行業(yè)數(shù)據(jù)交換新生態(tài)的構(gòu)建。