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

基于國產平臺的對象化數據訪問架構設計與實現*

2015-03-14 10:55:11周微民張成花
艦船電子工程 2015年8期
關鍵詞:數據庫用戶

周微民 張成花

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

?

基于國產平臺的對象化數據訪問架構設計與實現*

周微民 張成花

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

論文介紹了在自主產權的國產軟硬件平臺下數據訪問(對象化和通用SQL方式訪問)技術和架構設計,詳細討論了數據訪問架構的功能模塊設計和實現,重點闡述了快速數據訪問的連接池管理技術和數據請求響應時間優化技術,以及不同數據庫的適配管理技術。

國產平臺; 數據訪問; 數據庫適配

Class Number TP391

1 引言

我國在基礎軟硬件領域的發展起步較晚[1],長期以來,大部分市場被國外產品所占據,但是隨著這種以商業化的CPU和OS等軟硬件為運行基礎的信息系統存在一定的危險性[2],特別是在國防信息化領域網絡竊取越來越嚴重。為充分擺脫這種困境,我國的科研人員進行了大量科學研究工作,形成了以龍芯或飛騰CPU、麒麟OS、人大金倉或武漢達夢、天津神通等國產數據庫[3]為首的一批國產軟硬件,同時以這些國產軟硬件為基礎的國產平臺也逐漸推廣應用。

所以,在此環境下構建一個以龍芯CPU、麒麟操作系統和Qt開發環境的國產平臺[4]為基礎的數據訪問服務中間件是迫在眉睫的。數據訪問中間件采用對象映射技術屏蔽數據庫,采用適配管理技術適配金倉、達夢和神通等國產數據庫,也能適配Oracle10等主流數據庫,有效管理數據庫連接、實現負載均衡的功能。

2 架構設計

2.1 體系結構

結合相關基礎軟硬件,數據訪問服務中間件具體可分為適配層、訪問層、接口層、工具層和應用層,體系結構如圖1所示。

1) 適配層:主要實現對多種數據源的統一訪問,能夠向應用屏蔽數據庫管理系統的差異,適配的數據庫主要包括國產人大金倉、武漢達夢和天津神通數據庫以及商用Oracle10數據庫。

2) 訪問層:訪問層主要根據接口層的數據訪問請求,完成對SQL的解析和sql的提交數據庫執行,并向接口層返回sql執行結果。

3) 接口層:提供了分布式數據訪問的C/C++/JAVA標準接口和C/C++/JAVA的對象化接口。

圖1 數據訪問服務體系結構圖

4) 工具層:提供業務對象生成工具,主要用于輔助開發人員根據數據訪問需求,定制各種數據庫的業務對象,生成含有用戶定制sql語句的xml對象文件,業務對象生成工具再通過編譯命令生成對象的接口動態庫,業務開發人員調用對象接口訪問數據庫。

2.2 功能模塊設計

數據訪問服務為應用軟件提供分布式異構數據源的統一訪問,能夠屏蔽數據源存儲位置,加強數據訪問資源管理,從功能組成上分為客戶端的業務對象訪問和通用數據訪問以及服務端的數據庫訪問管理與審計三大模塊,如圖2所示。

圖2 數據訪問服務功能模塊圖

1) 業務對象訪問:本文設計了業務對象(包括業務對象文件和業務對象接口)來實現對象化[5]數據訪問,屏蔽數據模型的變化,使數據模型與應用業務邏輯相對獨立。業務元模型配置管理工具用于輔助用戶生成對象文件,封裝C++和Java的對象接口。業務對象訪問根據用戶對對象的操作,解析出可執行的sql交給通用數據訪問,通用數據訪問再交由數據庫訪問模塊執行sql,業務對象訪問接收返回結果后,將結果記錄反射成C++或Java對象給用戶,用戶可以操作查詢的對象。

2) 通用數據訪問:將用戶的sql請求交給數據庫訪問模塊執行,返回用戶執行的結果。

