李 莉,殷志強2,張錫嶺
(1.中國石油大學(xué)(華東)計算機與通信工程學(xué)院,山東 東營 257061;2.勝利油田物探研究院,山東 東營 257000)
在油田勘探和開發(fā)過程中,每天都會產(chǎn)生大量的生產(chǎn)動態(tài)原始數(shù)據(jù),如鉆井進尺數(shù)據(jù)、鉆井液數(shù)據(jù)、試油測試情況等。這類數(shù)據(jù)是油田生產(chǎn)現(xiàn)狀的最直接反映和第一手資料,需要及時上報管理部門,以便指導(dǎo)下一步工作,同時,油田還有多套勘探開發(fā)專業(yè)軟件需要應(yīng)用這些生產(chǎn)數(shù)據(jù),并通過與地質(zhì)、工區(qū)、井等模型的綜合分析,建立該地區(qū)詳細全面的生產(chǎn)管理決策數(shù)據(jù)庫、模型庫[1];因此,數(shù)據(jù)采集是油田生產(chǎn)信息化管理的基礎(chǔ),沒有充足的數(shù)據(jù)作支撐,再強大的生產(chǎn)管理軟件也起不到應(yīng)有的作用。由于油田施工現(xiàn)場覆蓋面廣,大多施工單位在偏遠的地區(qū),如山區(qū)、沙漠等,而且施工地點不固定;因此,一般需要通過無線網(wǎng)絡(luò)進行數(shù)據(jù)的上報。然而,無線網(wǎng)絡(luò)受天氣、環(huán)境的影響較大,很多情況下網(wǎng)絡(luò)無法連通,或者時斷時續(xù),無法順利地通過在線系統(tǒng)進行實時的數(shù)據(jù)采集。另一方面,部分重要的科研成果資料、油田儲量信息等保密級別很高的材料,按有關(guān)規(guī)定不允許通過網(wǎng)絡(luò)上報,只能在特定的機器上完成采集后,通過移動存儲設(shè)備加載到中心服務(wù)器。上述所有情況都需要考慮通過離線采集技術(shù)實現(xiàn)數(shù)據(jù)采集。
本文首先總結(jié)當(dāng)前離線采集系統(tǒng)存在的問題,然后針對這些問題提出基于Javascript的DOM解析以及XML文件本地存儲和傳輸?shù)脑O(shè)計思路,并對其關(guān)鍵技術(shù)進行詳細分析論述,最后對系統(tǒng)實際應(yīng)用情況進行總結(jié)和說明。
目前,常見的數(shù)據(jù)離線采集系統(tǒng)是一套單獨開發(fā)的與在線系統(tǒng)功能和數(shù)據(jù)庫結(jié)構(gòu)都相同的系統(tǒng)。它是將本地數(shù)據(jù)手動導(dǎo)入到服務(wù)器數(shù)據(jù)庫中[2]。這種方案完全照搬現(xiàn)有系統(tǒng)的功能模塊和數(shù)據(jù)庫,雖然具有系統(tǒng)開發(fā)簡單、周期較短、數(shù)據(jù)導(dǎo)入不需要進行復(fù)雜的數(shù)據(jù)映射對應(yīng)等優(yōu)點,但缺點也很突出,主要體現(xiàn)在以下幾個方面。1)系統(tǒng)維護工作量大。當(dāng)在線系統(tǒng)發(fā)生任何變化,如數(shù)據(jù)庫增加或減少1個字段,離線系統(tǒng)也必須進行相應(yīng)的更新,并且整個系統(tǒng)需要重新部署,代價較大。2)通用性差。一套在線系統(tǒng)就要單獨開發(fā)一套對應(yīng)的離線系統(tǒng),而油田生產(chǎn)應(yīng)用的采集系統(tǒng)目前一般都有多套,如物探、鉆井、錄井、測井、試油等各個專業(yè)都有相應(yīng)的在線數(shù)據(jù)采集系統(tǒng)[3],相應(yīng)的開發(fā)工作量和成本以及日后維護的工作量都巨大。3)離線數(shù)據(jù)上報不夠及時。采集的離線數(shù)據(jù)一般通過郵件或者人工報送的方式上報到中心服務(wù)器,實時性較差,不能夠充分利用網(wǎng)絡(luò)條件好的時候進行數(shù)據(jù)上報。
針對油田生產(chǎn)的實際情況和目前離線系統(tǒng)存在的問題,離線采集系統(tǒng)的設(shè)計應(yīng)重點包括以下方面。1)通用性。離線系統(tǒng)應(yīng)能夠采集存儲現(xiàn)用系統(tǒng)的所有常見頁面輸入項,而不是僅針對特定系統(tǒng)的特定頁面模塊。離線數(shù)據(jù)體的結(jié)構(gòu)和保存也應(yīng)具有通用性,能夠適應(yīng)不同的采集模塊。2)采集頁面數(shù)據(jù)項與中心服務(wù)器數(shù)據(jù)庫結(jié)構(gòu)的松耦合。當(dāng)數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化導(dǎo)致在線系統(tǒng)采集元素變化時,能夠方便地定義離線數(shù)據(jù)與數(shù)據(jù)庫結(jié)構(gòu)的對應(yīng)關(guān)系,而不必修改離線數(shù)據(jù)體的結(jié)構(gòu)。3)離線數(shù)據(jù)體的自動傳輸。系統(tǒng)應(yīng)能夠自動檢測網(wǎng)絡(luò)情況,自動傳輸離線數(shù)據(jù)體[4]。4)數(shù)據(jù)自動校驗入庫。系統(tǒng)應(yīng)能夠按照要求的數(shù)據(jù)規(guī)范自動導(dǎo)入到中心服務(wù)器。
經(jīng)過研究分析可知,實現(xiàn)較為通用的離線數(shù)據(jù)采集應(yīng)該包括以下幾個模塊。1)本地采集存儲工具。本地客戶端采集頁面和數(shù)據(jù)存儲模塊,可以自動分析頁面元素,將數(shù)據(jù)保存到本地。2)數(shù)據(jù)加密傳輸。對采集的數(shù)據(jù)進行打包加密,通過FTP等方式傳輸?shù)椒?wù)器。3)數(shù)據(jù)校驗入庫模塊。根據(jù)定制的數(shù)據(jù)包與服務(wù)器數(shù)據(jù)庫的映射關(guān)系,自動完成離線數(shù)據(jù)的入庫。4)日志管理模塊。在上述各個主要環(huán)節(jié),如本地采集存儲、壓縮加密、傳輸、入庫等環(huán)節(jié)均有相應(yīng)的保存成功及失敗的日志記錄,便于分析原因。
系統(tǒng)工作流程如圖1所示。首先,在客戶端加載離線采集頁面,通過頁面分析組件和頁面存儲組件實現(xiàn)采集數(shù)據(jù)的通用離線存儲,并以XML文件的形式保存在客戶端;然后,通過數(shù)據(jù)加密傳輸服務(wù),對客戶端文件進行加密壓縮,根據(jù)網(wǎng)絡(luò)情況自動傳輸或者手動傳輸?shù)街付ǚ?wù)器;最后,服務(wù)器接收到數(shù)據(jù)包,根據(jù)入庫映射配置,解析XML文件,并根據(jù)校驗規(guī)則進行入庫校驗,校驗成功的數(shù)據(jù)自動入庫。所有操作都通過日志文件進行記錄。
圖1 離線采集主要環(huán)節(jié)
通用存儲工具是本系統(tǒng)的核心模塊,主要負責(zé)本地數(shù)據(jù)的采集和存儲。
目前,油田常用的在線采集系統(tǒng)一般為B/S系統(tǒng)。為減少二次開發(fā)的工作量,可以將現(xiàn)用的在線采集系統(tǒng)的頁面進行簡單改造,去掉后臺儲存到數(shù)據(jù)庫的部分和權(quán)限部分,僅保留實際采集項,仍然以B/S的方式在客戶端運行。當(dāng)在線系統(tǒng)發(fā)生變化或者增加新的離線系統(tǒng)時,仍然可以按照此種方式快速生成新的離線采集頁面,從而大大縮短開發(fā)周期和節(jié)省成本。
為實現(xiàn)上述設(shè)計思路,采集頁面應(yīng)該具有高度的靈活性,支持常見的頁面控件格式,如單行、多行文本框,隱藏控件、復(fù)選框、下拉框、單選框等等,并且與存儲部分盡量松耦合[5];因此,采集頁面中應(yīng)包含通用的頁面分析組件和數(shù)據(jù)存儲組件2部分。頁面分析組件能夠自動對采集頁面進行分析,以組件的ID為單位(組件ID在頁面中是唯一的),從而獲取頁面的采集元素及所錄入的值。與此相對應(yīng)的,數(shù)據(jù)存儲組件中存儲數(shù)據(jù)內(nèi)容應(yīng)該隨著頁面采集元素的變化而變化。
1)頁面分析組件。對頁面元素的分析,必須依賴于DOM(Document Object Model, 文檔對象模型)。DOM是W3C國際組織的一套Web標(biāo)準(zhǔn),一種用于HTML和XML文檔的編程接口,為文檔提供一種結(jié)構(gòu)化的表現(xiàn)方式。網(wǎng)頁上的標(biāo)簽是樹狀結(jié)構(gòu),每個頁面元素都可以被確切的定位,各種編程語言都可以通過DOM來訪問頁面。頁面分析組件是通過JavaScript對DOM的操作來實現(xiàn)的[6]。在本文中,主要應(yīng)用DOM對象的Document接口通過JavaScript循環(huán)遍歷,從而獲得所需要的組件ID和值。獲取所有控件,對不同頁面控件的處理腳本如下:
function queryElementsInput(){
var aryInput=document.body.getElementsByTagName("*");
for (var i=0; i < aryInput.length; i++) {
saveField(aryInput[i].type);
…
}
}
function saveField(obj) {
var flashObject=getObject();
if (flashObject==null) return;
var type=obj.type;
switch (type) {
case′text′: case ′textarea′: case ′select-one′:case ′hidden′:
flashObject.savetext (obj.id, obj.value);
….
case ′checkbox′:
flashObject.savechecked(obj.id, obj.checked);
….
case ′radio′:
…
case ′file′:
….;
}
}
函數(shù)queryElementsInput通過Document接口的getElementsByTagName方法獲取頁面上的所有頁面控件集合并賦值給aryInput集合,通過for循環(huán)獲得每個控件類型。由于不同的頁面控件ID及錄入值的處理方式不同,需要根據(jù)控件類型分別處理。根據(jù)不同的類型,調(diào)用saveField函數(shù),獲得不同控件的值,并調(diào)用數(shù)據(jù)存儲組件保存到XML文件中。
2)數(shù)據(jù)存儲組件。由于不同的采集系統(tǒng)采集的內(nèi)容不同,且同一個頁面采集內(nèi)容也有可能發(fā)生變化,同時,通過頁面分析組件獲取的實際采集數(shù)據(jù)的結(jié)構(gòu)也是動態(tài)的;因此,采用常規(guī)的固定數(shù)據(jù)庫結(jié)構(gòu),不能很好地響應(yīng)頁面變化。由于不同的系統(tǒng)采用的數(shù)據(jù)庫類型不盡相同,如油田系統(tǒng)中常見的就有Oracle、SqlServer等,因此異構(gòu)是不可避免的[7]。基于此,在存儲部分,采用XML文件的方式保存一個具體頁面采集的內(nèi)容[8]。XML文件的結(jié)構(gòu)很簡單,僅包括頁面組件ID和與之一一對應(yīng)的數(shù)據(jù)值以及是否需要通過網(wǎng)絡(luò)發(fā)送的屬性。這屬性是為了判斷采集的數(shù)據(jù)在網(wǎng)絡(luò)正常時是否通過網(wǎng)絡(luò)自動發(fā)送到服務(wù)器。XML文件格式如下:
....
通過上述設(shè)計,頁面分析組件和數(shù)據(jù)本地存儲組件都是通用的頁面組件,以.NET組件的形式進行封裝,可以加載到任意需要采集的頁面中,而采集頁面僅僅是一個外殼,在原有系統(tǒng)的基礎(chǔ)上稍加改動,保留原有的采集元素和頁面校驗邏輯即可。當(dāng)離線采集數(shù)據(jù)采集完成后,所采集的數(shù)據(jù)以XML文件的形式保存到本地。
為便于數(shù)據(jù)傳輸,同時保證傳輸過程中的安全,需要自動對離線數(shù)據(jù)提供Zip格式打包壓縮加密,同時,屬性為可以通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),當(dāng)網(wǎng)絡(luò)恢復(fù)正常時,應(yīng)能夠自動傳輸?shù)椒?wù)器;因此,應(yīng)開發(fā)壓縮加密和自動傳輸組件,以Windows服務(wù)的形式運行在客戶端,自動定時掃描指定目錄。當(dāng)數(shù)據(jù)存儲組件把XML文件存儲到本機指定目錄下之后,Windows服務(wù)自動進行文件的壓縮和加密,并保存到傳輸隊列[9]。傳輸隊列仍然采用XML文件的方式保存在本機。服務(wù)根據(jù)設(shè)置的時間間隔,自動檢測網(wǎng)絡(luò)環(huán)境,當(dāng)網(wǎng)絡(luò)環(huán)境正常時,通過FTP協(xié)議自動傳輸?shù)椒?wù)器指定位置,如果傳輸失敗,則自動進入傳輸隊列,等待下一次調(diào)用[10]。整個過程由數(shù)據(jù)加密傳輸組件獨立完成,通過接口與數(shù)據(jù)存儲組件進行交互,如圖2所示。
圖2 加密傳輸
密級要求很高的數(shù)據(jù),則根據(jù)XML中的屬性,不進行網(wǎng)絡(luò)傳輸,由人工通過移動存儲介質(zhì)報送。
數(shù)據(jù)包傳輸?shù)街行姆?wù)器之后,需要經(jīng)過解壓、校驗、入庫等一系列操作,因此仍然采用Windows服務(wù)。由于各個采集點傳輸?shù)椒?wù)器的離線包的內(nèi)容遵循統(tǒng)一的標(biāo)準(zhǔn),具備了準(zhǔn)確讀取離線包數(shù)據(jù)的基本條件,因此可以在完成必要的校驗之后離線自動入庫。以移動介質(zhì)上報的數(shù)據(jù),則可以通過手動添加入庫平臺進行分析和入庫。
由于離線數(shù)據(jù)文件中只保存了字段名和采集的數(shù)據(jù),而且在服務(wù)器的數(shù)據(jù)庫中,這些字段和值可能保存在不同的表中;因此,需要事先定義和維護所有具體采集模塊的字段和數(shù)據(jù)庫表之間的映射關(guān)系[11],如復(fù)雜的數(shù)據(jù)庫結(jié)構(gòu)、主鍵/外鍵的對應(yīng)關(guān)系、主鍵的生成方式、字段的類型等等。映射文件結(jié)構(gòu)如圖3所示。
圖3 數(shù)據(jù)結(jié)構(gòu)映射關(guān)系
考慮到實際應(yīng)用中數(shù)據(jù)庫結(jié)構(gòu)的復(fù)雜性,映射文件包含2個大的節(jié)點MasterTable(主表)和SubTables(子表集合)。SubTables節(jié)點下可以有多個Subtable(子表),可根據(jù)實際情況進行擴充。主表和子表下又包括Fields(字段集合)。通過Field(字段)描述具體字段的屬性以及與離線數(shù)據(jù)體中數(shù)據(jù)的對應(yīng)關(guān)系。
根據(jù)上述映射關(guān)系,生成某個采集模塊對應(yīng)的映射文件,其具體內(nèi)容如下:
.....
....
文件中首先定義主表Jxbxxb,主鍵JH,具體字段JH、JS等。其中,“JH”數(shù)據(jù)類型是string類型,對應(yīng)離線數(shù)據(jù)體中fromControlid是“JH”。其他字段的定義與此相同。
此映射文件包含一個子表“CSSJ”。其中,主鍵是“SYJH”和“CW”,外鍵是“JH”,其他字段定義與主表的定義方式相同。根據(jù)實際的應(yīng)用情況,還可以繼續(xù)擴充多個子表。
此映射關(guān)系通過配置文件的形式保存在服務(wù)器,由入庫模塊對每個離線的數(shù)據(jù)文件按照此映射關(guān)系進行分析[12],分析完成之后,執(zhí)行入庫校驗,如:常見的是否為空;邏輯校驗等等。符合校驗條件的則數(shù)據(jù)自動入庫,不符合條件的記錄通過事務(wù)機制回退,相關(guān)記錄均不能入庫。所有操作均記錄在獨立的系統(tǒng)日志模塊中。
本系統(tǒng)客戶端的通用存儲部分采用Javascript開發(fā),由封裝好的組件調(diào)用,可在任何網(wǎng)頁引用??蛻舳藬?shù)據(jù)的加密傳輸服務(wù)和服務(wù)器端的數(shù)據(jù)校驗入庫服務(wù)則采用了.NetFramework 4.0,C#語言開發(fā)。整個系統(tǒng)的解決方案采用了微軟的Enterprise Library(企業(yè)庫)實現(xiàn)緩存、加密等公用模塊配置和開發(fā)。各部分包括:1)采用.NET框架的ServiceProcess命名空間中的ServiceBase和ServiceController類開發(fā)Windows服務(wù)程序;2)采用XML 文件作為數(shù)據(jù)映射和配置信息的載體,并調(diào)用XmlSerializer類實現(xiàn)XML的序列化與反序列化;3)引用ICSharpCode類庫實現(xiàn)多個文件的壓縮;4)使用FtpWebRequest 和 FtpWebResponse 類、FTP類開發(fā)文件傳輸?shù)腇TP類庫,實現(xiàn)基于FTP協(xié)議的遠程連接、文件傳輸、狀態(tài)響應(yīng)等功能,并采用Thread類實現(xiàn)文件傳輸?shù)亩嗑€程操作;5)引用Enterprise Library的LogEntry類,實現(xiàn)系統(tǒng)的日志管理部分。
針對組件的通用性、數(shù)據(jù)采集的完整性,對文件傳輸及入庫準(zhǔn)確性和效率等方面進行了系統(tǒng)測試。通過某油田多個采油隊、鉆井隊的不同網(wǎng)絡(luò)環(huán)境下進行的測試結(jié)果表明,數(shù)據(jù)采集的準(zhǔn)確性比原系統(tǒng)平均提高約19.5%,數(shù)據(jù)傳輸效率平均提高約27.5%,均達到系統(tǒng)的預(yù)期效果。
該系統(tǒng)與原有離線采集系統(tǒng)相比,在以下方面具有顯著優(yōu)勢。
1)系統(tǒng)開發(fā)周期短。原采集系統(tǒng)需要把B/S系統(tǒng)轉(zhuǎn)為C/S系統(tǒng),所有功能模塊重寫,可重用的部分較少,開發(fā)周期長?,F(xiàn)系統(tǒng)開發(fā)時,只需要去掉原采集系統(tǒng)的B/S頁面中的頁面存儲和權(quán)限校驗部分,定義數(shù)據(jù)存儲映射文件,原系統(tǒng)的大部分內(nèi)容可重用,而且原系統(tǒng)底層及公用組件可直接重用,開發(fā)周期可縮短近50%。圖4是本系統(tǒng)與原錄井離線采集系統(tǒng)和原試油離線采集系統(tǒng)的開發(fā)周期對比圖。當(dāng)系統(tǒng)需要修改或者擴展時,所需的工作量也與系統(tǒng)開發(fā)周期的對比情況基本類似。
圖4 現(xiàn)離線采集系統(tǒng)與原離線采集系統(tǒng)開發(fā)周期對比
2)系統(tǒng)在擴展性、通用性、可維護性等方面與原系統(tǒng)相比也具有極大優(yōu)勢,具體情況的對比分析如表1所示。
表1 應(yīng)用對比
目前,該系統(tǒng)已在油田的多個單位得到了應(yīng)用,如表2所示。下一步還計劃在油田內(nèi)部更多的生產(chǎn)單位推廣應(yīng)用,其應(yīng)用范圍正在不斷擴大。
表2 應(yīng)用范圍
本文在總結(jié)油田生產(chǎn)數(shù)據(jù)采集現(xiàn)狀以及現(xiàn)有離線采集系統(tǒng)存在問題的基礎(chǔ)上,提出了一種通用離線采集系統(tǒng)的設(shè)計思路和實現(xiàn)方式。該系統(tǒng)采用基于組件的開發(fā)方式和XML文件的數(shù)據(jù)存儲和映射,通過數(shù)據(jù)自動加密傳輸,最后經(jīng)過數(shù)據(jù)校驗自動入庫。該系統(tǒng)全面提高了離線采集系統(tǒng)的通用性、準(zhǔn)確性和擴展性,經(jīng)過實際應(yīng)用,取得了較好的效果,具有廣泛的應(yīng)用前景。在今后的研究中,將結(jié)合近期應(yīng)用廣泛的HTML5在離線應(yīng)用方面的新技術(shù)[13],對獲取頁面動態(tài)生成的控件ID和值、復(fù)雜的表格、錄入過程中需要上傳大數(shù)據(jù)體等較為復(fù)雜的情況繼續(xù)深入研究,進一步提高系統(tǒng)的通用性和穩(wěn)定性。
[1]張益政.油田勘探生產(chǎn)管理及井位導(dǎo)航系統(tǒng)設(shè)計與實現(xiàn)[D].大連:大連理工大學(xué),2005.
[2]周晴紅,陳中育,李平,等. 一種離線數(shù)據(jù)采集技術(shù)的研究與應(yīng)用[J]. 計算機與現(xiàn)代化,2006(10):70-71.
[3]張華義,何東溯,汪福勇,等.西南勘探與生產(chǎn)技術(shù)數(shù)據(jù)管理系統(tǒng)實施與總結(jié)[J]. 石油工業(yè)計算機應(yīng)用, 2009(3):2-4.
[4]張華義,何東溯,汪福勇,等.勘探開發(fā)數(shù)據(jù)整理平臺開發(fā)與應(yīng)用[J].天然氣勘探與開發(fā),2009(4):69-74.
[5]Robert C Martin,Micah Martin. 敏捷軟件開發(fā):原則、模式與實踐[M]. 鄧輝,孫鳴,譯.C#版.北京:人民郵電出版社,2012:104-105.
[6]Nicholas C Zakas. JavaScript高級程序設(shè)計 [M]. 李松峰,曹力,譯. 3版.北京:人民郵電出版社,2012:277-279.
[7]薛堯予,王建林,趙利強.分布式過程實時數(shù)據(jù)集成方法及其實現(xiàn) [J]. 計算機工程,2010,36(3):55-57.
[8]趙芳云. 基于XML的異構(gòu)數(shù)據(jù)源查詢系統(tǒng)設(shè)計[J]. 計算機應(yīng)用與軟件,2009,26(8):185-188.
[9]Christian Nagel,Bill Evjen,Jay Glynn. C#高級編程 [M]. 李銘,譯. 7版.北京:清華大學(xué)出版社,2010:692-694.
[10]巫鐘興. 數(shù)據(jù)加密傳輸系統(tǒng)的研究與應(yīng)用[D]. 北京:北京化工大學(xué),2010.
[11]Hector Garcia-Molina,Jeffrey D Ullman,Jennifer Widom. 數(shù)據(jù)庫系統(tǒng)實現(xiàn) [M]. 楊冬青,徐其鈞,唐世渭,譯. 2版.北京:機械工業(yè)出版社,2010:424-426.
[12]彭新一,黃競斌,黃志煒.一種面向大規(guī)模分布式數(shù)據(jù)采集的標(biāo)準(zhǔn)化方法[C]//The 3rd International Conference on Computational Intelligence and Industrial Application (PACIIA2010) .武漢:[出版者不詳],2010:217-222.
[13]陸凌牛. HTML5與CSS3權(quán)威指南[M]. 北京:機械工業(yè)出版社,2012:151-158.