999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于復雜對象的數據快速訪問方案的設計與實現*

2012-06-07 01:51:22周微民
艦船電子工程 2012年10期
關鍵詞:關聯數據庫用戶

周微民

(中國電子科技集團公司第二十八研究所 南京 210007)

1 引言

目前的應用軟件大多通過ODBC、JDBC、ADO、BDE等最原始、最直接的方法訪問數據庫,或是通過數據庫廠商提供的接口訪問數據庫,這些方式雖然運行效率高,但是在程序中嵌入了大量的SQL語句,使得項目難以維護。如果關系數據模型非常復雜,直接寫SQL需要專業的知識,對于企業級應用的開發人員,從頭開發自己的持久化層是不可行的。同時由于數據標準、規范的建設滯后于信息系統的發展,各個信息系統中的數據庫資源都存在著語義、結構等方面的異構性[1],因此需要對象關系映射層,把數據庫訪問操作封裝起來,提供統一的對象接口,供業務調用。

對象/關系映射技術有多種實現,開源項目有 Hibernate[2]、NHibernate[3]、Castle 框 架。Hibernate是 “對 象—關系映射(Object—Relational Mapping,ORM)模塊實現數據持久層的一個優秀的Java組件。ORM元素主要功能是實現實體域對象的持久化并封裝[4]數據訪問的細節。Hibernate對JDBC進行了非常輕量級的封裝,其對象/關系數據庫映射,持久化,事務管理,緩存機制的功能很好,但是Hibernate在復雜多表聯合數據處理上的能力較弱;對于復雜的多表操作不適合用Hibernate。微軟NHibernate是基于Microsoft.NET的O/R Map2ping持久化框架。它從數據庫底層來持久化.Net對象到關系型數據庫。它不僅管理.NET類到數據庫表的映射,還提供數據查詢和獲取數據的方法[5]。但是其中的對象也只是相對比較簡單的主表和幾張子表之間關聯的對象,對象間的復雜關聯無法體現出來。Castle框架是針對.NET平臺的一個非常優秀的開源項目,從數據訪問框架ORM(Object2Relational Mapping,對象關系映射)到IOC(Inversion of Cont rol,控制反轉或者叫依賴注入)容器,再到WEB層的MVC框架,基本包括了整個開發過程中的所有內容,為開發易擴展、可伸縮、靈活、健壯的軟件系統提供了一個很好的平臺[6]。Castle封裝了NHibernate的大部分煩雜細節,不需要像NHibernate那樣去編寫復雜的對象映射文件,配置少且靈活,但是無法支持大型系統復雜的數據庫邏輯。

針對上述不足,本文設計了復雜對象模型以及基于該對象模型的數據快速訪問方案,采用這種方法進行數據庫應用系統開發,將增強系統的數據庫訪問能力和對軟件環境的適應能力,當系統更換底層數據庫系統,或更改數據庫物理表和字段信息時,只需修改對象和數據實體的映射關系,不會對系統產生大的影響。

2 方案設計

2.1 復雜對象模型構建

為了屏蔽數據庫,采用持久化技術。持久化技術的基本思想是以用面向對象的技術將數據庫關系表以及表中的記錄都看成是可以持久的對象。在這種技術中,首先可以利用面向對象的思想,“持久化”包括和數據庫相關的各種操作,并建立其對象模型。例如,保存:把域對象永久保存到數據庫;更新:更新數據庫中的域對象的狀態;刪除:從數據庫中刪除一個域對象;加載:根據特定的OID,把一個域對象從數據庫加載到內存;查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從數據庫加載到內存中[7]。本文根據持久化思想設計了業務對象模型。

業務對象模型是基于元數據庫的,元數據庫主要用于管理元數據。元數據是數據的組織、數據域以及關系的信息,也就是數據的數據[8]。元數據庫主要存儲了用戶需要訪問數據的相關數據對象的描述信息,構成數據庫邏輯視圖,其中數據庫結構信息主要來源于數據字典,即數據庫中用于存儲數據庫對象結構信息的專用表和視圖。