3) 數據庫訪問管理與審計:通過數據庫適配管理技術實現國產人大金倉、武漢達夢和天津神通數據庫以及商用Oracle10數據庫的訪問,記錄訪問日志,向客戶端返回執行結果。為了提高客戶端的響應時間,特別是提高查詢記錄條數很大時的客戶端響應時間,本文在服務端采用數據庫連接池管理技術復用數據庫連接,數據分片傳輸技術實現用戶對大批量記錄的查詢。在集群環境下,為保證服務器資源合理分配使用采用負載均衡技術:通過帶有負載均衡功能的交換機實現數據訪問服務負載均衡,負載均衡器會平均分發請求到數據訪問服務器;使用客戶端負載均衡技術,訪問服務依據當前數據庫的連接數量,選擇或創建合適的數據庫連接,數據庫間的數據同步由數據庫本身完成。

2.3 業務對象模型設計

圖3 Param格式組成

為了實現業務對象和關系數據庫之間的高效映射,使業務邏輯層與數據存儲有效分離,業務對象模型設計[6~7]是很重要的。本文采用業務對象描述對象-關系細節,業務對象采用XML格式。用戶通過業務元模型配置管理工具瀏覽數據庫中的物理數據表、字段、約束信息,根據要查詢或修改的內容,選擇一組相關的數據庫表及要顯示的字段,設置是否媒體表等定制出業務對象。業務對象建立了業務對象與相關物理實體之間的映射關系,從而使數據庫的數據以包含業務含義的對象形態呈現,易于業務應用開發人員統一用面向對象的方法設計程序和操作數據庫。應用請求數據訪問接口的形式和返回的結果都是對象的形式,不必考慮數據的關系模型存儲。

對象文件格式主要由Obj、ObjType、FieldInfo、QuerySQLs、InsertSQLs、UpdateSQLs、DeleteSQLs 七個部分組成。Param節點的格式組成如圖3所示。

Param的各節點信息說明如表1所示。

表1 各節點信息說明

FieldInfo節點的組成如圖4所示。FieldInfo節點描述了對象的屬性和數據庫表字段的映射信息:ProType、ProName分別表示屬性的類型和名稱,FieldAlias、SourceField分別表示字段的別名和字段在數據庫中的名字,Not-null、Length分別表示屬性是否為空和屬性長度,ColID表示屬性ID,Type、Description、Pk分別表示字段在數據庫中的類型、描述和是否主鍵,TabBM表示表的別名,Blob標識該屬性是否是blob,SourceTable表示字段所在數據庫的表名稱。

QuerySQLs節點的組成如圖5所示,主要描述了多個查詢sql的名稱、sql語句、select字段和where條件參數等。

圖4 FieldInfo格式組成

圖5 QuerySQLs格式組成

3 關鍵技術

3.1 數據訪問連接池動態擴展設計決策

在高速數據訪問中頻繁創建數據庫連接、釋放數據庫連接比較耗時,盡可能多滿足客戶端的服務請求,避免服務請求長時間無響應。本文連接池設計采用動態伸縮的處理方式,主要策略如下:

1) 連接池初始創建時連接數為零;

2) 當收到用戶訪問某個數據庫的請求時,首先建立與該數據庫的連接。該連接不會因為該用戶結束訪問而關閉,而是保持在連接池的連接隊列中;

3) 當再次接收到訪問該數據庫的請求時,連接池會將空閑連接分配給該請求使用;

4) 當存在多個用戶同時請求訪問同一個數據庫時,動態創建連接該數據庫的連接,直到連接數達到連接池允許的最大數為止;

5) 如果在T(根據測試情況設置,默認30分鐘)時間內,連接池中的連接未使用,則主動關閉及刪除連接。

3.2 基于數據分片的傳輸優化策略

數據請求響應時間關系到用戶體驗的優劣,在國產化環境下,由于硬件性能較低,請求響應時間相對較長。為了避免用戶在查詢大量數據(如100000條以上)時,用戶界面長時間得不到響應,數據訪問服務設計采用以下策略。

