一種基於嵌入式資料庫的分布式訪問方法
2023-06-11 13:01:51 1
專利名稱:一種基於嵌入式資料庫的分布式訪問方法
技術領域:
本發明涉及嵌入式資料庫領域,尤其涉及的是,一種基於嵌入式資料庫的分布式訪問方法。
背景技術:
嵌入式系統一般是指作業系統和功能軟體集成於計算機硬體系統之中,其具有軟體代碼小,高度自動化,響應速度快等特點,特別適合於要求實時的和多任務的體系。隨著各種嵌入式作業系統廣泛應用於航空、航天、通信、軍事、工業控制、醫療設備等領域,嵌入式資料庫的應用也越來越多。一些領域提出了對嵌入式資料庫的分布式訪問的需求,因此出現了如圖1、圖2所示的包含可擴展的數據管理系統(E-DBMS)的分布式嵌入式資料庫在客戶/伺服器(C/S)架構的應用。
分布式軟體系統(Distributed Software Systems)是支持分布式處理的軟體系統,是在由通信網絡互聯的多處理機體系結構上執行任務的系統。它包括分布式作業系統、分布式程序設計語言及其編譯(解釋)系統、分布式文件系統和分布式資料庫系統等。
分布式嵌入式資料庫功能強大,但由於分布式嵌入式資料庫同傳統的分布式資料庫一樣,要考慮數據的分片、數據的分布、數據冗餘度、事務管理的分布性等一系列集中式資料庫所不需考慮的難題,這對於大多數只需要進行簡單數據管理與維護的系統來說,大大增加了複雜性,處理不當也會影響系統的穩定可靠性。
並且,在對資料庫的訪問時,一般希望資料庫訪問接口能立即返回數據,接著對數據處理,即對資料庫同步訪問,位於伺服器端的應用程式一般都能通過調用資料庫提供的訪問接口對資料庫進行同步訪問。客戶/伺服器架構的應用中,其採用的訪問嵌入式資料庫的方法是,客戶應用程式發送消息給伺服器應用程式,然後在某一狀態下等待回應消息,伺服器應用程式訪問嵌入式資料庫,並把結果通過消息發送客戶應用程式處理。這是對資料庫的異步訪問,對每一個客戶應用程式都要編寫複雜的數據訪問處理流程,不利於數據的處理。而且,由於訪問方法的不同,也造成了應用程式不能方便地在客戶端和伺服器端移植。
因此,如何實現簡單有效的、同步的、易於移植的嵌入式資料庫的分布式訪問方法是使用客戶/伺服器架構的系統所面臨的一個難題。現有技術不能解決這一問題,因此需要改進。
發明內容
本發明的目的在於提供一種基於嵌入式資料庫的分布式訪問方法,能夠實現同步訪問資料庫,並且可以方便地在客戶端和伺服器端移植。
本發明的技術方案如下一種基於嵌入式資料庫的分布式訪問方法,其包括步驟A1、嵌入式資料庫創建統一訪問接口函數、接口代理模塊、接口服務模塊,其中接口代理模塊設置用於記錄接口和應用程式標識信息的接口訪問控制塊;A2、伺服器端應用程式訪問所述資料庫時,通過所述統一訪問接口函數調用所述資料庫的接口函數獲得數據,所述統一訪問接口函數返回,所述伺服器端應用程式繼續處理獲取的數據;A3、客戶端應用程式訪問資料庫時,調用所述統一訪問接口函數,向所述接口代理模塊發送資料庫訪問請求,並且對一個初始值為不可用的同步對象進行同步操作,阻塞所述客戶端應用程式;A4、所述接口代理模塊收到所述資料庫訪問請求,通過所述接口訪問控制塊記錄接口和應用程式標識信息,向所述接口服務模塊發送所述接口服務請求,並傳遞所述接口訪問控制塊標識和資料庫訪問所需的參數;A5、所述接口服務模塊收到所述接口服務請求,則調用所述統一訪問接口函數獲得數據,並向所述接口代理模塊發送所述接口服務請求回應消息並傳遞獲取的數據;A6、所述接口代理模塊收到所述接口服務請求回應消息,把收到的數據複製到所述統一訪問接口函數的輸出緩衝區中,然後把對應的同步對象置為可用,解阻塞並繼續執行所述客戶端應用程式。
所述的分布式訪問方法,其中,所述步驟A2之前,還包括步驟所述接口代理模塊初始化所述資料庫的同步對象;所述的分布式訪問方法,其中,所述不可用的同步對象包括初始值為0的信號量和無事件發生的事件對象。
所述的分布式訪問方法,其中,所述同步操作包括對信號量進行提取操作,或對事件對象進行等待操作。
所述的分布式訪問方法,其中,所述置為可用包括釋放信號量和對事件對象設置事件。
採用上述方案,本發明提供了一種簡單有效的嵌入式資料庫的分布式訪問方法,使客戶端應用程式能以同步方式訪問嵌入式資料庫,同步方式使得資料庫訪問接口返回時也能同時返回所要獲得的數據,便於應用程式及時處理數據,避免了前面所述常用的異步資料庫訪問方式中的多次消息交互,簡化了應用程式的數據處理流程;並且本所述方法實現了資料庫統一訪問接口,使應用程式在客戶端和伺服器端的資料庫訪問方法是一致的,不必考慮數據的物理分布,即數據的物理分布對應用程式是透明的,這樣也使應用程式在客戶端和伺服器端可以很方便的相互移植,相互移植時不必再修改資料庫訪問接口。
圖1為現有技術的一種嵌入式資料庫的客戶/伺服器架構的應用框圖;
圖2為現有技術的一種分布式嵌入式資料庫系統圖;圖3為本發明的嵌入式資料庫分布式訪問交互示意圖;圖4為本發明方法的流程圖。
具體實施例方式
以下對本發明的較佳實施例加以詳細說明。
如圖4所示,本發明提供了一種基於嵌入式資料庫的分布式訪問方法,包括以下步驟A1、嵌入式資料庫創建統一訪問接口函數、接口代理模塊、接口服務模塊,其中接口代理模塊設置用於記錄接口和應用程式標識信息的接口訪問控制塊。其中,所述資料庫統一訪問接口函數,在伺服器端的實現方法和在客戶端的實現方法不同;在伺服器端則直接調用嵌入式資料庫提供的接口訪問資料庫,在客戶端則使用作業系統提供的同步機制,數據的獲取和消息交互都交給了資料庫接口代理模塊和接口服務模塊來處理,客戶端在調用統一接口後被阻塞直到資料庫代理模塊把數據交給客戶程序,產生的效果就如同客戶應用程式訪問本地資料庫或調用一個函數訪問一個全局變量一樣。現有技術中客戶端應用程式本身充當了一部分本文描述的接口代理模塊的作用,但它只能處理自己的資料庫訪問消息交互流程。本發明的資料庫接口代理模塊採用了同步機制,而且可以處理客戶端所有的客戶程序的資料庫訪問請求。
A2、伺服器端應用程式訪問所述資料庫時,通過所述統一訪問接口函數調用所述資料庫的接口函數獲得數據,所述統一訪問接口函數返回,所述伺服器端應用程式繼續處理獲取的數據;這裡是使用了嵌入式資料庫提供的接口函數。其中,在所述步驟A2之前,還可以包括步驟B1所述接口代理模塊初始化所述資料庫的同步對象。
A3、客戶端應用程式訪問資料庫時,調用所述統一訪問接口函數,向所述接口代理模塊發送資料庫訪問請求,並且對一個初始值為不可用的同步對象進行同步操作,阻塞所述客戶端應用程式。其中,所述不可用的同步對象包括初始值為0的信號量和無事件發生的事件對象等;所述同步操作包括對信號量進行提取操作,或對事件對象進行等待操作。對一個初始值為不可用的同步對象,對信號量作提取操作或對事件對象作等待操作,應用程式被阻塞,等待該同步對象被置為可用。其中,所述置為可用包括釋放信號量和對事件對象設置事件。
A4、所述接口代理模塊收到所述資料庫訪問請求,通過所述接口訪問控制塊記錄接口和應用程式標識信息,向所述接口服務模塊發送所述接口服務請求,並傳遞所述接口訪問控制塊標識和資料庫訪問所需的參數。其中,接口訪問控制塊是接口代理模塊特有的數據結構,一個客戶端應用程式的訪問請求用一個接口訪問控制塊來控制,記錄接口和應用程式標識等信息。接口訪問控制塊的數據結構舉例說明如下接口訪問控制塊的數據結構舉例說明struct TDACB/*接口訪問控制塊*/{BYTE byUsed;/*使用標誌*/WORD wEvent;/*消息號*/BYTE*pbyOutBuf;/*輸出緩衝區地址*/WORD wOutBufLen;/*輸出緩衝區長度*/DWORD dwPId;/*訪問進程ID*/DWORD dwTimerId;/*定時器ID,用於等待接口服務模塊回應消息*/SEM_ID semId;/*信號量*/};A5、所述接口服務模塊收到所述接口服務請求,則調用所述統一訪問接口函數獲得數據,並向所述接口代理模塊發送所述接口服務請求回應消息並傳遞獲取的數據。
A6、所述接口代理模塊收到所述接口服務請求回應消息,把收到的數據複製到所述統一訪問接口函數的輸出緩衝區中,然後把對應的同步對象置為可用,如釋放信號量或對事件對象設置事件等,解阻塞並繼續執行所述客戶端應用程式。
其中,步驟A1、A2和A5是伺服器端的處理步驟,步驟A1、B1、A3和A4是客戶端的處理步驟。
具體地說,本發明所述一種基於嵌入式資料庫的分布式訪問方法中,客戶端和伺服器端分別實現資料庫接口代理模塊和資料庫接口服務模塊,並分別實現資料庫統一訪問接口。本發明所述方法中使用了嵌入式作業系統提供的同步機制,其中,同步操作是指一個任務A,要求啟動操作的任務B暫停活動直到該任務A完成某個操作;用於實現同步機制的對象有很多,如VxWorks作業系統提供的二進位信號量、計數信號量等,WindowsMobile作業系統提供的事件對象等。由於實現了資料庫統一訪問接口,應用程式在客戶端和伺服器端的資料庫訪問方法是一致的,客戶程序不管是位於任何一個客戶端還是位於駐留資料庫的伺服器端,都使用一樣的接口函數訪問資料庫,這樣客戶程序就不用關心資料庫駐留的站點位置,即不必考慮數據的物理分布。同時由於使用相同的接口函數,這樣客戶程序可以在不同客戶端、伺服器端相互移植而不用修改接口。
本實施方式中採用的同步對象可以是二進位信號量,也可以是其他能夠實現同步操作的同步對象,包括事件、互鎖函數等。信號量是實現同步的基本方法,在幾乎所有的多任務作業系統裡面都做了信號量的實現,其它一些同步機制其實可以通過信號量來實現。如果把信號量的最大值和初始值均設置為1,那麼它就可實現互斥體,即保證對共享資源互斥訪問的保護。如果把信號量的初始值設置為0,等待別的任務來喚醒它,那麼它就可實現事件(Event)機制。事件(Event)機制來實現任務之間的協調工作,包括通知一個任務什麼時候去執行它的特定的任務和標識事件的發生等;可以指定Event的初始狀態為觸發的或未觸發的,還可以指定事件是否手動復位;也可以把命名事件用於進程之間的同步。還可以採用互鎖函數或消息隊列等來實現同步。這屬於現有技術,本發明對此不作任何限制。
例如在VxWorks作業系統中,可以採用二進位信號量、計數信號量等作為同步對象,初始化時將其初始值設置為0,置為可用時將其設置為1;在Windows Mobile作業系統系統中,可以採用事件對象作為同步對象,初始化時將其初始值設置為無信號(無事件發生)狀態,置為可用時將其設置為有信號(事件發生)狀態;在Windows Mobile或嵌入式linux系統中,可以採用信號量作為同步對象,初始化時將其初始值設置為無信號狀態,置為可用時將其設置為有信號狀態。
下面結合附圖,對本發明的技術方案做進一步的說明,本具體實施方式
中一種基於嵌入式資料庫的分布式訪問方法的交互圖如圖3所示,通常客戶端應用程式在訪問嵌入式資料庫時,要與位於伺服器端的一個和該客戶端應用程式相對應的單獨的應用程式進行通信,由這個伺服器端應用程式獲取數據再發送給客戶端應用程式,這種訪問方式是異步的,一個客戶端應用程式需要一個這樣位於伺服器的應用程式相配合。在本實施方式中,實現了進程DbServerProc所表示的資料庫接口服務模塊和進程DbAgentProc所表示的資料庫接口代理模塊,作為嵌入式資料庫的一部分,對系統中所有客戶應用程式提供同步訪問嵌入式資料庫的服務。進程DbServerProc所表示的資料庫接口服務模塊,進程DbAgentProc所表示的資料庫接口代理模塊、資料庫統一訪問接口函數DbsAccess,這兩個進程和函數是對前面所述資料庫接口服務模塊、資料庫接口代理模塊、資料庫統一訪問接口函數的舉例,是本發明所獨有的。
本發明傳遞DACB(接口訪問控制塊)的標識、接口輸入參數信息,通常的訪問方法僅需傳遞接口輸入參數信息,而本發明增加了一個傳遞DACB標識,當消息返回時用來標識是哪一個訪問控制塊對應的消息。DbServerProc進程和DbAgentProc進程分別實現名稱和參數都相同的資料庫統一訪問接口函數DbsAccess。
如圖3所示,一種基於嵌入式資料庫的分布式訪問方法的客戶端包括以下步驟(1)客戶端應用進程調用資料庫統一訪問接口函數DbsAccess訪問資料庫,DbsAccess函數向DbAgentProc進程發送資料庫訪問消息請求,然後獲取初始值為0的二進位信號量,應用程式被阻塞,等待該信號量被釋放。其中,DbsAccess僅是本具體實施方式
採用的函數名稱,在伺服器端它調用嵌入式資料庫提供的接口訪問資料庫,在客戶端它通過使用同步對象,向接口代理模塊發送同步消息。
DbAgentProc進程實現的是接口代理模塊的功能,能夠為運行該進程的客戶端上的所有應用程式提供資料庫接口訪問服務。它維護一組接口訪問控制塊,並負責與接口服務模塊進行消息交互。該進程可以通過設置接口訪問控制塊的數目來控制接口代理模塊允許的同時訪問資料庫的最大請求數目,當找不到使用標誌為0的DACB時,拒絕接口請求,這時接口會返回一個錯誤碼;可以使用DACB的順序號作為DACB標識。另外,也可以通過設置定時器來控制接口代理模塊對每一個請求回應的等待時間。本實施方式中,省略了對異常情況的處理,本實用新型對此沒有額外限制。
(2)DbAgentProc進程收到資料庫訪問請求消息後,使用一個接口訪問控制塊DACB記錄接口輸入輸出參數、對應的二進位信號量、應用進程標識等信息,然後向DbServerProc進程發送接口服務請求消息並傳遞DACB標識、接口輸入參數信息等。
DbServerProc進程實現的是接口服務模塊的功能,它的功能相對簡單些,就是收到接口代理模塊的消息請求後,首先進行參數校驗,然後訪問嵌入式資料庫,並把獲取的結果通過消息發送給接口代理模塊。本實施方式中,省略了參數校驗和異常處理,本實用新型對此沒有額外限制。
(3)DbAgentProc進程收到DbServerProc進程發來的接口服務請求回應消息,把收到的數據複製到DbsAccess函數的輸出緩衝區中,然後釋放對應的二進位信號量,應用進程解阻塞,繼續處理獲取的數據。
伺服器端處理步驟如下(1)伺服器端應用程式調用DbsAccess函數訪問資料庫,DbsAccess函數直接調用嵌入式資料庫提供的接口函數獲得數據,DbsAccess函數返回,應用程式繼續處理獲取的數據。
(2)如果DbServerProc進程收到DbAgentProc進程發送的接口服務請求消息,則調用統一訪問接口函數DbsAccess獲得數據,並向DbAgentProc進程發送接口服務請求回應消息並傳遞獲取的數據。
下面是一個具體的統一接口函數調用示例,可以運行在客戶端或伺服器端。示例中統一訪問接口DbsAccess的第一個參數是消息號,EV_GETTABLETUPLE消息表示獲取表記錄數據,它對應的輸入、輸出參數結構分別是TGetTableTupleReq、TGetTableTupleAck,在輸入參數中指定表名稱和記錄號,返回記錄數據保存在輸出參數結構中。
TGetTableTupleReq tGetTableTupleReq; /*輸入參數*/TGetTableTupleAck tGetTableTupleAck; /*輸出參數*/tGetTableTupleReq.byDbsTable=R_TYPE;/*表名稱*/tGetTableTupleReq.dwTupleNo=1; /*記錄序號*/DbsAccess(EV_GETTABLETUPLE,(void*)tGetTableTupleReq,sizeof(tGetTableTupleReq),(void*)tGetTableTupleAck,sizeof(tGetTableTupleAck));if(DBACCESS_SUCCESS==tGetTableTupleAck.wResult){
/*當接口訪問成功時對數據進行處理,數據保存在TGetTableTupleAck結構的abyTuple緩衝區中*/.../*數據處理流程省略*/}採用本發明所述方法,能夠實現簡單有效的嵌入式資料庫的分布式訪問,使得應用程式不僅可以對嵌入式資料庫進行同步訪問,還可以使用資料庫提供的統一的接口訪問數據,而不用考慮數據的物理分布,簡化了應用程式訪問資料庫的流程,同時也方便了應用程式的移植。
應當理解的是,對本領域普通技術人員來說,可以根據上述說明加以改進或變換,而所有這些改進和變換都應屬於本發明所附權利要求的保護範圍。
權利要求
1.一種基於嵌入式資料庫的分布式訪問方法,其包括步驟A1、嵌入式資料庫創建統一訪問接口函數、接口代理模塊、接口服務模塊,其中接口代理模塊設置用於記錄接口和應用程式標識信息的接口訪問控制塊;A2、伺服器端應用程式訪問所述資料庫時,通過所述統一訪問接口函數調用所述資料庫的接口函數獲得數據,所述統一訪問接口函數返回,所述伺服器端應用程式繼續處理獲取的數據;A3、客戶端應用程式訪問資料庫時,調用所述統一訪問接口函數,向所述接口代理模塊發送資料庫訪問請求,並且對一個初始值為不可用的同步對象進行同步操作,阻塞所述客戶端應用程式;A4、所述接口代理模塊收到所述資料庫訪問請求,通過所述接口訪問控制塊記錄接口和應用程式標識信息,向所述接口服務模塊發送所述接口服務請求,並傳遞所述接口訪問控制塊標識和資料庫訪問所需的參數;A5、所述接口服務模塊收到所述接口服務請求,則調用所述統一訪問接口函數獲得數據,並向所述接口代理模塊發送所述接口服務請求回應消息並傳遞獲取的數據;A6、所述接口代理模塊收到所述接口服務請求回應消息,把收到的數據複製到所述統一訪問接口函數的輸出緩衝區中,然後把對應的同步對象置為可用,解阻塞並繼續執行所述客戶端應用程式。
2.根據權利要求1所述的分布式訪問方法,其特徵在於,所述步驟A2之前,還包括步驟所述接口代理模塊初始化所述資料庫的同步對象。
3.根據權利要求1所述的分布式訪問方法,其特徵在於,所述不可用的同步對象包括初始值為0的信號量和無事件發生的事件對象。
4.根據權利要求1所述的分布式訪問方法,其特徵在於,所述同步操作包括對信號量進行提取操作,或對事件對象進行等待操作。
5.根據權利要求1所述的分布式訪問方法,其特徵在於,所述置為可用包括釋放信號量和對事件對象設置事件。
全文摘要
本發明提供了一種基於嵌入式資料庫的分布式訪問方法,包括步驟A1.創建統一訪問接口函數、接口代理模塊、接口服務模塊;A2.伺服器端通過統一訪問接口函數調用資料庫的接口函數獲得數據;A3.客戶端調用統一訪問接口函數,向接口代理模塊發送資料庫訪問請求,對一同步對象進行同步操作,阻塞客戶端應用程式;A4.接口代理模塊收到訪問請求,向接口服務模塊發送請求,傳遞參數;A5.接口服務模塊收到請求,則調用統一訪問接口函數獲得數據,向接口代理模塊發送回應消息並傳遞數據;A6.接口代理模塊收到回應消息,把收到的數據複製到統一訪問接口函數的輸出緩衝區中,把對應的同步對象置為可用,解阻塞並繼續執行客戶端應用程式。
文檔編號G06F9/46GK101071435SQ20071007500
公開日2007年11月14日 申請日期2007年6月8日 優先權日2007年6月8日
發明者胡海生 申請人:中興通訊股份有限公司