業務對象主要描述業務操作的數據訪問視圖,以XML的方式展現,具體內容包括:

1)對象信息:對象類名稱、對象類描述、數據庫對象ID、對象狀態、對象類型;

2)對象關系映射信息:對象屬性信息、映射的數據庫信息;

3)對象關聯信息:對象內部表間的關聯描述、對象間的關聯描述;

4)對象操作信息。增刪改查的命名SQL:SQL名稱、SQL描述、SQL中的參數描述(包括參數名稱、類型)、SQL的輸出字段別名名稱。級聯操作描述:在增加、修改、刪除記錄操作之前和之后執行的各種命名SQL描述,SQL執行順序號。

復雜對象是基于業務對象的,是簡單業務對象間的關聯關系組合。簡單業務對象間的關聯關系包括兩類:

1)如果一個簡單業務對象A的刪、改、查操作的任一條件字段的值能夠包含在另一個簡單業務對象B的查詢結果中,可以認為B與A之間存在父子關系;

2)如果兩個簡單業務對象A和A′,都是簡單業務對象B的子對象,則可以認為A和A′存在兄弟關系。

2.2 基于復雜對象的數據訪問

對象化數據訪問主要由業務對象和數據訪問兩個部分組成。業務對象根據實際應用的數據需求分為簡單業務對象和復雜業務對象,主要存儲對象和數據庫表之間的映射關系;數據訪問主要通過動態加載業務對象來完成用戶對數據庫數據的操作。

對象化數據訪問的主要工作流程為:先抽取專業數據庫結構到元數據庫中,形成數據庫邏輯視圖;再利用元數據庫生成簡單業務對象,描述業務操作的數據訪問視圖;然后分析生成的多個簡單業務對象間的關聯關系,根據業務需要設置對象間的關聯關系生成復雜業務對象,描述業務流程的數據訪問視圖;最后完成對象的數據訪問。

2.2.1 業務對象的生成

業務對象是依托元數據庫的,所以要先構建元數據庫,然后再生成業務對象。

1)抽取元數據

根據數據模型的描述,從專業數據庫的數據字典讀取需要訪問數據的相關數據對象(包括數據表、字段、約束等)的描述信息,存入元數據庫中,為業務對象的生成提供支持。主要步驟如下:

(1)讀取專業數據庫的連接信息;

(2)讀取專業數據庫里表的描述信息;

(3)讀取專業數據庫里表字段的描述信息;

(4)讀取專業數據庫里表的關聯信息;

(5)將專業數據庫的元數據描述信息存入元數據庫,供生成業務對象時使用。

該操作需要了解數據模型的人員參與選擇數據表和其他對象的范圍,需要根據應用要求增加或修改表的關聯關系或字段的取值范圍等,保存在元數據中,供后面生成對象時使用該邏輯關聯。對專業數據庫的元數據描述包括:

(1)數據表信息:表名稱、字段組成、主鍵字段;

(2)字段信息:字段名稱、字段類型、字段長度、是否非空;

(3)關聯關系:主子表的關聯信息。

2)生成簡單業務對象

從元數據模型中讀取數據表信息及其關聯表信息,以人機交互方式供用戶選擇與具體業務操作相關的一組表及其關心字段;根據用戶選擇的表和字段信息,及其元數據描述,自動生成對表間關聯關系、讀取順序的描述,以及默認的級聯增刪改查操作的SQL語句。允許用戶以人機交互方式修改默認生成的SQL語句,支持SQL的修改、增加、刪除,支持以參數形式定義SQL查詢條件,保存業務對象信息到XML中。具體操作流程如圖1所示。

3)生成復雜業務對象