1) 當數據訪問服務接收到用戶數據查詢請求時,首先查詢前N(N可根據實際測試情況設置最佳值,默認3000)條數據,發送給訪問服務客戶端,并以數據鏈表形式立即提交給用戶。

2) 數據訪問服務在發送數據的同時,繼續查詢下N條數據,形成結果數據包,返回給客戶端,由客戶端形成數據鏈表后,掛接在上一批數據的末尾,實現對用戶透明。

3) 數據查詢完畢后,釋放連接,向客戶端返回查詢結束消息。

4) 數據包的大小可根據實際響應情況進行調整,以達到用戶最佳體驗為準。

3.3 數據庫適配管理

國產的各家數據庫在功能、性能和穩定性上都處于同一個層次,沒有商用Oracle的應用成熟,所以應用軟件在選擇國產數據庫存儲數據時的自由度比較大,有人大金倉、武漢達夢和天津神通。為了使數據訪問服務本身的應用能更好地屏蔽各家數據庫接口的差異,本文封裝了一系列數據庫操作方法,包括連接、斷開數據庫,執行SQL等。根據所使用的物理數據庫類型的不同,采用不同的數據訪問引擎接口:JDBC接口、人大金倉、武漢達夢和天津神通的本地數據庫接口。

數據庫適配管理的類關系如圖6所示。

圖6 數據庫適配管理類圖

CDBManager類管理數據庫連接池,數據庫連接池中的對象就是CDBBase類,CDBBase類是基類,CJCDB類、CDMDB類和CSTDB類都繼承CDBBase類,這四個類分別實現了自定義的適配各種國產數據庫的接口。

1) CDBManager類:連接池管理,用于創建連接對象CDBBase或選擇空閑的一個連接對象CDBBase為數據訪問建立連接,建立會話存放的空間。m_groupConnMap變量用于存儲連接池組;map結構中的string用于標識各種數據源;map結構中的set存儲連接對象CDBBase,相當連接隊列。

2) CDBBase類:數據庫連接對象基類,該類的方法就是自定義的一套適配各種數據庫的接口,該套接口參數簡單,比ODBC好用。CDBBase類主要通過調用ODBC接口實現自定義的數據庫適配接口,該類封裝在CDBBase.so動態庫中。通過ODBC方式訪問數據庫的性能比通過各國產數據庫廠商提供的本地數據庫接口訪問的性能要差些,但因為ODBC接口是微軟提供的一組對數據庫訪問的標準API,能以統一的方式處理所有遵循ODBC接口的數據庫,所以在實際的應用中適應性更強。

3) CJCDB類:人大金倉數據庫連接對象類,繼承CDBBase類,用人大金倉提供的本地數據庫接口實現自定義的數據庫適配接口,該類封裝在CJCDB.so動態庫中。

4) CDMDB類:達夢數據庫連接對象類,繼承CDBBase類,用達夢提供的本地數據庫接口實現自定義的數據庫適配接口,該類封裝在CDMDB.so動態庫中。

5) CSTDB類:神通數據庫連接對象類,繼承CDBBase類,用神通提供的本地數據庫接口實現自定義的數據庫適配接口,封裝在CSTDB.so動態庫中。

6) CORADB類:Oracle10數據庫連接對象類,繼承CDBBase類,在該類Qt/C++的實現中通過jni技術,調用已經封裝好的一個JDBC訪問Oracle10數據庫的jar包,從而實現自定義的數據庫適配接口,封裝在CORADB.so動態庫中。由于龍芯平臺沒有Oracle提供的odbc驅動,所以只能通過C++調用Java,Java中再調用JDBC接口來實現對Oracle數據庫的訪問。將自己寫的jar包打入到Oracle的JDBC驅動包中并更名為JavaDBAccess.jar,CORADB.so就可以通過jni技術訪問。

在實際應用中,當需要使用新類型的數據庫時,可以增加新的類定義,在該類中實現自定義的數據庫適配接口。

4 系統實現與使用示例

4.1 連接池實現

根據數據源標識和連接類型,創建連接池、創建數據庫連接,然后將連接池加入連接池組,最后使用創建的連接對象進行數據庫查詢或增刪改,連接池實現流程圖如圖7所示。

