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