根據分析的2.2.1節中用戶定義的一組簡單業務對象的關聯關系,生成對象樹。可能存在多棵對象樹;根據對簡單業務對象樹的深度和廣度兩種遍歷方式,生成供用戶參考的對象訪問操作執行順序鏈表。用戶通過人機交互方式確定業務工作流程中可能存在的一種或多種對象操作的訪問操作執行順序,還可以給出選擇某種執行順序的條件或優先級;與某個工作流程相關的一組簡單對象,構成復雜業務對象,同樣以XML存儲,XML中包含以下信息:

(1)包含的簡單業務對象列表,引用位置。

(2)描述簡單業務對象間的父子關系或兄弟關系,描述建立上述關系的表和字段。

(3)描述簡單對象訪問操作的執行順序,及選擇某種執行順序的條件或優先級。

2.2.2 數據訪問

圖1 生成簡單業務對象的過程

數據訪問主要提供數據庫中各類對象的數據訪問操作、查詢優化[9]以及連接池管理。數據訪問操作包括查詢、增加、修改和刪除,接口類型為對象類型。查詢優化主要包括查詢預取隊列和關鍵對象緩存:根據復雜業務對象描述中對象操作的執行順序,抽取執行操作序列中的查詢操作,形成查詢預取隊列;在50%以上的復雜業務對象中存在,且至少存在于兩個復雜業務對象中的簡單對象稱作關鍵對象,將關鍵對象存儲在內存中形成關鍵對象緩存鏈表。連接池管理主要管理數據庫的連接,保證數據庫資源的合理分配。

根據應用的對象接口請求執行對象的增刪改查操作,具體操作流程如圖2所示。

圖2 對象數據訪問及優化的流程

1)如果是查詢操作,步驟如下:

(1)如果查詢對象不在緩存中,則從數據庫獲取查詢結果,反射成對象集,如果該對象在關鍵對象緩存鏈表中,則將對象集數據駐留在緩存中;再根據查詢預取隊列,獲得下一個對象查詢操作,利用空閑時間提前執行。

(2)如果查詢對象數據已經在緩存中,則不訪問數據庫,直接從緩存中獲取對象。

(3)然后操作對象本身及其關聯的對象。

2)如果是對象的增刪改操作,則根據復雜對象文件的級聯配置執行級聯操作,提交數據庫。如果未設置級聯關系,則執行單表操作,提交數據庫;如果執行增刪改操作的對象是關鍵對象,則還需根據增刪改結果更新緩存中的對象數據。

3 關鍵技術

在對象關系映射系統中,對象預取與緩存技術可以提高用戶對持久化對象的訪問效率。

3.1 查詢預取

通過某種策略預測將來可能會被訪問到的對象,并預先將這些對象讀取到客戶端。如果預測對象在后面確實被訪問到了,那么預取策略會有效的減少數據訪問到數據庫查詢對象的操作,提高數據訪問性能。相反,如果預取對象沒有被訪問到,則會降低系統的性能,所以制定合理的預取策略是至關重要的。

本方案是通過抽取復雜對象操作序列中的查詢操作形成查詢預取隊列來構建預取策略的。在生成復雜對象的過程中,用戶可以使用和修改定制默認生成的簡單對象間關聯關系,根據復雜對象中關聯關系的描述,可以構建出多個查詢預取隊列。因為用戶根據實際數據需求參與關聯關系的確定,所以查詢預取隊列中的對象被訪問的機率是很大的甚至是100%。當用戶查詢某個對象A時,后臺會繼續查詢隊列中的下一個對象B,當操作到對象B的數據時,后臺會繼續查詢B的下一個對象C的數據,以提高查詢的速度。當用戶獲取到一個對象查詢數據后,可以在內存中獲取隊列中下一個對象的數據,減少了再去查詢數據庫的時間。

3.2 關鍵對象緩存