圖7 連接池實現流程圖

4.2 龍芯平臺上C++訪問Oracle的方法

為什么不用OCI?因為Oracle的OCI是閉源的并不提供龍芯平臺的動態庫。為什么不用ODBC?ODBC實際上也是使用OCI庫的,所以也是行不通。但是Oracle提供了JDBC的jar包,JDBC是用java寫的,屏蔽了底層CPU,只要操作系統有相應的JVM就可以調用JDBC了。通過JNI技術[8~11]來使C++調Java代碼,達到間接調用JDBC的目的。構造java類,編寫訪問Oracle的函數,在函數中調用JDBC,再導出java的類給C++調用。

實現中需要注意以下問題:

1) libjvm.so必須是java系統環境下的libjvm.so,不要拷貝到其它目錄,否則創建虛擬機失敗。

2) JavaVM *在進程內絕對唯一,是跨線程的,持久有效;JNIEnv *是當前線程有效,啟動線程后,用AttachCurrentThread方法獲得env;jmethodID由于不是一個jobject,只要對應的class沒有被卸載,在退出函數后仍可以使用;jclass在函數返回前有效。

4.3 對象接口使用示例

通過業務元模型配置管理工具生成橋梁對象:選擇數據庫中橋梁表中的字段交通設施內碼、橋長、橋寬、水深、歸屬地區、可停靠船的最大噸位字段,再在提示的關聯表中選擇交通設施表,選擇關聯屬性交通設施名稱,自動生成關聯的查詢SQL,由工具生成橋梁的xml對象文件,再由工具調用make命令編譯出橋梁對象接口:C++對象接口和java對象接口。橋梁對象的C++接口類如圖8所示,橋梁對象類CQLObj繼承對象基類CBaseObj,橋梁對象集類CQLObj繼承對象集基類CBaseSet,用戶可以調用CQLObj的方法進行對象的增加、修改和刪除,調用CQLSet的方法進行對象的查詢。

圖8 橋梁對象的C++接口類圖

以下代碼是C++用戶調用橋梁對象集的C++對象接口進行橋梁對象的查詢:

CQLSet qlSet; //定義橋梁對象

int iRecordCount;//定義查詢記錄數

int iRet = qlSet.IGetData(&iRecordCount, "default_select"); //調用查詢接口

std::list〈CBaseObj *〉::iterator iterObj = qlSet.ObjList.begin();int row = 0;

for(; iterObj != qlSet.ObjList.end(); ++iterObj)

{

row ++;

CQLObj *pObj = (CQLObj *)(*iterObj);

string strJTSSMC = pObj->IGetJTSSMC();//獲取交通設施名稱

string strQC = pObj->IGetQC();//獲取橋長

……

}

5 結語

數據訪問服務中間件是采用自主產權的國產軟硬件實現的,開發階段能較好地為應用提供C++和Java接口;運行階段有三種部署模式:單機、客戶/服務器、客戶/應用服務器/數據庫服務器,能為用戶屏蔽數據訪問細節,能更好地適應數據庫類型的變化。數據訪問服務中間件目前處于試用階段,在國產軟硬件平臺下應用良好。

[1] 高巍.對國產基礎軟件產業化的思考[J].信息技術與標準化,2012,7:24-25.

[2] 徐世波,張健.基于國產平臺的科研學術管理信息系統設計與實現[J].軟件,2013,34(11):50-51.

[3] 趙永升,唐新亭.國產數據庫技術發展研究[J].福建電腦,2006(3):36-37.

[4] 肖思瑩,趙麗娜,陳小春,等.基于國產平臺的可信系統研究[J].智能工業與信息安全,《微型機與應用》,2014,33(23):21-24.

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

[6] 孫旭東,陳歷勝,李玲,等.數字油田業務對象模型設計方法[J].大慶石油學院學報,2012,36(1):88-91.

[7] 周微民.基于復雜對象的數據快速訪問方案的設計與實現[J].艦船電子工程,2012,32(10):95-98.

