高翔+郭新東+張鳳蘭+管偉
摘要: 介紹運行在平板電腦上基于安卓系統的井控信息處理系統的設計與實現。該系統采用多個智能化模塊,涵蓋了井隊作業的所有流程,其中包括數據采集、系數設定、數據計算、數據存儲和轉儲、智能報警、異常分析、數據檢索等任務。顯著提高了基層井隊工人的作業效率、極大地縮短了發現異常并報警的時間,顯著的增加了企業整體的效益。
關鍵詞: 井控數據; 數據記錄; 數據資產; 安全事故; 起因溯源
中圖分類號: TN919?34; TP309文獻標識碼: A 文章編號: 1004?373X(2014)08?0082?04
Design and implementation of well control information processing system based on Android
GAO Xiang, GUO Xin?dong, ZHANG Feng?lan, GUAN Wei
(Northwest Polytechnical University, Xian 710129, China)
Abstract: The design and implementation of the well control information processing system which runs on tablet personal computer and is based on Android OS are introduced in this paper. Multiple intelligent modules are adopted, which can execute all the tasks, including data collection, coefficient setting, data calculation, data storage, data dump, intelligent alarm, abnormal analysis and data retrieval in the total working process of drilling crew. With the system, the efficiency of workers in a drilling crew is improved significantly, and the response time of abnormal phenomenon discovery and alarm is reduced greatly.
Keywords: well control data; data logging; data asset; security incident; cause traceability
0引言
近年來,中石油的信息化建設成果斐然,建成了很多應用系統,明顯改善了工作效率,提高了經濟效益。然而,在基層鉆井隊的井控數據采集和記錄方面,由于作業環境、人員素質和技術水平的限制等問題,一線員工工作方式的信息化程度還明顯落后。傳統的紙筆記錄方式時常會跟不上作業流程的節奏,而且人工的筆錄也會由于字跡潦草或環境條件惡劣導致的污損等原因對數據準確率造成影響,從而造成坐崗記錄的井控數據的可信性不高,加重了后期數據清洗的負擔,出現安全隱患問題時,發現預警的時間較長。
針對這一系列的問題,作者設計并開發了基于安卓系統的手持式井控信息處理系統,為提升基層井隊的信息化水平提供了有力的支持。該系統的開發,將傳統的紙質工況記錄表移植到了手持平板電腦上,將作業數據的計算公式設計成算法內置于系統中,減少了員工的計算工作量和出錯率,同時提高了計算數據的準確率,使員工可以跳過計算邏輯而專注于數據的讀取。內置的報警系統可以即時根據錄入的數據進行分析,判斷工況的正確與否或環境的安全與否而給出文字和聲音的提示,從而防患于未然。
1模塊設計
井控信息處理系統主要包括6大模塊,如圖1所示,在結構上使用經典MVC架構進行設計開發。
圖1 系統結構
數據記錄模塊負責采集數據,該處數據一部分由工人通過專用儀器從外界環境測得,或通過設備儀表讀出;另一部分由井控信息處理系統內置,包括作業環境的選擇和計算系數等。采集到的數據在滿足一定條件下被事件觸發執行相關操作,如根據系統內置的公式參與其數值的計算,并將計算結果填入相應的數據項,由計算得出的數值會被報警模塊實時檢測,若超過系統設定的閾值則會發出刺耳的報警聲,并通過閃爍文字提示相應的異常數據和可能的原因,若數據無異常則在一次記錄周期結束前將數據持久化到數據庫中。隨著工作時間的推移,數據庫中的記錄會達到數十萬到數百萬條,數據查詢模塊負責根據檢索條件高效的進行檢索并呈現至設備。數據備份模塊負責數據的轉儲,可以將數據通過網絡以數據庫文件或Excel等文件格式轉儲至其他地方。系統參數配置模塊以靈活的組件形式對外提供操作接口,將系統中所需的各項復雜參數簡化至所見即所得。系統安全模塊則解決系統的使用授權模式。本系統的數據流圖如圖2所示。
圖2 系統數據流程圖
2關鍵技術點
2.1數據記錄模塊設計
2.1.1問題描述
井隊在實際記錄數據的過程中,根據其工況的不同,需要錄入的數據項也不同,但總數都在20項左右,而系統定制的設備只有10寸。加之工況的記錄周期在15分以內,對工人的操作熟練度提出了要求。
2.1.2解決方法
針對上述問題,單一的使用文本框作為數據錄入接口難以完成任務,而采用大量的智能化組件(Component)與事先內置了井隊數據的適配器(Adapter)結合,可以減少工人的工作量,從而減少人機交互次數,提高效率[1]。如下:
井隊需要處理的工況通常是固定的,系統在設計時將工況類型硬編碼(Hard Code)入一個適配器中,然后將適配器掛載于一個活動組件上,通過點擊事件觸發,彈出列有具體工況的下拉列表(Spinner),由工人進行選擇[2]。
2.2界面布局方案的設計
2.2.1問題描述
整個系統按功能可以設計為3個模塊,分別為數據錄入、數據查詢/導出、系統配置。職責的不同導致3個功能塊的界面也完全不同,與傳統桌面程序不同的是手持設備顯示屏幕較小,設計自由度較低,單純的使用線性布局(Linear Layout)、關系布局(Relative Layout)、箱式布局(Box Layout)、邊界布局(Border Layout)或它們的結合都會顯的力不從心[3]。
2.2.2解決方法
(1) 整體架構。由于問題的核心是顯示空間的不足與顯示內容的過量之間的矛盾,采用二層顯示結構可以解決該問題。使用層次結構可以使功能和結構層次分明,操作方便,顯示直觀。符合功能高內聚,結構低耦合的標準[4];
一層結構:即系統的外層組織,使用卡式結構(Card Group)來組織各大主功能模塊,將每個主功能模塊壓縮為一張卡,而每張卡鏈接一個功能模塊,存放所有的卡只需要一個卡箱,而卡箱占據屏幕顯示空間的大小不足1/15,觸發某個卡后可以從箱中將卡彈出,再填滿顯示空間,這樣可以節省出更多的顯示空間給更重要的內容。
二層結構:由于井隊的工況種類不一,而每種工況下又可分為更細的工況。 在第二層結構上,采用了彈出式菜單(Pop Menu)和幀布局(FrameLayout)[5],通過點擊工況觸發切換事件,由后臺進程調用事件相對應的幀(Frame),即工況顯示界面,這樣可以使所有的工況共用剩余的顯示空間。
(2) 表格結構。由于傳統的井控數據記錄紙質表已使用多年,所以工人大都習慣了傳統的表格記錄格式,加之現行的安卓組件大多為文本框,按鈕等,只能滿足常用的事件調用,單純的設計成傳統的翻頁式記錄程序,經試用,工人使用極其不習慣。
針對上述情況,我們設計并制作出了動態表格(Dynamic Table)技術,這種技術的動態主要體現在2個方面:
① 表格數據的動態讀取,表格中顯示的數據即是之前填入的所有歷史數據,但并不是由錄入界面直接送入表格,這是因為隨著記錄時間的推移,記錄的數據會有成千上萬條甚至更多,手持設備的內在和處理能力根本無法響應如此大量的數據讀取。為此,系統采用了雙緩存技術(Double Buffer)[6],即數據庫與顯示適配器之間加緩存,適配器與顯示進程之間加緩存,如圖3所示。
圖3 緩存結構
② 表格空間的動態顯隱,為了使傳統作業的工人能夠在盡快適應新的設備,減少后期業務培訓的成本,系統使用了劃動事件感知技術,將工人使用的傳統紙質表格平緩的轉化成智能填寫的電子表格,這種表格具有雙向自動顯隱的功能,橫向(Horizontal)包含了工況對應的所有數據項,縱向(Vertical)可以依靠二級數據緩存顯示所有的歷史數據記錄[7]。當組件感知到劃動事件后會判斷劃動的方向,如果是橫向劃動,則根據劃動方向動態的重繪表格,根據劃動的力度大小,決定隱藏掉的部分與顯示出的部分的大小。如果是縱向劃動,則由后臺數據進程首先根據斷點將對應位置的數據記錄從數據庫中讀取至內在,然后再將數據記錄裝配到顯示適配器中進行顯示。
2.3模塊間數據傳輸
2.3.1問題描述
如①中描述,各主功能模塊之間的結構較為分散,即分裝在不同的卡中,每個功能模塊對應不同的線程,而數據錄入模塊需要用到系數配置模塊的數據,傳統的依靠變量傳輸在此失效。
2.3.2解決方法
因為系統平臺是安卓系統,而安卓系統的底層是使用Linux的內核,所以使用Linux中的管道技術(Pipe)[8]。
不過,從管道讀數據是一次性操作,數據一旦被讀,它就從管道中被拋棄,釋放空間以便寫更多的數據。所以,在數據從管道輸入至數據錄入模塊時會先被暫存到一個XML文件里,由于XML文件可以作長期存儲用,所以在下次需要讀數據的時候進程會先從XML里查找,若查找到,則數據命中,否則的話再通過管道進行讀取,這種技術可以減少使用管道的次數,提高數據的命中率,進而提高系統的處理速度。
2.4數據存儲
2.4.1問題描述
使用文本存儲數據的特點是寫入數據簡單,但讀取時難度較大,尤其是數據量較大或數據項較復雜的時候更是難以操作,且不利于保存和轉儲。在進行數據檢索的時候更是無從下手,效率低下且錯碼率高。
2.4.2解決方法
使用嵌入式系統型數據庫SQLite來存放數據,可以解決數據存儲的問題。SQLite 是用 C 語言編寫的開源嵌入式數據庫引擎,它是完全獨立的,不具有外部依賴性。SQLite 支持多數 SQL92 標準,可以在所有主要的操作系統上運行,并且支持大多數計算機語言。SQLite 還非常健壯。它還是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,具有資源占用少、性能良好、支持事務性等特點[9]。由于其開發語言的兼容性使它可以與安卓系統良好的結合在一起,并對上層安卓應用層提供高性能的接口。
2.5數據檢索
2.5.1問題描述
關系型數據庫的表結構可以完美的對應于實際中的實體表。但數以幾十萬計的記錄要在給定的檢索條件下在毫秒甚至微秒級的時間內檢索出結果來需要設備有很強的計算能力和高速的緩存,但手持設備通常不具備這樣高性能的條件。如何開發一種高效的檢索算法成了解決問題的關鍵。
2.5.2解決方法
由于嵌入式數據庫對數據字段的支持有限,合理的設計字段的數據類型是提高檢索效率的基礎,當在表中添加字段的時候,應該選擇長度最小的數據類型,這樣表在內存中每頁可以存儲更多的記錄。
其次是在數據量較大的工況表上建立索引(Index),SQLite允許對數據庫表進行索引,以此能迅速查詢記錄,而無需查詢整個表,由此顯著的加快查詢速度[10]。系統在首次運行的時候就會執行相關的建庫語句,可以確保在存入數據的時候表中已建立好相應的索引項。
最后可以通過調整數據庫的緩沖區進行優化,通常,變量控制緩沖區的長度應該在處理索引表的時候使用,因此可以采用不斷增加的方法以確保索引具有最佳的性能,根據相關研究測試,我們采用系統內存25%的大小作為該變量的值,以此來達到最佳的性能。
3安全性設計
軟件系統為了防止被非法盜用,甚至被反編譯篡改,系統通常需要采用一定的加密技術處理。如果加密系統只是一種單純的依賴密鑰的系統,那對用戶發放使用權的時候就是發放密鑰,這種系統保密性較低,一旦密碼泄漏則軟件的保密性也不復存在。
采用證書授權可以在很大程度上保證軟件的安全性,但證書的生成通常需要網絡和用戶身份等基礎設施或基本信息才能滿足。根據設備的實際使用環境,我們以如下特殊方式解決:
身份信息(Identity):通過設計一個獨立的軟件,提取設備的基本信息,包括設備網絡地址、系統號和基址序列號(SSN)作為指紋信息,然后將采集到的指紋信息匯聚至工作機,即證書中心(CA),通過組合算法,將收到的三種信息生成惟一的一種信息,即三碼合一。然后將生成的三碼合一文件作為授權證書,發送給用戶。
4結語
本文分析了中石油基層鉆井工的作業環境,對其中繁瑣的流程進行了深入研究,設計并開發了井控信息處理系統。該系統使用基于安卓操作系統的定制手持設備,將眾多的紙質記錄表格和復雜的公式、系數移植到了智能設備上,極大地簡化了操作過程,節省了大量的人力和時間。數據庫系統的使用則解決了傳統記錄中數據檢索難、易丟失和保存難的缺陷。
受限于野外作業環境的惡劣對網絡的影響,本系統尚未解決利用網絡遠程傳輸的問題,利用網絡實現遠程傳輸和監控是本系統有待提高的方向。
參考文獻
[1] 索蓋林.android開發入門指南[M].2版.北京:人民郵電出版社,2009.
[2] 余志龍.Android SDK開發范例大全[M].北京:人民郵電出版社,2010.
[3] 韓超,梁泉.Android系統原理及開發要點詳解[M].北京:電子工業出版社,2010.
[4] 李觀華,范輝.J2ME在移動通信程序中的應用[J].計算機應用,2003(3):124?126.
[5] 廖永剛,余冬梅,張秋余.J2ME架構與安全機制的研究[J].計算機工程與設計,2006(4): 575?577.
[6] 王勤.計算機控制技術[M].北京:機械工業出版社,2003.
[7] MEIER Reto.Android高級編程[M].王超,譯.2版.北京:清華大學出版社,2010.
[8] 劉扶松.Android開發從入門到精通[M].北京:希望電子出版社2012.
[9] 楊豐盛.Android技術內幕(系統卷) [M].北京:機械工業出版社 2011.
[10] E2ECloud.深入淺出Google Android[M].北京:人民郵電出版社,2009.
二層結構:由于井隊的工況種類不一,而每種工況下又可分為更細的工況。 在第二層結構上,采用了彈出式菜單(Pop Menu)和幀布局(FrameLayout)[5],通過點擊工況觸發切換事件,由后臺進程調用事件相對應的幀(Frame),即工況顯示界面,這樣可以使所有的工況共用剩余的顯示空間。
(2) 表格結構。由于傳統的井控數據記錄紙質表已使用多年,所以工人大都習慣了傳統的表格記錄格式,加之現行的安卓組件大多為文本框,按鈕等,只能滿足常用的事件調用,單純的設計成傳統的翻頁式記錄程序,經試用,工人使用極其不習慣。
針對上述情況,我們設計并制作出了動態表格(Dynamic Table)技術,這種技術的動態主要體現在2個方面:
① 表格數據的動態讀取,表格中顯示的數據即是之前填入的所有歷史數據,但并不是由錄入界面直接送入表格,這是因為隨著記錄時間的推移,記錄的數據會有成千上萬條甚至更多,手持設備的內在和處理能力根本無法響應如此大量的數據讀取。為此,系統采用了雙緩存技術(Double Buffer)[6],即數據庫與顯示適配器之間加緩存,適配器與顯示進程之間加緩存,如圖3所示。
圖3 緩存結構
② 表格空間的動態顯隱,為了使傳統作業的工人能夠在盡快適應新的設備,減少后期業務培訓的成本,系統使用了劃動事件感知技術,將工人使用的傳統紙質表格平緩的轉化成智能填寫的電子表格,這種表格具有雙向自動顯隱的功能,橫向(Horizontal)包含了工況對應的所有數據項,縱向(Vertical)可以依靠二級數據緩存顯示所有的歷史數據記錄[7]。當組件感知到劃動事件后會判斷劃動的方向,如果是橫向劃動,則根據劃動方向動態的重繪表格,根據劃動的力度大小,決定隱藏掉的部分與顯示出的部分的大小。如果是縱向劃動,則由后臺數據進程首先根據斷點將對應位置的數據記錄從數據庫中讀取至內在,然后再將數據記錄裝配到顯示適配器中進行顯示。
2.3模塊間數據傳輸
2.3.1問題描述
如①中描述,各主功能模塊之間的結構較為分散,即分裝在不同的卡中,每個功能模塊對應不同的線程,而數據錄入模塊需要用到系數配置模塊的數據,傳統的依靠變量傳輸在此失效。
2.3.2解決方法
因為系統平臺是安卓系統,而安卓系統的底層是使用Linux的內核,所以使用Linux中的管道技術(Pipe)[8]。
不過,從管道讀數據是一次性操作,數據一旦被讀,它就從管道中被拋棄,釋放空間以便寫更多的數據。所以,在數據從管道輸入至數據錄入模塊時會先被暫存到一個XML文件里,由于XML文件可以作長期存儲用,所以在下次需要讀數據的時候進程會先從XML里查找,若查找到,則數據命中,否則的話再通過管道進行讀取,這種技術可以減少使用管道的次數,提高數據的命中率,進而提高系統的處理速度。
2.4數據存儲
2.4.1問題描述
使用文本存儲數據的特點是寫入數據簡單,但讀取時難度較大,尤其是數據量較大或數據項較復雜的時候更是難以操作,且不利于保存和轉儲。在進行數據檢索的時候更是無從下手,效率低下且錯碼率高。
2.4.2解決方法
使用嵌入式系統型數據庫SQLite來存放數據,可以解決數據存儲的問題。SQLite 是用 C 語言編寫的開源嵌入式數據庫引擎,它是完全獨立的,不具有外部依賴性。SQLite 支持多數 SQL92 標準,可以在所有主要的操作系統上運行,并且支持大多數計算機語言。SQLite 還非常健壯。它還是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,具有資源占用少、性能良好、支持事務性等特點[9]。由于其開發語言的兼容性使它可以與安卓系統良好的結合在一起,并對上層安卓應用層提供高性能的接口。
2.5數據檢索
2.5.1問題描述
關系型數據庫的表結構可以完美的對應于實際中的實體表。但數以幾十萬計的記錄要在給定的檢索條件下在毫秒甚至微秒級的時間內檢索出結果來需要設備有很強的計算能力和高速的緩存,但手持設備通常不具備這樣高性能的條件。如何開發一種高效的檢索算法成了解決問題的關鍵。
2.5.2解決方法
由于嵌入式數據庫對數據字段的支持有限,合理的設計字段的數據類型是提高檢索效率的基礎,當在表中添加字段的時候,應該選擇長度最小的數據類型,這樣表在內存中每頁可以存儲更多的記錄。
其次是在數據量較大的工況表上建立索引(Index),SQLite允許對數據庫表進行索引,以此能迅速查詢記錄,而無需查詢整個表,由此顯著的加快查詢速度[10]。系統在首次運行的時候就會執行相關的建庫語句,可以確保在存入數據的時候表中已建立好相應的索引項。
最后可以通過調整數據庫的緩沖區進行優化,通常,變量控制緩沖區的長度應該在處理索引表的時候使用,因此可以采用不斷增加的方法以確保索引具有最佳的性能,根據相關研究測試,我們采用系統內存25%的大小作為該變量的值,以此來達到最佳的性能。
3安全性設計
軟件系統為了防止被非法盜用,甚至被反編譯篡改,系統通常需要采用一定的加密技術處理。如果加密系統只是一種單純的依賴密鑰的系統,那對用戶發放使用權的時候就是發放密鑰,這種系統保密性較低,一旦密碼泄漏則軟件的保密性也不復存在。
采用證書授權可以在很大程度上保證軟件的安全性,但證書的生成通常需要網絡和用戶身份等基礎設施或基本信息才能滿足。根據設備的實際使用環境,我們以如下特殊方式解決:
身份信息(Identity):通過設計一個獨立的軟件,提取設備的基本信息,包括設備網絡地址、系統號和基址序列號(SSN)作為指紋信息,然后將采集到的指紋信息匯聚至工作機,即證書中心(CA),通過組合算法,將收到的三種信息生成惟一的一種信息,即三碼合一。然后將生成的三碼合一文件作為授權證書,發送給用戶。
4結語
本文分析了中石油基層鉆井工的作業環境,對其中繁瑣的流程進行了深入研究,設計并開發了井控信息處理系統。該系統使用基于安卓操作系統的定制手持設備,將眾多的紙質記錄表格和復雜的公式、系數移植到了智能設備上,極大地簡化了操作過程,節省了大量的人力和時間。數據庫系統的使用則解決了傳統記錄中數據檢索難、易丟失和保存難的缺陷。
受限于野外作業環境的惡劣對網絡的影響,本系統尚未解決利用網絡遠程傳輸的問題,利用網絡實現遠程傳輸和監控是本系統有待提高的方向。
參考文獻
[1] 索蓋林.android開發入門指南[M].2版.北京:人民郵電出版社,2009.
[2] 余志龍.Android SDK開發范例大全[M].北京:人民郵電出版社,2010.
[3] 韓超,梁泉.Android系統原理及開發要點詳解[M].北京:電子工業出版社,2010.
[4] 李觀華,范輝.J2ME在移動通信程序中的應用[J].計算機應用,2003(3):124?126.
[5] 廖永剛,余冬梅,張秋余.J2ME架構與安全機制的研究[J].計算機工程與設計,2006(4): 575?577.
[6] 王勤.計算機控制技術[M].北京:機械工業出版社,2003.
[7] MEIER Reto.Android高級編程[M].王超,譯.2版.北京:清華大學出版社,2010.
[8] 劉扶松.Android開發從入門到精通[M].北京:希望電子出版社2012.
[9] 楊豐盛.Android技術內幕(系統卷) [M].北京:機械工業出版社 2011.
[10] E2ECloud.深入淺出Google Android[M].北京:人民郵電出版社,2009.
二層結構:由于井隊的工況種類不一,而每種工況下又可分為更細的工況。 在第二層結構上,采用了彈出式菜單(Pop Menu)和幀布局(FrameLayout)[5],通過點擊工況觸發切換事件,由后臺進程調用事件相對應的幀(Frame),即工況顯示界面,這樣可以使所有的工況共用剩余的顯示空間。
(2) 表格結構。由于傳統的井控數據記錄紙質表已使用多年,所以工人大都習慣了傳統的表格記錄格式,加之現行的安卓組件大多為文本框,按鈕等,只能滿足常用的事件調用,單純的設計成傳統的翻頁式記錄程序,經試用,工人使用極其不習慣。
針對上述情況,我們設計并制作出了動態表格(Dynamic Table)技術,這種技術的動態主要體現在2個方面:
① 表格數據的動態讀取,表格中顯示的數據即是之前填入的所有歷史數據,但并不是由錄入界面直接送入表格,這是因為隨著記錄時間的推移,記錄的數據會有成千上萬條甚至更多,手持設備的內在和處理能力根本無法響應如此大量的數據讀取。為此,系統采用了雙緩存技術(Double Buffer)[6],即數據庫與顯示適配器之間加緩存,適配器與顯示進程之間加緩存,如圖3所示。
圖3 緩存結構
② 表格空間的動態顯隱,為了使傳統作業的工人能夠在盡快適應新的設備,減少后期業務培訓的成本,系統使用了劃動事件感知技術,將工人使用的傳統紙質表格平緩的轉化成智能填寫的電子表格,這種表格具有雙向自動顯隱的功能,橫向(Horizontal)包含了工況對應的所有數據項,縱向(Vertical)可以依靠二級數據緩存顯示所有的歷史數據記錄[7]。當組件感知到劃動事件后會判斷劃動的方向,如果是橫向劃動,則根據劃動方向動態的重繪表格,根據劃動的力度大小,決定隱藏掉的部分與顯示出的部分的大小。如果是縱向劃動,則由后臺數據進程首先根據斷點將對應位置的數據記錄從數據庫中讀取至內在,然后再將數據記錄裝配到顯示適配器中進行顯示。
2.3模塊間數據傳輸
2.3.1問題描述
如①中描述,各主功能模塊之間的結構較為分散,即分裝在不同的卡中,每個功能模塊對應不同的線程,而數據錄入模塊需要用到系數配置模塊的數據,傳統的依靠變量傳輸在此失效。
2.3.2解決方法
因為系統平臺是安卓系統,而安卓系統的底層是使用Linux的內核,所以使用Linux中的管道技術(Pipe)[8]。
不過,從管道讀數據是一次性操作,數據一旦被讀,它就從管道中被拋棄,釋放空間以便寫更多的數據。所以,在數據從管道輸入至數據錄入模塊時會先被暫存到一個XML文件里,由于XML文件可以作長期存儲用,所以在下次需要讀數據的時候進程會先從XML里查找,若查找到,則數據命中,否則的話再通過管道進行讀取,這種技術可以減少使用管道的次數,提高數據的命中率,進而提高系統的處理速度。
2.4數據存儲
2.4.1問題描述
使用文本存儲數據的特點是寫入數據簡單,但讀取時難度較大,尤其是數據量較大或數據項較復雜的時候更是難以操作,且不利于保存和轉儲。在進行數據檢索的時候更是無從下手,效率低下且錯碼率高。
2.4.2解決方法
使用嵌入式系統型數據庫SQLite來存放數據,可以解決數據存儲的問題。SQLite 是用 C 語言編寫的開源嵌入式數據庫引擎,它是完全獨立的,不具有外部依賴性。SQLite 支持多數 SQL92 標準,可以在所有主要的操作系統上運行,并且支持大多數計算機語言。SQLite 還非常健壯。它還是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,具有資源占用少、性能良好、支持事務性等特點[9]。由于其開發語言的兼容性使它可以與安卓系統良好的結合在一起,并對上層安卓應用層提供高性能的接口。
2.5數據檢索
2.5.1問題描述
關系型數據庫的表結構可以完美的對應于實際中的實體表。但數以幾十萬計的記錄要在給定的檢索條件下在毫秒甚至微秒級的時間內檢索出結果來需要設備有很強的計算能力和高速的緩存,但手持設備通常不具備這樣高性能的條件。如何開發一種高效的檢索算法成了解決問題的關鍵。
2.5.2解決方法
由于嵌入式數據庫對數據字段的支持有限,合理的設計字段的數據類型是提高檢索效率的基礎,當在表中添加字段的時候,應該選擇長度最小的數據類型,這樣表在內存中每頁可以存儲更多的記錄。
其次是在數據量較大的工況表上建立索引(Index),SQLite允許對數據庫表進行索引,以此能迅速查詢記錄,而無需查詢整個表,由此顯著的加快查詢速度[10]。系統在首次運行的時候就會執行相關的建庫語句,可以確保在存入數據的時候表中已建立好相應的索引項。
最后可以通過調整數據庫的緩沖區進行優化,通常,變量控制緩沖區的長度應該在處理索引表的時候使用,因此可以采用不斷增加的方法以確保索引具有最佳的性能,根據相關研究測試,我們采用系統內存25%的大小作為該變量的值,以此來達到最佳的性能。
3安全性設計
軟件系統為了防止被非法盜用,甚至被反編譯篡改,系統通常需要采用一定的加密技術處理。如果加密系統只是一種單純的依賴密鑰的系統,那對用戶發放使用權的時候就是發放密鑰,這種系統保密性較低,一旦密碼泄漏則軟件的保密性也不復存在。
采用證書授權可以在很大程度上保證軟件的安全性,但證書的生成通常需要網絡和用戶身份等基礎設施或基本信息才能滿足。根據設備的實際使用環境,我們以如下特殊方式解決:
身份信息(Identity):通過設計一個獨立的軟件,提取設備的基本信息,包括設備網絡地址、系統號和基址序列號(SSN)作為指紋信息,然后將采集到的指紋信息匯聚至工作機,即證書中心(CA),通過組合算法,將收到的三種信息生成惟一的一種信息,即三碼合一。然后將生成的三碼合一文件作為授權證書,發送給用戶。
4結語
本文分析了中石油基層鉆井工的作業環境,對其中繁瑣的流程進行了深入研究,設計并開發了井控信息處理系統。該系統使用基于安卓操作系統的定制手持設備,將眾多的紙質記錄表格和復雜的公式、系數移植到了智能設備上,極大地簡化了操作過程,節省了大量的人力和時間。數據庫系統的使用則解決了傳統記錄中數據檢索難、易丟失和保存難的缺陷。
受限于野外作業環境的惡劣對網絡的影響,本系統尚未解決利用網絡遠程傳輸的問題,利用網絡實現遠程傳輸和監控是本系統有待提高的方向。
參考文獻
[1] 索蓋林.android開發入門指南[M].2版.北京:人民郵電出版社,2009.
[2] 余志龍.Android SDK開發范例大全[M].北京:人民郵電出版社,2010.
[3] 韓超,梁泉.Android系統原理及開發要點詳解[M].北京:電子工業出版社,2010.
[4] 李觀華,范輝.J2ME在移動通信程序中的應用[J].計算機應用,2003(3):124?126.
[5] 廖永剛,余冬梅,張秋余.J2ME架構與安全機制的研究[J].計算機工程與設計,2006(4): 575?577.
[6] 王勤.計算機控制技術[M].北京:機械工業出版社,2003.
[7] MEIER Reto.Android高級編程[M].王超,譯.2版.北京:清華大學出版社,2010.
[8] 劉扶松.Android開發從入門到精通[M].北京:希望電子出版社2012.
[9] 楊豐盛.Android技術內幕(系統卷) [M].北京:機械工業出版社 2011.
[10] E2ECloud.深入淺出Google Android[M].北京:人民郵電出版社,2009.