在實際應用中,頻繁地訪問數據庫,會對應用的性能造成很大影響。為了降低訪問數據庫的頻率,可以把需要經常被訪問的業務數據存放在緩存中,并且通過特定的機制來保證緩存中的數據與數據庫數據同步[10]。本方案的緩存思想是抽取所有對象中的關鍵對象形成緩存對象鏈表,對鏈表中的對象數據進行本地緩存和實時更新。在用戶的第一次查詢中,如果發現查詢對象是鏈表中的關鍵對象,則將查詢結果對象駐留在內存中,供其它應用再次查詢時直接使用,減少訪問數據庫的時間。當用戶通過關鍵對象的修改接口更新關鍵對象的數據到數據庫后,數據訪問也同步更新緩存中的關鍵對象數據,保證內存塊中關鍵對象的數據最新。

4 應用示例

復雜對象的數據訪問在某項目中的使用示例步驟如下:

1)用戶抽取業務數據庫模型到元數據庫中,形成數據庫邏輯視圖。

2)基于元數據模型,生成交通設施對象,選擇關心的一張主表交通設施及其關聯表,選擇主表中所有字段和關聯表中名稱字段,自動生成關聯的查詢SQL,主子表級聯操作的增刪改SQL。

生成橋梁對象,選擇表中的字段交通設施內碼、橋長、橋寬、水深、歸屬地區、可??看淖畲髧嵨坏?,再在提示的關聯表中選擇交通設施表,選擇關聯屬性交通設施名稱,自動生成關聯的查詢SQL,主子表級聯操作的增刪改SQL。類似地生成機場對象。

生成人防設施對象,用戶通過業務對象生成工具瀏覽專業庫中的數據表,選擇關心的一張主表人防設施表,選擇表中的字段人防設施內碼、防護等級ID(關聯防護等級表)、建筑面積、管理單位、可儲藏人數、其它描述,質量現狀ID(關聯質量現狀表)等,再在提示的關聯表中選擇防護等級表、質量現狀表,選擇關聯屬性防護等級名稱字段和質量現狀描述字段,自動生成關聯的查詢SQL,主子表級聯操作的增刪改SQL。

3)由2)生成的4個對象構建的樹形成復雜對象公共設施,構建兩個查詢預取隊列:查詢11、查詢12、查詢13和查詢21、查詢22,如圖3所示。針對制作好的一系列對象生成對象接口動態庫文件,用戶調用對象的增刪改查接口用于數據訪問。

圖3 對象間的關聯關系

4)數據訪問根據復雜業務對象公共設施描述中對象操作的執行順序,按照查詢11至查詢13或查詢21至查詢22的順序查詢和預取對象數據,形成查詢預取隊列;設置交通設施對象為關鍵對象,常駐內存中,以提高這個對象的數據訪問速度。

5)按照圖3所示的流程,按查詢11至查詢13的查詢操作序列查詢交通設施對象,查詢數據庫返回結果,反射成交通設施對象集,根據預取隊列的描述,利用空閑時間提前執行下一個對象橋梁對象的查詢操作,然后用戶可以操作交通設施對象及其關聯子對象橋梁,當操作橋梁數據時,再提前執行下一個對象機場對象的查詢。因為交通設施為關鍵對象,因此該對象數據駐留在內存中。如果用戶更新了交通設施這個對象中的數據,數據訪問同時也要刷新駐留在內存的交通設施對象數據。

5 結語

通過復雜對象化數據訪問,使專業人員將精力集中在業務邏輯處理上,不必關心數據庫底層操作的細節。由于數據訪問中的對象尤其是帶有業務流程的復雜對象是綜合了軍事指揮控制領域應用的數據訪問需求提煉出來的,所以具有一定的通用性,該系統可以應用到指控領域的各個項目中去,大大提高項目的開發效率和可擴展性。

[1]吳姍姍,彭向陽.基于XML的通用數據庫訪問引擎的設計與實現[J].指揮信息系統與技術,2010(1):55-59.

[2]Christian Bauer,Gavin King.Hibernate in Action[M].USA:Manning Publication,2004:15-26.

