專利名稱:異構數據庫的統一訪問方法
技術領域:
本發明涉及一種數據庫訪問方法,具體來說涉及一種異構數據庫的統一訪問方法。
背景技術:
隨著計算機和軟件技術的不斷發展,軟件領域的分工也越發精細,具體體現在不同的行業、不同的項目甚至同一個項目的不同階段的側重點完全可能不一樣,所采取的技術工具、數據模型和數據庫管理系統都可能完全不盡相同。在數據庫管理系統的領域內,目前就存在著傳統的關系型數據庫管理系(例如 甲骨文公司的Oracle、IBM公司的DB2、Sun公司Syl^ase以及微軟公司的SQLServer等)、實時/歷史數據庫系統、對象數據庫管理系統。通常,傳統的關系數據庫管理系統都是以SQL 標準對外提供訪存接口,Insert/Select/Update和Delete等標準的SQL語句;而實時/歷史數據庫系統和對象數據庫系統一般都是以和各種語言綁定的API調用來提供訪存接口。 因此對于數據庫應用開發人員來說,開發一個應用往往需要熟悉和了解各類數據庫關系系統的特性和API (應用編程接口)。因此,目前在大型項目中,由于引入了特性各異的數據庫管理系統,給軟件開發人員帶來了極大的開發難度和后期維護難度。一方面數據管理的精細化是必然的趨勢,需要引入不同的針對性很強的數據庫管理軟件;另外一方面,目前沒有一種行之有效的方法和統一和簡化異構數據庫的統一訪問技術。現在,數據庫管理技術領域一般將數據分為如下三種類型a、管理型關系數據;b、生產型時序數據;C、應用型模型數據。因此如何將各種數據抽象統一、歸納整理出一種標準的訪問手段變得尤為迫切。
發明內容
本發明的目的在于提供一種異構數據庫的統一訪問方法,該方法能夠實現通過統一的訪問接口訪問各種異構數據庫,從而降低數據庫應用開發過程中的難度、縮短開發的時間周期,進一步降低應用系統后期的維護成本。本發明的目的可通過以下的技術措施來實現一種異構數據庫的統一訪問方法,包括如下方法步驟一前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發往后臺數據庫請求處理程序;步驟二 后臺數據庫請求處理程序根據SQL標準語法分析SQL語句是否合法;如果SQL語句不合法,構造錯誤回應包給客戶端,然后直接退出本流程;否則,進入下一步;步驟三對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據虛表表名判斷當前的請求是發向哪類異構數據庫服務器的,所述異構數據庫服務器的類型包括傳統關系數據庫管理系統、實時/歷史數據庫系統、對象數據庫管理系統;其中,實時/歷史數據庫系統包括兩張虛表實時數據庫表(RTDBRTVT)和歷史數據庫表(RTDBHTVT); 對象數據庫管理系統包括三張虛表模型數據表(0DBM0DELVT)、類數據表(0DBCLASSVT)和實例數據表(ODBINSTANCEVT);如果當前SQL語句中的表名稱是實時數據庫表(RTDBRTVT) 或歷史數據庫表(RTDBHTVT),則是發往實時/歷史數據庫服務器的請求;如果當前SQL 語句中的表名稱是模型數據表(0DBM0DELVT)、類數據表(0DBCLASSVT)或實例數據表 (ODBINSTANCEVT),則是發往對象數據庫服務器的請求;否則默認是發往傳統關系數據庫服務器的請求;步驟四根據步驟三判斷得到的結果選擇對應異構數據庫服務器的SQL分析處理器來處理SQL語句中的實際讀寫請求,如果是發往傳統關系數據庫服務器的請求則選擇傳統關系數據庫管理系統SQL分析處理器(100);發往實時/歷史數據庫服務器的請求則選擇實時/歷史數據庫系統SQL分析處理器O00);發往對象數據庫服務器的請求則選擇對象數據庫管理系統SQL分析處理器(300);各個分析處理器的處理過程如下(1)、所述的傳統關系數據庫管理系統SQL分析處理器(100)處理針對傳統關系數據管理系統的讀寫請求,處理的過程如下al)、如果對應的傳統關系數據庫管理系統的原始API (710)支持標準的SQL語法語句,那么不需要進行轉換處理,直接將這個原始請求傳給傳統關系數據庫管理系統的原始API (710)調用執行;bl)、如果對應的傳統關系數據庫管理系統的原始API (710)不支持標準的SQL語法語句,則進行語法轉換,將請求中的標準SQL語句通過對應的傳統關系數據庫管理系統的語法轉換器進行轉換,并將轉換后的SQL語句傳遞給對應的傳統關系數據庫管理系統的相應原始API (710)進行調用;(2)、所述的實時/歷史數據庫系統SQL分析處理器(200)處理針對實時/歷史數據庫系統的讀寫請求,處理的過程如下a2)、使用語法分析器第一步分析確定輸入的SQL語法是否符合實時/歷史數據庫系統支持的語法,同時分析SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制;1^2)、如果當前請求的SQL語句操作類型是對實時/歷史數據庫系統的虛表的查詢 (SELECT)、更新(Update)或插入(INSERT)以外的請求動作,則返回失敗;否則進入c2 ;c2)、根據a2分析出的結果,調用實時/歷史數據庫系統的相應API執行相應請求;(3)、所述的對象數據庫管理系統SQL分析處理器(300)處理針對對象數據庫管理系統的讀寫請求,處理的過程如下a3)、使用語法分析器第一步分析確定輸入的SQL語法是否符合對象數據庫管理系統支持的語法,同時分析出SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制。b3)、如果當前請求的SQL語句操作類型是對對象數據庫系統的虛表的查詢 (SELECT)、更新(Update)或插入(INSERT)以外的請求動作,則返回失敗,因為對象數據庫系統中的虛表是固定的,不允許創建表、修改表和刪除表等操作;否則進入c3 ;c3)、根據a3分析出的結果,調用對象數據庫系統的相應API執行相應請求;
步驟五將步驟四執行后的結果返回給前臺客戶端。所述支持標準的SQL語法語句的傳統關系數據庫管理系統包括Oracle、DB2、 Sybase 禾口 SQL Server。所述步驟(^)的具體過程是根據a2分析出的SQL語句操作類型以及要操作的虛表表名,判斷執行以下不同的步驟如果是INSERT語句并且虛擬表的表名是實時數據庫表(RTDBRTVT),則調用實時/ 歷史數據庫系統的實時數據插入API來執行該請求;如果是INSERT語句并且虛擬表的表名是歷史數據庫表(RTDBHTVT),則調用實時/ 歷史數據庫系統的歷史數據插入API來執行該請求;如果是SELECT語句并且虛擬表的表名是實時數據庫表(RTDBRTVT),則調用實時/ 歷史數據庫系統的實時數據查詢API來執行最終的請求;如果是SELECT語句并且虛擬表的表名是歷史數據庫表(RTDBHTVT),則調用實時/ 歷史數據庫系統的歷史數據查詢API來執行最終的請求;如果是Update語句并且虛擬表的表名是實時數據庫表(RTDBRTVT),則調用實時/ 歷史數據庫系統的實時數據更新API來執行最終的請求;如果是Update語句并且虛擬表的表名是歷史數據庫表(RTDBHTVT),則調用實時/ 歷史數據庫系統的歷史數據修改API來執行最終的請求;如果是Delete語句并且虛擬表的表名是實時數據庫表(RTDBRTVT),則該請求屬于非法的一種,實時數據是不允許被刪除的;如果是Delete語句并且虛擬表的表名是歷史數據庫表(RTDBHTVT),則調用實時/ 歷史數據庫系統的歷史數據刪除API來執行最終的請求;實時/歷史數據庫系統包括兩張虛表實時數據庫表(RTDBRTVT)和歷史數據庫表 (RTDBHTVT),其中,所述實時數據庫表中存儲實時/歷史數據庫系統的標簽編號、數據的時間標簽、實時數值和數值狀態;歷史數據表中存儲實時/歷史數據庫系統的標簽編號、數據的開始時間標簽、數據的結束時間標簽、歷史數值和數值狀態。所述步驟c3)的具體過程是根據a3分析出的SQL語句操作類型,要操作的虛表表名,根據判斷執行以下不同的步驟如果是SELECT語句并且表名是模型數據表(0DBM0DELVT),則調用對象數據庫系統的模型數據查詢API來執行最終的請求;如果是INSERT語句并且表名是模型數據表(0DBM0DELVT),則調用對象數據庫系統的模型數據插入API來執行最終的請求;如果是UPDATE語句并且表名是模型數據表(0DBM0DELVT),則調用對象數據庫系統的模型數據更新API來執行最終的請求;如果是Delete語句并且表名是模型數據表(0DBM0DELVT),則調用對象數據庫系統的模型數據刪除API來執行最終的請求;如果是SELECT語句并且表名是類數據表(ODBCLASSVT),則調用對象數據庫系統的類數據查詢API來執行最終的請求;如果是INSERT語句并且表名是類數據表(ODBCLASSVT),則調用對象數據庫系統的類數據插入API來執行最終的請求;
如果是UPDATE語句并且表名是類數據表(0DBCLASSVT),則調用對象數據庫系統的類數據更新API來執行最終的請求;如果是Delete語句并且表名是類數據表(0DBCLASSVT),則調用對象數據庫系統的類數據刪除API來執行最終的請求;如果是SELECT語句并且表名是實例數據表(ODBINSTANCEVT),則調用對象數據庫系統的實例數據查詢API來執行最終的請求;如果是INSERT語句并且表名是實例數據表(ODBINSTANCEVT),則調用對象數據庫系統的實例數據插入API來執行最終的請求;如果是UPDATE語句并且表名是實例數據表(ODBINSTANCEVT),則調用對象數據庫系統的實例數據更新API來執行最終的請求;如果是Delete語句并且表名是實例數據表(ODBINSTANCEVT),則調用對象數據庫系統的實例數據刪除API來執行最終的請求;對象數據庫管理系統包括三張虛表模型數據表(0DBM0DELVT)、類數據表 (0DBCLASSVT)和實例數據表(ODBINSTANCEVT),其中,模型數據表中存儲對象數據庫管理系統中的模型名稱、模型類型、創建時間、修改時間、模型描述和子類列表;類數據表中存儲對象數據庫管理系統中的類名稱、類所屬的包、創建時間、修改時間、類描述和實例列表;實例數據表中存儲對象數據庫管理系統中的實例名稱、所屬的類、創建時間、修改時間、實例描述和屬性列表。本發明對比現有技術,有如下優點1、本發明實現了對多種主流異構數據庫的統一訪問,即實現了統一采用SQL語法語句對多種異構數據庫進行訪問的方法;2、傳統關系數據庫管理系統中的表不是數據庫系統中的系統表就是用戶建立的用戶表。而在本方法中,除了傳統關系數據庫管理系統中真正存在的物理表,還有實時/歷史數據庫系統和對象數據庫管理系統的虛擬表,而且這些虛表的結構并不復雜,大多數應用中只需要關聯其中的部分虛表字段。
圖1是本發明的異構數據庫統一方法的系統邏輯結構示意圖;圖2是本發明的異構數據庫統一方法的流程圖。
具體實施例方式如圖1所示,本方法的異構數據庫統一訪問方法的系統中包括調用客戶端(0); 傳統關系數據庫管理系統SQL分析處理器(100);實時/歷史數據庫系統SQL分析處理器O00);對象數據庫管理系統SQL分析處理器(300);虛擬表構造器000),其中包含實時/歷史數據庫系統虛擬表構造器(410)和對象數據庫系統虛擬表構造器G20);數據庫原始API (700),其中包含傳統關系數據庫管理系統原始API (710)、實時/歷史數據庫系統原始API (720)和對象數據庫管理系統原始API (730);最后是后臺異構數據庫服務器系統 (800)。調用客戶端(0)的是數據庫應用軟件開發人員調用的接口,是本發明提供給外部的訪問接口。它類似于傳統意義上的應用程序開發接口(API)。其實質也是一系列的SQL 語法語句,不同的是這些SQL語法會被解析以辨別當前的請求是發往后臺的那類數據庫系統,同時在解析的過程中做一下語法的校驗和驗證操作。傳統關系數據庫管理系統SQL分析處理器(100)用于處理針對傳統關系數據管理系統的讀寫請求,將統一訪問的請求轉換翻譯成傳統關系數據庫管理系統的原始 API (710),通常這種原始的API都是標準的SQL語法語句。傳統關系數據庫管理系統 Oracle,DB2,Sybase和SQL Server都支持標準的SQL語法語句,傳統關系數據庫管理系統 SQL分析處理器(100)可以緩沖部分使用頻率很高的數據以加快數據訪問的速度。實時/歷史數據庫系統SQL分析處理器(200)用于處理針對實時/歷史數據庫系統的讀寫請求,將統一訪問的請求通過實時/歷史數據庫系統虛表構造器(410)轉換翻譯成實時/歷史數據庫系統的原始API (720),通常實時/歷史數據庫系統的原始API都是基于標準C語言的函數接口。主流實時/歷史數據庫系統PI和PTimeDB都提供標準C語言的函數接口,提供實時數據寫入、實時數據查詢、歷史數據查詢和歷史數據管理等函數接口。一般情況下,實時/歷史數據庫系統很多讀寫接口中都需要讓調用者提供內存緩存區, 實時/歷史數據庫系統SQL分析處理器(200)可以替調用者智能管理這部分。對象數據庫管理系統SQL分析處理器(300)用于處理針對對象數據庫管理系統的讀寫請求,將統一訪問的請求通過對象數據庫管理系統虛表構造器(420)轉換翻譯成對象數據庫管理系統的原始API (730),通常對象數據庫管理系統的原始API都是基于標準C語言的函數接口。主流對象數據庫管理系統db4o和OSpread都提供標準C語言的函數接口, 提供對模型、類、實例的寫入、查詢、修改和查詢等函數接口。虛擬表構造器(400)包含實時/歷史數據庫系統虛擬表構造器(410)和對象數據庫管理系統虛擬表構造器(420)兩部分。在實時/歷史數據庫系統中,一般不存在物理的表的概念,因此實時/歷史數據庫系統虛擬表構造器G10)的主要作用就是將現在實時/歷史數據庫系統中的數據模型抽象歸納成和傳統關系數據庫管理系統邏輯上一致的表概念。 當然這里的表是“虛表”,也就是邏輯上的概念,而不是物理上實際存在的物理表,因此稱為虛擬表構造器。上述異構數據庫統一訪問技術中,實時/歷史數據庫系統被虛擬成兩張虛表實時數據表RTDBRTVT和歷史數據表RTDBHTVT兩張虛表,兩張表結構一致,如表1所示
權利要求
1. 一種異構數據庫的統一訪問方法,其特征在于包括如下方法步驟一前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發往后臺數據庫請求處理程序;步驟二 后臺數據庫請求處理程序根據SQL標準語法分析SQL語句是否合法;如果SQL 語句不合法,構造錯誤回應包給客戶端,然后直接退出本流程;否則,進入下一步;步驟三對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據虛表表名判斷當前的請求是發向哪類異構數據庫服務器的,所述異構數據庫服務器的類型包括傳統關系數據庫管理系統、實時/歷史數據庫系統、對象數據庫管理系統;其中,實時/歷史數據庫系統包括兩張虛表實時數據庫表和歷史數據庫表;對象數據庫管理系統包括三張虛表模型數據表、類數據表和實例數據表;如果當前SQL語句中的表名稱是實時數據庫表或歷史數據庫表,則是發往實時/歷史數據庫服務器的請求;如果當前SQL語句中的表名稱是模型數據表、類數據表或實例數據表,則是發往對象數據庫服務器的請求;否則默認是發往傳統關系數據庫服務器的請求;步驟四根據步驟三判斷得到的結果選擇對應異構數據庫服務器的SQL分析處理器來處理SQL語句中的實際讀寫請求,如果是發往傳統關系數據庫服務器的請求則選擇傳統關系數據庫管理系統SQL分析處理器;發往實時/歷史數據庫服務器的請求則選擇實時/歷史數據庫系統SQL分析處理器;發往對象數據庫服務器的請求則選擇對象數據庫管理系統 SQL分析處理器;各個分析處理器的處理過程如下(1)、所述的傳統關系數據庫管理系統SQL分析處理器處理針對傳統關系數據管理系統的讀寫請求,處理的過程如下al)、如果對應的傳統關系數據庫管理系統的原始API支持標準的SQL語法語句,那么不需要進行轉換處理,直接將這個原始請求傳給傳統關系數據庫管理系統的原始API調用執行;bl)、如果對應的傳統關系數據庫管理系統的原始API不支持標準的SQL語法語句, 則進行語法轉換,將請求中的標準SQL語句通過對應的傳統關系數據庫管理系統的語法轉換器進行轉換,并將轉換后的SQL語句傳遞給對應的傳統關系數據庫管理系統的相應原始 API進行調用;(2)、所述的實時/歷史數據庫系統SQL分析處理器處理針對實時/歷史數據庫系統的讀寫請求,處理的過程如下a2)、使用語法分析器第一步分析確定輸入的SQL語法是否符合實時/歷史數據庫系統支持的語法,同時分析SQL語句操作類型,要操作的虛表的表名,要操作虛擬字段,和要操作的約束條件限制;b2)、如果當前請求的SQL語句操作類型是對實時/歷史數據庫系統的虛表的查詢、更新或插入以外的請求動作,則返回失敗;否則進入c2 ;c2)、根據a2分析出的結果,調用實時/歷史數據庫系統的相應API執行相應請求;(3)、所述的對象數據庫管理系統SQL分析處理器處理針對對象數據庫管理系統的讀寫請求,處理的過程如下a3)、使用語法分析器第一步分析確定輸入的SQL語法是否符合對象數據庫管理系統支持的語法,同時分析出SQL語句操作類型,要操作的虛表表名,要操作虛擬字段,和要操作的約束條件限制;b3)、如果當前請求的SQL語句操作類型是對對象數據庫系統的虛表的查詢、更新或插入以外的請求動作,則返回失敗,因為對象數據庫系統中的虛表是固定的,不允許創建表、 修改表和刪除表等操作;否則進入c3 ;c3)、根據a3)分析出的結果,調用對象數據庫系統的相應API執行相應請求; 步驟五將步驟四執行后的結果返回給前臺客戶端。
2.根據權利要求1所述的異構數據庫的統一訪問方法,其特征在于所述支持標準的 SQL語法語句的傳統關系數據庫管理系統包括Oracle、DB2、Sybase和SQL Server。
3.根據權利要求1所述的異構數據庫的統一訪問方法,其特征在于所述步驟c2)的具體過程是根據步驟a2)分析出的SQL語句操作類型以及要操作的虛表表名,判斷執行以下不同的步驟如果是INSERT語句并且虛擬表的表名是實時數據庫表,則調用實時/歷史數據庫系統的實時數據插入API來執行該請求;如果是INSERT語句并且虛擬表的表名是歷史數據庫表,則調用實時/歷史數據庫系統的歷史數據插入API來執行該請求;如果是SELECT語句并且虛擬表的表名是實時數據庫表,則調用實時/歷史數據庫系統的實時數據查詢API來執行最終的請求;如果是SELECT語句并且虛擬表的表名是歷史數據庫表,則調用實時/歷史數據庫系統的歷史數據查詢API來執行最終的請求;如果是Update語句并且虛擬表的表名是實時數據庫表,則調用實時/歷史數據庫系統的實時數據更新API來執行最終的請求;如果是Update語句并且虛擬表的表名是歷史數據庫表,則調用實時/歷史數據庫系統的歷史數據修改API來執行最終的請求;如果是Delete語句并且虛擬表的表名是實時數據庫表,則該請求屬于非法的一種,實時數據是不允許被刪除的;如果是Delete語句并且虛擬表的表名是歷史數據庫表,則調用實時/歷史數據庫系統的歷史數據刪除API來執行最終的請求。
4.根據權利要求1所述的異構數據庫的統一訪問方法,其特征在于所述實時/歷史數據庫系統包括兩張虛表實時數據庫表和歷史數據庫表,其中,所述實時數據庫表中存儲實時/歷史數據庫系統的標簽編號、數據的時間標簽、實時數值和數值狀態;歷史數據表中存儲實時/歷史數據庫系統的標簽編號、數據的開始時間標簽、數據的結束時間標簽、歷史數值和數值狀態。
5.根據權利要求1所述的異構數據庫的統一訪問方法,其特征在于所述步驟c3)的具體過程是根據步驟a3)分析出的SQL語句操作類型,要操作的虛表表名,根據判斷執行以下不同的步驟如果是SELECT語句并且表名是模型數據表,則調用對象數據庫系統的模型數據查詢 API來執行最終的請求;如果是INSERT語句并且表名是模型數據表,則調用對象數據庫系統的模型數據插入 API來執行最終的請求;如果是UPDATE語句并且表名是模型數據表,則調用對象數據庫系統的模型數據更新 API來執行最終的請求;如果是Delete語句并且表名是模型數據表,則調用對象數據庫系統的模型數據刪除 API來執行最終的請求;如果是SELECT語句并且表名是類數據表,則調用對象數據庫系統的類數據查詢API來執行最終的請求;如果是INSERT語句并且表名是類數據表,則調用對象數據庫系統的類數據插入API來執行最終的請求;如果是UPDATE語句并且表名是類數據表,則調用對象數據庫系統的類數據更新API來執行最終的請求;如果是Delete語句并且表名是類數據表,則調用對象數據庫系統的類數據刪除API來執行最終的請求;如果是SELECT語句并且表名是實例數據表,則調用對象數據庫系統的實例數據查詢 API來執行最終的請求;如果是INSERT語句并且表名是實例數據表,則調用對象數據庫系統的實例數據插入 API來執行最終的請求;如果是UPDATE語句并且表名是實例數據表,則調用對象數據庫系統的實例數據更新 API來執行最終的請求;如果是Delete語句并且表名是實例數據表,則調用對象數據庫系統的實例數據刪除 API來執行最終的請求。
6.根據權利要求1所述的異構數據庫的統一訪問方法,其特征在于所述對象數據庫管理系統包括三張虛表模型數據表、類數據表和實例數據表,其中,模型數據表中存儲對象數據庫管理系統中的模型名稱、模型類型、創建時間、修改時間、模型描述和子類列表;類數據表中存儲對象數據庫管理系統中的類名稱、類所屬的包、創建時間、修改時間、類描述和實例列表;實例數據表中存儲對象數據庫管理系統中的實例名稱、所屬的類、創建時間、 修改時間、實例描述和屬性列表。
全文摘要
本發明公開了一種異構數據庫的統一訪問方法,包括步驟前臺客戶端接收用戶輸入的SQL語句,并將SQL語句請求發往后臺數據庫請求處理程序;后臺數據庫請求處理程序根據SQL標準語法分析SQL語句是否合法;對請求SQL進行初步語法分析,分解出要操作的虛表表名,然后根據虛表表名判斷當前的請求是發向哪類異構數據庫服務器的;根據步驟三判斷得到的結果選擇對應異構數據庫服務器的SQL分析處理器來處理SQL語句中的實際讀寫請求;將步驟四執行后的結果返回給前臺客戶端。該方法能夠實現通過統一的訪問接口訪問各種異構數據庫,從而降低數據庫應用開發過程中的難度、縮短開發的時間周期,進一步降低應用系統后期的維護成本。
文檔編號G06F17/30GK102521254SQ20111036544
公開日2012年6月27日 申請日期2011年11月17日 優先權日2011年11月17日
發明者周伊琳, 孫建偉, 胡亞平, 陳揚, 陳炯聰, 黃縉華 申請人:廣東電網公司電力科學研究院