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