[3]Pierre Henri Kuaté,Christian Bauer,Gavin King.NHibernate In Action[M].Manning Publications,2007:36-40.

[4]高昂,衛文學.基于Hibernate與Struts框架的數據持久化應用研究[J].計算機應用,2005,25(12):2818-2819.

[5]李斌勇,李慶.基于NHibernate的ORM映射機制研究[J].計算機技術與發展,2009(7):32-34.

[6]萬長鵬,唐慧佳.基于ASP.NET+Castle框架的旅游管理系統的設計[J].成都信息工程學院學報,2007(4):458-461.

[7]周浩,張祖平.面向對象的持久化技術的研究與實現[J].企業技術開發,2010(9):4-5.

[8]武亞青.數據共享環境研究[J].指揮信息系統與技術,2011(2):35-40.

[9]Ben Wiedermann,William R C.Extracting queries by static analysis of t ransparent persiste nce[J].ACM SIGPLAN Notices,2007,42(1):199-210.

[10]孫衛琴.精通Hibernate:java對象持久化技術詳解[M].北京:電子工業出版社,2005:173-176.

猜你喜歡
關聯數據庫用戶
“苦”的關聯
當代陜西(2021年17期)2021-11-06 03:21:36
奇趣搭配
數據庫
財經(2017年2期)2017-03-10 14:35:35
智趣
讀者(2017年5期)2017-02-15 18:04:18
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 婷婷五月在线| 中文字幕在线日韩91| 色呦呦手机在线精品| 99久久无色码中文字幕| 无码内射在线| 国产精品页| 欧美另类第一页| 国产SUV精品一区二区6| 日韩国产无码一区| 91精品久久久无码中文字幕vr| 巨熟乳波霸若妻中文观看免费 | 欧美色伊人| 国产三级a| 亚洲视频免| 国产毛片不卡| 日韩欧美国产区| 中文字幕在线观| 伊人久久大香线蕉影院| 国产精品私拍在线爆乳| 国产91麻豆视频| 久久精品国产精品青草app| h视频在线播放| 2021无码专区人妻系列日韩| 中文字幕精品一区二区三区视频| 国产色网站| 国产精品浪潮Av| 极品尤物av美乳在线观看| 国产精品三区四区| h网站在线播放| 在线中文字幕日韩| 亚洲狠狠婷婷综合久久久久| 一本色道久久88| 日本www在线视频| 欧美性天天| 中文字幕啪啪| 婷婷六月综合| 久久人搡人人玩人妻精品一| 黄色网站不卡无码| 欧美一级视频免费| 制服丝袜一区| 精品夜恋影院亚洲欧洲| av一区二区三区高清久久| 亚洲人成人伊人成综合网无码| 免费国产好深啊好涨好硬视频| 亚洲AV无码久久天堂| 制服无码网站| 老色鬼久久亚洲AV综合| 欧美日韩高清| 天天摸天天操免费播放小视频| 青青国产视频| 青草免费在线观看| 欧美全免费aaaaaa特黄在线| 国产99视频精品免费观看9e| 女同国产精品一区二区| 成人久久18免费网站| 九色视频最新网址 | 国产成人一区二区| 精品国产欧美精品v| 亚洲精品在线91| 欧美国产日产一区二区| 波多野结衣一二三| 国产AV毛片| 国产精品网址在线观看你懂的| 999精品视频在线| 亚洲欧美日韩另类在线一| 91最新精品视频发布页| 欧美区在线播放| 波多野结衣在线一区二区| 日本免费福利视频| 亚洲国产日韩在线成人蜜芽| 日韩国产 在线| 美女一区二区在线观看| 国产毛片不卡| 97人人模人人爽人人喊小说| 美女国产在线| 亚洲妓女综合网995久久| 国产精品对白刺激| 国产精品网拍在线| 四虎国产精品永久一区| 亚洲精品国产首次亮相| 国产又黄又硬又粗| 欧美午夜视频在线|