易覺(jué)非 (長(zhǎng)江大學(xué)一年級(jí)教學(xué)工作部,湖北 荊州 434023)
測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)數(shù)據(jù)訪問(wèn)層設(shè)計(jì)
易覺(jué)非 (長(zhǎng)江大學(xué)一年級(jí)教學(xué)工作部,湖北 荊州 434023)
通過(guò)數(shù)據(jù)需求分析,給出了測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)項(xiàng)目數(shù)據(jù)庫(kù)的關(guān)系模型。依據(jù)數(shù)據(jù)管理和應(yīng)用研究對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)要求,設(shè)計(jì)了基于.Net結(jié)構(gòu)體系的數(shù)據(jù)訪問(wèn)層,它包括數(shù)據(jù)對(duì)象、數(shù)據(jù)訪問(wèn)對(duì)象接口、數(shù)據(jù)訪問(wèn)對(duì)象、數(shù)據(jù)訪問(wèn)對(duì)象工廠4個(gè)模塊。實(shí)用表明,面向接口的設(shè)計(jì)和反射技術(shù)的應(yīng)用,使其具有良好的模塊獨(dú)立性、數(shù)據(jù)庫(kù)移植性和可擴(kuò)充性。
儲(chǔ)層參數(shù);數(shù)據(jù)庫(kù);數(shù)據(jù)訪問(wèn)層;接口;對(duì)象
測(cè)井儲(chǔ)層參數(shù)研究是測(cè)井解釋的重要工作之一,隨著測(cè)井解釋技術(shù)的發(fā)展,測(cè)井解釋已由常規(guī)單井?dāng)?shù)字處理發(fā)展到多井多信息綜合分析,在此過(guò)程中,需要同時(shí)用到一個(gè)區(qū)塊內(nèi)所有井的測(cè)井?dāng)?shù)據(jù)、關(guān)鍵井的巖心分析數(shù)據(jù)、試油數(shù)據(jù)、鉆井?dāng)?shù)據(jù)等。這些數(shù)據(jù)十分龐大復(fù)雜,需要借助現(xiàn)代數(shù)據(jù)庫(kù)技術(shù)統(tǒng)一管理這些數(shù)據(jù)[1]。自20世紀(jì)70年代測(cè)井繪圖軟件出現(xiàn)以來(lái),國(guó)內(nèi)外已研制出多種測(cè)井解釋軟件,如GeoFrame、Express、DPP、Forward[2]、Cif2000[3]、Lead[4]等。但這些軟件對(duì)數(shù)據(jù)的管理大多采用文件管理方式,這給網(wǎng)絡(luò)化數(shù)據(jù)共享帶來(lái)了困難。隨著油田企業(yè)網(wǎng)絡(luò)的建設(shè)和完善,測(cè)井?dāng)?shù)據(jù)的管理向網(wǎng)絡(luò)化數(shù)據(jù)庫(kù)方向發(fā)展已經(jīng)成為趨勢(shì),其中測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)為研究人員提供功能完整、操作方便的工作環(huán)境,從而提高了工作效率。測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)采用基于.Net技術(shù)的分層式C/S(Client/Server:客戶/服務(wù)器)結(jié)構(gòu)[5,6],4層結(jié)構(gòu)分別為:①數(shù)據(jù)庫(kù);②數(shù)據(jù)訪問(wèn)層。其功能主要負(fù)責(zé)數(shù)據(jù)庫(kù)的訪問(wèn),即實(shí)現(xiàn)對(duì)數(shù)據(jù)表的Select、Insert、Update、Delete的操作;③業(yè)務(wù)邏輯層。是整個(gè)系統(tǒng)的核心,它與這個(gè)平臺(tái)的業(yè)務(wù)(領(lǐng)域)有關(guān);④表示層。是系統(tǒng)的UI(用戶界面)部分,負(fù)責(zé)使用者與整個(gè)系統(tǒng)的交互。筆者就其中項(xiàng)目數(shù)據(jù)庫(kù)的建立和數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)進(jìn)行了研究。
圖1 測(cè)井儲(chǔ)層參數(shù)數(shù)據(jù)庫(kù)樹(shù)結(jié)構(gòu)圖
測(cè)井儲(chǔ)層參數(shù)研究所需的數(shù)據(jù)資料有:①井位分布資料;②每口井的相關(guān)資料(包括測(cè)井?dāng)?shù)據(jù)、處理成果曲線、綜合解釋成果數(shù)據(jù)、巖心分析數(shù)據(jù)、鉆井?dāng)?shù)據(jù)、試油數(shù)據(jù))。 這些數(shù)據(jù)形成樹(shù)狀數(shù)據(jù)結(jié)構(gòu),如圖1所示。其中鉆井?dāng)?shù)據(jù)主要為井眼軌跡數(shù)據(jù);試油數(shù)據(jù)主要為測(cè)試深度段內(nèi)的油氣水測(cè)試參數(shù);測(cè)井?dāng)?shù)據(jù)包括常規(guī)測(cè)井和成像測(cè)井?dāng)?shù)據(jù);巖心分析數(shù)據(jù)包括巖電分析、粒度分析、常規(guī)物性、高壓物性、相對(duì)滲透率、毛管壓力、地層水分析等數(shù)據(jù);處理成果包括孔隙度、滲透率、飽和度、泥值含量數(shù)據(jù);解釋成果包括地質(zhì)分層、巖性、解釋結(jié)論等。依據(jù)圖1所示的結(jié)構(gòu),構(gòu)建測(cè)井儲(chǔ)層參數(shù)研究數(shù)據(jù)庫(kù)關(guān)系模型,如圖2所示。
圖2 測(cè)井儲(chǔ)層參數(shù)數(shù)據(jù)庫(kù)關(guān)系模型
圖2中PK表示主鍵,F(xiàn)K表示外鍵,箭頭所指方向?yàn)橥怄I的參照引用關(guān)系。該數(shù)據(jù)庫(kù)的主要特點(diǎn)如下:
1)井眼和樣品為數(shù)據(jù)庫(kù)模型的關(guān)鍵實(shí)體,通過(guò)測(cè)井、鉆井、試油等數(shù)據(jù)綜合反映“井眼”實(shí)體信息;通過(guò)巖電分析、粒度分析、毛管壓力分析、相對(duì)滲透率分析、物性分析等數(shù)據(jù)綜合反映“樣品”實(shí)體信息。對(duì)“樣品”和“井眼”的描述體現(xiàn)了巖心刻度測(cè)井的基本需求。
2)某趟次測(cè)井的測(cè)井?dāng)?shù)據(jù)具有整體性,不宜將其拆分,因此采用XML數(shù)據(jù)包進(jìn)行存儲(chǔ)。該數(shù)據(jù)包分為包頭和數(shù)據(jù)體,包頭部分包括測(cè)井公司、測(cè)井儀器、測(cè)井日期、采樣間隔、測(cè)井系列、起止深度、次、趟等信息。
圖3 數(shù)據(jù)訪問(wèn)層模塊結(jié)構(gòu)圖
圖3為數(shù)據(jù)訪問(wèn)層模塊設(shè)計(jì)圖,它分為數(shù)據(jù)實(shí)體 (DO)、數(shù)據(jù)訪問(wèn)對(duì)象接口(IDAO)、SQLServer和Oracle數(shù)據(jù)訪問(wèn)對(duì)象(SQLServerDAO和OracleDAO)、數(shù)據(jù)訪問(wèn)對(duì)象工廠(DAOFactory)共4個(gè)模塊。
1)DO模塊 一個(gè)數(shù)據(jù)實(shí)體對(duì)應(yīng)數(shù)據(jù)庫(kù)中相應(yīng)的數(shù)據(jù)表。它們沒(méi)有行為,僅用于表現(xiàn)對(duì)象的數(shù)據(jù)。這些對(duì)象類都被放到DO程序集中,例如數(shù)據(jù)表“井位”對(duì)應(yīng)的實(shí)體類WellPositionInfo,其類圖如圖4所示。這些對(duì)象并不具有持久化的功能,它們作為數(shù)據(jù)的載體,只是便于業(yè)務(wù)邏輯針對(duì)相應(yīng)數(shù)據(jù)表進(jìn)行讀/寫操作。雖然這些類的屬性分別映射了數(shù)據(jù)表的列,而每一個(gè)對(duì)象實(shí)例也恰好對(duì)應(yīng)于數(shù)據(jù)表的每一行,但這些實(shí)體類卻并不具備對(duì)應(yīng)的數(shù)據(jù)庫(kù)訪問(wèn)能力。
2)IDAO模塊 數(shù)據(jù)庫(kù)業(yè)務(wù)邏輯包括Select,Insert,Update和Delete。由于這些業(yè)務(wù)邏輯僅具有行為而與數(shù)據(jù)無(wú)關(guān),因此它們均被抽象為一個(gè)單獨(dú)的接口模塊IDAO,例如數(shù)據(jù)對(duì)象WellPosition對(duì)應(yīng)的接口IWellPosition,如圖5所示。
將數(shù)據(jù)實(shí)體與相關(guān)的數(shù)據(jù)庫(kù)操作分離,符合面向?qū)ο蟮木?。首先,它體現(xiàn)了“職責(zé)分離”的原則。將數(shù)據(jù)實(shí)體與其行為分開(kāi),使得兩者之間依賴減弱,當(dāng)數(shù)據(jù)行為發(fā)生改變時(shí),并不影響DO模塊中的數(shù)據(jù)實(shí)體對(duì)象,避免了因一個(gè)類職責(zé)過(guò)多、過(guò)大,從而導(dǎo)致對(duì)該類的引用者產(chǎn)生“災(zāi)難性”的影響。其次,它體現(xiàn)了“抽象”的原則,或者是“面向接口編程”的最佳體現(xiàn)。抽象的接口模塊IDAO與具體的數(shù)據(jù)庫(kù)訪問(wèn)實(shí)現(xiàn)完全隔離,這種與實(shí)現(xiàn)無(wú)關(guān)的設(shè)計(jì),保證了系統(tǒng)的可擴(kuò)展性,同時(shí)也保證了數(shù)據(jù)庫(kù)的可移植性。
3)SQLServerDAO和OracleDAO模塊 測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)同時(shí)支持SQLServer和Oracle,數(shù)據(jù)訪問(wèn)對(duì)象(DAO)分別用SQLServeDAO和OracleDAO具體實(shí)現(xiàn)。以WellPosition為例,它們都實(shí)現(xiàn)了IWellPosition接口,但在SQLServerDAO和OracleDAO中,它們有不同的實(shí)現(xiàn),如圖6所示。
4)DAOFactory模塊 在SQLServerDAO或OracleDAO中包含多種數(shù)據(jù)訪問(wèn)對(duì)象。在前面的設(shè)計(jì)中,這些對(duì)象已經(jīng)被抽象為對(duì)應(yīng)的接口,即這些對(duì)象有多種類別。數(shù)據(jù)訪問(wèn)層采用抽象工廠模式創(chuàng)建這些對(duì)象,在DAOFactory模塊中實(shí)現(xiàn)。圖7為DAOFactory類圖。
圖4 井位實(shí)體類圖 圖5 井位對(duì)象接口圖 圖6 井位數(shù)據(jù)訪問(wèn)對(duì)象 圖7 DAOFactory類圖
DAOFactory是一個(gè)sealed類,其創(chuàng)建各種數(shù)據(jù)訪問(wèn)對(duì)象的方法均為靜態(tài)方法。通過(guò)運(yùn)用配置文件和反射達(dá)到抽象工廠[7]的目的。以下是其代碼片斷:
public sealed class DAOFactory
{
private static string wellPositionPath = ConfigurationManager.AppSettings[“WellPositionDAO”];
public static Platform.IDAO.IWellPosition
CreateWellPosition ()
{
string className = wellPositionPath + “.WellPosition”;
return
(Platform.IDAO.IWellPosition)Assembly.Load(wellPositionPath).CreateInstance(className);
數(shù)據(jù)管理子系統(tǒng)是測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)的子系統(tǒng)之一,該系統(tǒng)的功能是維護(hù)數(shù)據(jù)庫(kù)和數(shù)據(jù)查詢,對(duì)數(shù)據(jù)庫(kù)的各種操作直接或間接(通過(guò)業(yè)務(wù)邏輯層)調(diào)用數(shù)據(jù)訪問(wèn)層,因此,數(shù)據(jù)訪問(wèn)層的各個(gè)模塊可得到測(cè)試,如圖8所示。實(shí)際應(yīng)用表明,數(shù)據(jù)訪問(wèn)層完全符合數(shù)據(jù)維護(hù)和查詢的應(yīng)用要求。
圖8 數(shù)據(jù)管理子系統(tǒng)運(yùn)行界面
在建立測(cè)井項(xiàng)目數(shù)據(jù)庫(kù)的基礎(chǔ)上依據(jù) .Net 4層架構(gòu)體系設(shè)計(jì)的數(shù)據(jù)訪問(wèn)層,其主要技術(shù)特點(diǎn)體現(xiàn)在以下3個(gè)方面:①運(yùn)用“面向接口編程”,數(shù)據(jù)訪問(wèn)接口和具體實(shí)現(xiàn)完全隔離。這種與實(shí)現(xiàn)無(wú)關(guān)的設(shè)計(jì),降低了業(yè)務(wù)邏輯層或應(yīng)用程序?qū)?shù)據(jù)訪問(wèn)層的依賴,可以隨時(shí)更新數(shù)據(jù)庫(kù)的訪問(wèn)實(shí)現(xiàn),而不至于影響到整個(gè)系統(tǒng);②采用抽象工廠、配置文件和反射創(chuàng)建數(shù)據(jù)庫(kù)訪問(wèn)對(duì)象,可以使平臺(tái)支持多種類型的數(shù)據(jù)庫(kù),利于數(shù)據(jù)庫(kù)移植;③數(shù)據(jù)訪問(wèn)層與其他層次的弱耦合關(guān)系,使該層次的開(kāi)發(fā)人員只需專注于層內(nèi)功能模塊的具體實(shí)現(xiàn),有利于開(kāi)發(fā)中的工程管理和質(zhì)量控制。 實(shí)際應(yīng)用表明,數(shù)據(jù)訪問(wèn)層所實(shí)現(xiàn)的功能模塊符合測(cè)井儲(chǔ)層參數(shù)研究平臺(tái)數(shù)據(jù)管理和應(yīng)用研究的要求,具有良好的模塊獨(dú)立性、數(shù)據(jù)庫(kù)可移植性和可擴(kuò)充性。
[1]王繼賢,張慶國(guó).測(cè)井?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)及其在油藏描述中的應(yīng)用[J]. 石油勘探與開(kāi)發(fā),1990,(3):39~42.
[2] 陸大衛(wèi),金勇.一種面向?qū)ο蟮臏y(cè)井解釋平臺(tái)-Forward for windows[J].測(cè)井技術(shù),1997,21(1):55~60.
[3]LiNing.CifNet network multi-well data management system[J].Applied Geophysics, 2004,1(2):129~ 131.
[4]余春昊,李長(zhǎng)文.LEAD測(cè)井綜合應(yīng)用平臺(tái)開(kāi)發(fā)與應(yīng)用[J].測(cè)井技術(shù),2005,29(5):396~398.
[5]盛蕾,方華.基于ASP.NET的四層WEB應(yīng)用模型設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2006,34(7):147~150.
[6] Metsker S J.Design Patterns in C#[M]. New Jersey: Addison-Wesley,2005.
[7]Chang Y S,Park H D.XML Web Service-based development model for Internet GIS applications[J].International Journal of Geographical Information Science,2006,(4):371~399.
[編輯] 李啟棟
TP311.13
A
1673-1409(2009)02-N080-04
2009-02-28
易覺(jué)非(1966-),男,1987年大學(xué)畢業(yè),講師,現(xiàn)主要從事應(yīng)用數(shù)學(xué)和軟件開(kāi)發(fā)方面的教學(xué)和研究工作。