[8] 衛洪春.JNI調用本地方法的原理及應用[J].計算機與信息技術,2010,06:84-86.

[9] 蘇德富,陳志琦,霍林.基于JNI的Java與其他高級語言之間通信的研究與應用[J].廣西大學學報(自然科學版),2005,31(1):6-9.

[10] 周強,樂小虬,李曦.JNI技術在桌面搜索工具中的應用[J].計算機技術與發展,2013,23(2):170-176.

[11] 李長禮,包宏.基于異構開發體系的中間件平臺[J].微計算機信息,2006,22(4-3):112-115.

Design and Implementation of Data Access Based on Domestic Platform

ZHOU Weimin ZHANG Chenghua

(The 28th Research Institute of China Electronics Technology Group Corporation, Nanjing 210007)

In this paper, the technique and design of data access based on domestic platform are introduced, which is developed along with method of object-oriented or method of generic sql parameter. It dwells on the design and implementation of the framework in detail. It elaborates with emphasis on quick data access based on connection pool management technique and optimization technique of data request response time, and database adapter technique for different database.

domestic platform, data access, database adapter

2015年2月13日,

2015年3月26日

周微民,女,工程師,研究方向:數據庫應用技術。張成花,女,工程師,研究方向:指揮信息系統技術。

TP391

10.3969/j.issn1672-9730.2015.08.026

猜你喜歡
數據庫用戶
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(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
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 国产最新无码专区在线| 久久亚洲国产最新网站| 强奷白丝美女在线观看| 国产在线一区视频| av在线人妻熟妇| 国产浮力第一页永久地址| 国产成人AV大片大片在线播放 | 亚洲精品午夜无码电影网| 亚洲天堂成人在线观看| 性做久久久久久久免费看| 日韩高清中文字幕| 亚洲欧美另类专区| 亚洲成a人片7777| 偷拍久久网| 亚洲欧美综合另类图片小说区| 久草性视频| 精品小视频在线观看| 国产精品短篇二区| 国产精品无码AV片在线观看播放| 69免费在线视频| 国产成人精品一区二区三区| 综合色区亚洲熟妇在线| 人妻无码AⅤ中文字| 99草精品视频| 大香伊人久久| 欧美a在线视频| 久夜色精品国产噜噜| 欧美成人精品欧美一级乱黄| 在线日韩日本国产亚洲| 国产性精品| 亚洲欧美日本国产综合在线| 理论片一区| 国产免费好大好硬视频| 男女精品视频| 亚洲大学生视频在线播放| 美女视频黄频a免费高清不卡| 亚洲无码在线午夜电影| 在线看国产精品| 91成人在线免费视频| 国产小视频a在线观看| 一级一级一片免费| 亚洲人网站| 久久99国产精品成人欧美| 夜夜拍夜夜爽| 青草视频久久| 福利在线一区| 欧美中文字幕在线播放| 精品久久久久久中文字幕女| 色偷偷男人的天堂亚洲av| 看你懂的巨臀中文字幕一区二区| 波多野结衣中文字幕一区二区| 欧美精品亚洲精品日韩专区| 国产伦片中文免费观看| 中文无码日韩精品| 又黄又爽视频好爽视频| 成人在线不卡| 无码免费的亚洲视频| 亚洲第一成年网| www.av男人.com| 国产福利在线观看精品| 国产高清在线丝袜精品一区| 免费观看无遮挡www的小视频| 国产va视频| 亚洲精品视频免费| 五月婷婷亚洲综合| 欧美精品高清| 亚洲男人在线| 午夜无码一区二区三区在线app| 亚洲欧美日本国产综合在线| 欧美日本不卡| 不卡网亚洲无码| 香蕉久久国产精品免| a级毛片网| 亚洲欧美日韩成人高清在线一区| 在线另类稀缺国产呦| 久久永久免费人妻精品| 99re在线观看视频| 色婷婷亚洲十月十月色天| 国产91透明丝袜美腿在线| 日韩毛片基地| 亚洲午夜国产精品无卡| 国产在线一区视频|