專利名稱:數(shù)據(jù)庫ram高速緩沖存儲器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫高速緩沖存儲器,并更具體地涉及多線程進(jìn)程中共享高速緩沖存儲器的使用。
背景技術(shù):
在需要訪問共享數(shù)據(jù)庫的多進(jìn)程應(yīng)用中,需要數(shù)據(jù)庫訪問的請求進(jìn)程向共享進(jìn)程的中央存儲器提出請求,所述中央存儲器例如是數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫服務(wù)器檢索所需數(shù)據(jù)并且將所需數(shù)據(jù)拷貝到進(jìn)程間通信(IPC)機(jī)制,請求進(jìn)程可以從其中訪問數(shù)據(jù)。然而,這需要數(shù)據(jù)庫服務(wù)器和請求進(jìn)程之間的同步,其會導(dǎo)致延遲和時間效率低。
一種解決辦法是使每個請求進(jìn)程緩存其自己的數(shù)據(jù)庫拷貝。雖然存儲器是密集的,但是這個方法對于小型數(shù)據(jù)庫來說是可行的。然而,對于大型數(shù)據(jù)庫,比如象網(wǎng)絡(luò)管理系統(tǒng)中典型的大約4GB的數(shù)據(jù)庫,這個方法顯然是不現(xiàn)實(shí)的。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的一個方面,提供了一種用于提供可訪問存儲在數(shù)據(jù)庫中的數(shù)據(jù)的多進(jìn)程的方法。將數(shù)據(jù)從數(shù)據(jù)庫拷貝到共享存儲器中的高速緩沖存儲器,該共享存儲器可由每個進(jìn)程訪問。維持?jǐn)?shù)據(jù)庫和高速緩沖存儲器之間的同步性。對每個進(jìn)程提供應(yīng)用程序接口(API),其包含了用于訪問高速緩沖存儲器內(nèi)數(shù)據(jù)的指令。
根據(jù)本發(fā)明的另一個方面,提供了一種用于存儲數(shù)據(jù)庫存儲表中的數(shù)據(jù)的高速緩沖存儲器。該高速緩沖存儲器具有這樣一種數(shù)據(jù)結(jié)構(gòu),即對于每個表,其包括存儲該表中數(shù)據(jù)的數(shù)據(jù)段的至少一個鏈接列表。對于每個表,該數(shù)據(jù)結(jié)構(gòu)包括存儲每個鏈接列表中第一數(shù)據(jù)段地址的控制段。該數(shù)據(jù)結(jié)構(gòu)包括存儲每個控制段地址的主段。
根據(jù)本發(fā)明的又一個方面,提供一種提供作業(yè)同步的方法。對于每個作業(yè)來說,將該作業(yè)分成任務(wù)。將任務(wù)集合成一個或多個任務(wù)組,每個任務(wù)組是用于同步目的的單個操作并且包括至少一個任務(wù)。在屬于特定線程服務(wù)器池的輔助線程(worker thread)上執(zhí)行每個任務(wù)。僅依據(jù)該作業(yè)的最后一個任務(wù)的完成而通知所有等待客戶機(jī)應(yīng)用該項(xiàng)作業(yè)的完成。
提供了用于執(zhí)行本發(fā)明方法的裝置。將該方法以存儲在計(jì)算機(jī)可讀介質(zhì)中的軟件指令的形式來存儲。
本發(fā)明的方法和裝置允許多進(jìn)程訪問具有最小存儲器使用的公用數(shù)據(jù)庫,同時也保持同步時間最少。通過共享單個高速緩沖存儲器,節(jié)省了存儲器并且確保了由不同進(jìn)程所訪問的數(shù)據(jù)的同步。通過利用數(shù)據(jù)庫和共享高速緩沖存儲器之間的單向通知機(jī)制確保了數(shù)據(jù)庫和共享高速緩沖存儲器之間的同步。由于API直接搜索共享高速緩沖存儲器內(nèi)的數(shù)據(jù),而不是通過請求數(shù)據(jù)庫服務(wù)器,因此服務(wù)器負(fù)載不會受到請求應(yīng)用數(shù)目的影響,并且數(shù)據(jù)讀取時間不會受進(jìn)程間通信的延遲或者額外的環(huán)境切換的影響。一種新的同步方案允許將多處理器用在建立和維護(hù)高速緩沖存儲器中,其極大地降低了啟動時間。
參考附圖,從以下優(yōu)選實(shí)施例的詳細(xì)說明中本發(fā)明的特征和優(yōu)點(diǎn)將變得更加明顯,其中圖1是根據(jù)本發(fā)明一實(shí)施例的共享RAM高速緩沖存儲器系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明一實(shí)施例在圖1的共享RAM高速緩沖存儲器的維護(hù)期間的消息傳遞的框圖;圖3是根據(jù)本發(fā)明一實(shí)施例的方法流程圖,圖2的輔助線程通過該方法來維護(hù)共享高速緩沖存儲器;
圖4是根據(jù)本發(fā)明一實(shí)施例的用作同步請求對象的框圖;圖5是在創(chuàng)建通知組期間的消息傳遞的框圖;圖6是在創(chuàng)建請求期間的消息傳遞的框圖;以及圖7是當(dāng)完成請求時的消息傳遞的框圖。
應(yīng)當(dāng)注意的是,在附圖中,相似的特征帶有類似的標(biāo)記。
具體實(shí)施例方式
參考圖1,顯示了根據(jù)本發(fā)明一實(shí)施例的實(shí)現(xiàn)了共享RAM高速緩沖存儲器的示例系統(tǒng)。數(shù)據(jù)庫10存儲對于一個或多個請求進(jìn)程12有意義的數(shù)據(jù)??刂七M(jìn)程14具有對數(shù)據(jù)庫10的讀寫訪問??刂七M(jìn)程14也具有對存儲在RAM中的共享高速緩沖存儲器16的讀寫訪問。每個請求進(jìn)程12具有API 18,其具有對共享RAM高速緩沖存儲器16的只讀訪問。大致地,在操作中,共享高速緩沖存儲器16存儲了在數(shù)據(jù)庫10中所存儲的數(shù)據(jù)拷貝,以便由每個請求進(jìn)程12經(jīng)由它們各自的API 18來直接訪問。由控制進(jìn)程14來執(zhí)行共享高速緩沖存儲器16的創(chuàng)建以及共享高速緩沖存儲器16的維護(hù)(共享高速緩沖存儲器和數(shù)據(jù)庫10之間的同步)。
當(dāng)首先打開或創(chuàng)建控制進(jìn)程14時,控制進(jìn)程14確定共享高速緩沖存儲器16是否存在。如果共享高速緩沖存儲器16不存在,那么該控制進(jìn)程14創(chuàng)建一個或多個輔助線程,其將數(shù)據(jù)庫的內(nèi)容拷貝到共享高速緩沖存儲器16。輔助線程優(yōu)選地使用如下所述的同步方案,以便加速共享高速緩沖存儲器16的建立時間。
以允許輔助線程并行地建立共享高速緩沖存儲器16的方式來構(gòu)造共享高速緩沖存儲器16。控制進(jìn)程14創(chuàng)建共享高速緩沖存儲器16內(nèi)的主段。主段包含若干項(xiàng)目。每個主段項(xiàng)存儲共享高速緩沖存儲器16內(nèi)的不同控制段的位置,每個控制段對應(yīng)于數(shù)據(jù)庫10內(nèi)的唯一的表。每個控制段包含至少一個項(xiàng)目。每個控制段項(xiàng)存儲不同的第一數(shù)據(jù)段的位置,每個第一數(shù)據(jù)段對應(yīng)于唯一的輔助線程。當(dāng)負(fù)責(zé)數(shù)據(jù)庫10中特定表內(nèi)特定數(shù)據(jù)的輔助線程開始從該表向共享高速緩沖存儲器16拷貝數(shù)據(jù)時,該輔助線程因此能將第一數(shù)據(jù)段定位于要將數(shù)據(jù)拷貝到的那個位置。任何第一數(shù)據(jù)段可能會將第二數(shù)據(jù)段的地址作為它的最后一項(xiàng),一旦第一數(shù)據(jù)段已滿,則相應(yīng)的輔助線程會將數(shù)據(jù)拷貝到該第二數(shù)據(jù)段??芍貜?fù)這樣的過程直到數(shù)據(jù)段在它的最后一項(xiàng)中存儲了無效地址。事實(shí)上,每個控制段會列出要由相應(yīng)輔助線程用來自對應(yīng)于控制段的表的數(shù)據(jù)所填寫的數(shù)據(jù)段鏈接列表的初始地址。
參考圖2,根據(jù)本發(fā)明的一實(shí)施例顯示了在數(shù)據(jù)庫10和共享高速緩沖存儲器16的同步期間的消息傳遞。數(shù)據(jù)庫服務(wù)器包括用于初始化IPC以便與控制進(jìn)程14通信的功能。數(shù)據(jù)庫10內(nèi)的每個表包括觸發(fā)單元。當(dāng)改變數(shù)據(jù)庫10內(nèi)的表的內(nèi)容時,通過增加記錄、刪除記錄或者更新記錄,激活該觸發(fā)單元并且調(diào)用數(shù)據(jù)庫10的數(shù)據(jù)庫服務(wù)器內(nèi)所存儲的過程。該存儲的過程創(chuàng)建消息30,并且將消息30附加于消息的第一隊(duì)列32。消息30包括表標(biāo)識符(ID)、行ID以及操作。該消息在長度上優(yōu)選地為三個整數(shù),每一整數(shù)用于三個域中的每一個。操作是表示“添加”、“刪除”以及“更新”的其中之一的標(biāo)志。
控制進(jìn)程14包括控制單元34以及優(yōu)選地包括控制單元34的至少一個冗余單元36。如果控制單元34故障,則該冗余單元36取代如下所述的控制單元的操作??刂茊卧?4監(jiān)聽由數(shù)據(jù)庫服務(wù)器創(chuàng)建的IPC中的以第一隊(duì)列32中的消息的形式進(jìn)行的數(shù)據(jù)庫表的更新。對于每個消息,控制單元34確定表ID和行ID。如果操作是“刪除”或者“更新”,則控制單元34將行狀態(tài)標(biāo)志38設(shè)置為共享高速緩沖存儲器16內(nèi)的適當(dāng)?shù)谋砗托?,從而鎖行以及防止任何請求進(jìn)程12訪問剛被更新或者刪除的任何記錄??刂茊卧?4接著將消息發(fā)送到控制進(jìn)程14內(nèi)的消息的第二隊(duì)列40,并且從第一隊(duì)列32中刪除該消息。
控制進(jìn)程14也包括至少一個輔助線程42。這些輔助線程構(gòu)成負(fù)責(zé)共享高速緩沖存儲器16實(shí)際更新的多線程進(jìn)程。采用如下所述的同步方案,每個輔助線程42從第二隊(duì)列40讀消息。參考圖3,顯示了根據(jù)本發(fā)明一實(shí)施例的方法流程圖,輔助線程42通過該方法來更新共享高速緩沖存儲器16。輔助線程42從第二隊(duì)列40讀消息,接著在步驟50輔助線程確定該消息的操作。如果在步驟52輔助線程確定了操作是“刪除”,那么在步驟54輔助線程查詢數(shù)據(jù)庫10以驗(yàn)證由該消息內(nèi)的行ID和表ID所識別的那個行實(shí)際上已從數(shù)據(jù)庫中刪除了。如果驗(yàn)證了刪除,那么在步驟56輔助線程從共享高速緩沖存儲器16中刪除相應(yīng)行。如果在步驟54沒有驗(yàn)證刪除,那么在步驟58輔助線程丟棄該消息并且創(chuàng)建錯誤報告,以及將行狀態(tài)標(biāo)志改變成表示將要核查該行的值。該行仍然可由請求進(jìn)程訪問,但是要再度檢查該行以便由控制進(jìn)程的核查部分(圖2中未顯示)進(jìn)行可能的刪除。
如果在步驟52輔助線程確定了該操作不是“刪除”,那么在步驟60輔助線程確定操作是否是“添加”。如果操作是“添加”,那么在步驟62輔助線程查詢數(shù)據(jù)庫10以驗(yàn)證由消息內(nèi)的行ID和表ID所識別的行實(shí)際上已經(jīng)添加到數(shù)據(jù)庫中。如果驗(yàn)證了添加,那么在步驟64輔助線程將數(shù)據(jù)庫10內(nèi)該行的內(nèi)容拷貝到共享高速緩沖存儲器16。如果在步驟62沒有驗(yàn)證添加,那么在步驟65輔助線程將該行內(nèi)容拷貝到共享高速緩沖存儲器16,但是在步驟66丟棄該消息并且創(chuàng)建錯誤報告,并且如步驟58一樣將該行標(biāo)記為將被核查。
如果在步驟60輔助線程確定了該操作不是“添加”,那么在步驟70輔助線程確定操作是否是“更新”。如果操作是“更新”,那么在步驟72輔助線程查詢數(shù)據(jù)庫10以驗(yàn)證由消息內(nèi)的行ID和表ID所識別的行實(shí)際上已經(jīng)被更新。如果驗(yàn)證了更新,那么在步驟74輔助線程將數(shù)據(jù)庫10內(nèi)該行的內(nèi)容拷貝到共享高速緩沖存儲器16以便更新共享高速緩沖存儲器16。在步驟75,輔助線程復(fù)位行狀態(tài)標(biāo)志以消除已經(jīng)由控制單元34設(shè)置的行鎖。如果在步驟72沒有驗(yàn)證更新,那么在步驟76輔助線程丟棄該消息并且創(chuàng)建錯誤報告,以及如步驟58一樣將該行標(biāo)記為將被核查。
如果在步驟70輔助線程確定操作不是“更新”,那么操作是一個未知類型。在步驟80輔助線程產(chǎn)生錯誤報告,并且丟棄該消息。
共享高速緩沖存儲器16不等效于數(shù)據(jù)庫服務(wù)器。相反地,每個請求進(jìn)程12內(nèi)的API 18直接訪問共享高速緩沖存儲器16內(nèi)的數(shù)據(jù)。每個API 18經(jīng)由主段來訪問共享高速緩沖存儲器16的共享存儲器段中的數(shù)據(jù)而不是直接與服務(wù)器進(jìn)程交互。如果將由API 18訪問的那個行的行狀態(tài)標(biāo)志標(biāo)記為更新未決或者刪除未決,則API 18不檢索對于該行的數(shù)據(jù)。從而通過使用行狀態(tài)標(biāo)志實(shí)現(xiàn)了同步,所述的行狀態(tài)標(biāo)志是在更新或刪除行時由控制單元34(或者冗余單元36)所設(shè)置的,以及是在一旦驗(yàn)證了更新或刪除后由輔助線程42所設(shè)置的。
為了通過輔助線程加速共享高速緩沖存儲器的創(chuàng)建和維護(hù),采用了參考圖4到圖7所描述的同步方案。參考圖4,顯示了根據(jù)本發(fā)明一實(shí)施例的用作同步請求的對象的框圖;應(yīng)用線程90與線程服務(wù)器管理單元92進(jìn)行通信。應(yīng)用線程90向線程服務(wù)器管理單元92發(fā)送通知組和任務(wù)請求的請求。在建立和維護(hù)共享高速緩沖存儲器16的情況下,應(yīng)用線程將是控制進(jìn)程14內(nèi)的應(yīng)用,比如控制單元34。線程服務(wù)器管理單元92負(fù)責(zé)創(chuàng)建和釋放其可能集合成一個或多個輔助線程組96的一個或多個輔助線程94。線程服務(wù)器管理單元92也用作輔助服務(wù)器主命令回路。即使圖4僅顯示了一個應(yīng)用線程90,但是應(yīng)當(dāng)明白,通常將存在不止一個請求了任務(wù)請求以及通知組的應(yīng)用線程90。
線程服務(wù)器管理單元92向請求管理單元100發(fā)送對任務(wù)請求的請求。請求管理單元100創(chuàng)建任務(wù)請求102,其被發(fā)送給內(nèi)部請求管理單元隊(duì)列104上的輔助線程94,每個輔助線程組96有一個請求管理單元隊(duì)列104。輔助線程94持續(xù)地試圖從相應(yīng)的請求管理單元隊(duì)列中讀取任務(wù)請求102用于執(zhí)行,通過使用計(jì)數(shù)信號量來限制對每個請求管理單元隊(duì)列104的訪問以便在請求管理單元隊(duì)列為空時阻止訪問。
線程服務(wù)器管理單元92也向通知管理單元110發(fā)送對通知組的請求(以下更詳細(xì)地描述)。通知管理單元110負(fù)責(zé)任務(wù)同步,以及創(chuàng)建和刪除通知組。通知管理單元110存儲了它所創(chuàng)建的所有打開的和/或正在執(zhí)行的通知組對象114的全局列表112。通知管理單元110也將操作118的一個或多個線程指定列表116存儲于通知組對象114。每個對特定線程的列表116列出了對于特定應(yīng)用線程的通知組對象的操作118。
參考圖5,顯示了根據(jù)本發(fā)明一實(shí)施例的當(dāng)請求通知組時的消息傳遞的框圖。應(yīng)用線程90向線程服務(wù)器管理單元92發(fā)送對通知組的請求。線程服務(wù)器管理單元92向通知管理單元110發(fā)送該請求。響應(yīng)于該請求,通知管理單元110創(chuàng)建通知組對象(NGO)114。NGO 114允許在完成了應(yīng)用線程90已經(jīng)請求(在創(chuàng)建NGO和設(shè)置NGO為無效之間)的所有任務(wù)時通知到應(yīng)用線程90。NGO是面向?qū)ο缶幊痰膶ο?,并且包括作為組狀態(tài)值的請求計(jì)數(shù)、已完成請求計(jì)數(shù)、阻塞狀態(tài)以及用作阻塞應(yīng)用線程的條件變量。
如果通知組仍在接受請求那么組狀態(tài)的值是“活動”,并且直到組狀態(tài)設(shè)置為“無效”該組才能完成。當(dāng)應(yīng)用線程90經(jīng)由NGO操作而關(guān)閉該組時將組狀態(tài)設(shè)置為“無效”。當(dāng)首次創(chuàng)建NGO 114時,將組狀態(tài)設(shè)置為“活動”。
請求計(jì)數(shù)是從創(chuàng)建了NGO以來已經(jīng)添加到組中的請求的數(shù)目的計(jì)數(shù)。請求計(jì)數(shù)的初值是“0”。已完成請求計(jì)數(shù)是已經(jīng)添加到組中并且已經(jīng)完成了的請求的數(shù)目的計(jì)數(shù)。已完成請求計(jì)數(shù)的初值是“0”。
如果通知組當(dāng)前不保證被阻塞,則阻塞狀態(tài)被用于回避條件等待。只有當(dāng)將組狀態(tài)設(shè)置為“無效”,并且或者不向該組做出請求或者已經(jīng)完成了所有的請求時,才可出現(xiàn)這樣的阻塞狀態(tài)。阻塞狀態(tài)的初值是“阻塞”。阻塞條件變量用在條件等待調(diào)用中。阻塞條件變量會阻塞對變量執(zhí)行條件等待的所有線程。此阻塞將繼續(xù)直到對變量執(zhí)行了信號或廣播。阻塞狀態(tài)的“阻塞”表示該組還沒有完成,并且阻塞于這個組的任何線程都將不會回避條件變量阻塞。一旦線程達(dá)到條件變量,就阻塞它,直到它從另一個線程中接收到繼續(xù)信號。阻塞狀態(tài)也起到保衛(wèi)作用,即使通過信號釋放了線程,其也不允許線程繼續(xù),直到阻塞狀態(tài)是“解除阻塞”為止。這防止了由于疏忽所致的條件變量的釋放。然而,一旦關(guān)閉了組狀態(tài)并且已完成請求的數(shù)目等于已發(fā)送請求的數(shù)目(請求計(jì)數(shù)等于已完成請求計(jì)數(shù)),應(yīng)該就不可能達(dá)到阻塞狀態(tài)了。在這些條件下,阻塞狀態(tài)防止線程阻塞于條件變量并再也不能被激活。
更具體地,應(yīng)用線程進(jìn)行調(diào)用以等待直到特定的NGO完成。如果NGO尚未完成那么NGO中的內(nèi)部例程就調(diào)用函數(shù)pthread_cond_wait(),該函數(shù)在存在于NGO內(nèi)的條件變量的地址中傳送。這有效地阻塞了應(yīng)用線程的執(zhí)行直到另一線程調(diào)用了函數(shù)pthread_cond_signal(),其釋放了阻塞于參數(shù)條件變量的單個應(yīng)用線程,或者直到另一線程調(diào)用了函數(shù)pthread_condition_broadcast(),其釋放了阻塞于參數(shù)條件變量的所有應(yīng)用線程。pthread_cond_signal()和pthread_cond_broadcast()都是原子操作并且不會影響使用同樣的參數(shù)變量對pthread_cond_wait()的隨后調(diào)用的功能。
由于線程不應(yīng)被阻塞于已經(jīng)完成的組,因此在NGO已經(jīng)完成但是還沒有被釋放的時期內(nèi),阻塞標(biāo)志變量被用來回避對pthread_cond_wait()的調(diào)用。一旦已完成請求的數(shù)目等于已做出的請求的數(shù)目并且NGO狀態(tài)是“無效”,則將阻塞標(biāo)志設(shè)置為“解除阻塞”并且使用NGO的條件變量進(jìn)行對pthread_cond_broadcast()的調(diào)用以釋放阻塞于該NGO的任何線程。
一旦通知管理單元110創(chuàng)建了NGO 114,通知管理單元就將NGO 114插入到全局列表112中。通知管理單元也將操作拷貝到NGO 114并且將該操作放在對應(yīng)于應(yīng)用線程90的對特定線程的列表116中。那么,該操作項(xiàng)僅能通過對應(yīng)用線程90的調(diào)用來移除,以關(guān)閉NGO 114。沒有別的線程能夠添加請求到該NGO或者關(guān)閉該NGO。
參考圖6,顯示了根據(jù)本發(fā)明一實(shí)施例的當(dāng)請求任務(wù)時的消息傳遞的框圖。應(yīng)用線程90向線程服務(wù)器管理單元92發(fā)送對任務(wù)的請求。該對任務(wù)的請求包括客戶機(jī)定義過程的地址和客戶機(jī)定義過程所需的任何參數(shù)的地址。線程服務(wù)器管理單元92向請求管理單元100發(fā)送該請求。響應(yīng)于該請求,請求管理單元110創(chuàng)建新的請求對象102。在創(chuàng)建之后,請求對象102調(diào)用通知管理單元110,其對由對應(yīng)于應(yīng)用線程90的對特定線程的列表116內(nèi)的操作118所識別的打開的NGO 114的請求計(jì)數(shù)進(jìn)行遞增。通知管理單元110向新創(chuàng)建的請求對象102返回對應(yīng)用線程90的對特定線程的列表116中打開的NGO進(jìn)行的操作的列表的拷貝。
除了對打開的NGO的操作的列表之外,請求對象102也包括將由輔助線程所執(zhí)行的客戶機(jī)定義例程的地址,以及該例程所使用的參數(shù)的地址。接著,請求管理單元100將請求對象102插入到對應(yīng)于與應(yīng)用線程相關(guān)聯(lián)的輔助線程組的請求管理單元隊(duì)列104中,并使請求管理單元隊(duì)列的信號量遞增。
參考圖7,顯示了根據(jù)本發(fā)明一實(shí)施例的當(dāng)任務(wù)完成時的消息傳遞的框圖。當(dāng)任務(wù)完成時,請求管理單元100刪除包含任務(wù)(或更確切地說,包含將要執(zhí)行的例程地址)終止的請求對象102。請求對象102的釋放單元函數(shù)向通知管理單元110通知已經(jīng)完成了該任務(wù)請求,并且向通知管理單元提供打開的NGO的操作的列表。接著,通知管理單元110使每個NGO中的已完成請求計(jì)數(shù)遞增,其中該NGO具有由請求對象102所提供的列表中的操作。由于包含于請求對象102中的操作的列表是在創(chuàng)建請求對象時就存在的操作的列表的拷貝,因此創(chuàng)建請求對象之后創(chuàng)建的任何NGO將不會使它們的已完成請求計(jì)數(shù)遞增。
如果在遞增了NGO的已完成請求計(jì)數(shù)之后,遞增了的請求計(jì)數(shù)等于請求計(jì)數(shù),那么可由通知管理單元刪除該NGO。如果沒有線程被阻塞于該NGO,該NGO具有“無效”狀態(tài),并且已完成請求數(shù)目等于請求數(shù)目,則刪除該NGO。一旦滿足這些條件,將由導(dǎo)致這些條件被滿足的那個線程來刪除該NGO。
在優(yōu)選實(shí)施例中,控制進(jìn)程14、至少一個API 18以及數(shù)據(jù)庫的觸發(fā)單元函數(shù)都是處理器內(nèi)的軟件形式出現(xiàn)的,但更通用地,它們也可能是以軟件或硬件的任意組合的形式出現(xiàn),所述硬件包括集成電路內(nèi)的硬件。處理器不必是單個設(shè)備,而指令可以位于不止一個設(shè)備中。
已經(jīng)使用特定的任務(wù)同步方案描述了本發(fā)明。本發(fā)明可使用其他同步方案,同時仍然實(shí)現(xiàn)降低的存儲器使用和更快的讀取時間的好處,但是建立高速緩沖存儲器將會更慢。
已經(jīng)將本發(fā)明的同步方案描述成了在建立高速緩沖存儲器期間控制進(jìn)程內(nèi)所使用的。在高速緩沖存儲器的維護(hù)期間也可由輔助線程乃至由請求進(jìn)程內(nèi)的多線程進(jìn)程來使用該同步方案。事實(shí)上,任何多線程進(jìn)程都可受益于由此處描述的同步方案所提供的更快的執(zhí)行時間。
所提供的實(shí)施例僅是示范性的,而本領(lǐng)域技術(shù)人員將會理解,在不脫離本發(fā)明精神的情況下可實(shí)現(xiàn)如上所述實(shí)施例的變化。邏輯上等效于或類似于如上參考圖3所描述方法的方法也可用于實(shí)現(xiàn)本發(fā)明的方法。本發(fā)明的范圍僅由所附權(quán)利要求來定義。
權(quán)利要求
1.一種為多個進(jìn)程提供對存儲在數(shù)據(jù)庫中的數(shù)據(jù)的訪問的方法,包括將數(shù)據(jù)從數(shù)據(jù)庫拷貝到共享存儲器中的高速緩沖存儲器,該共享存儲器可由每個進(jìn)程訪問;維持?jǐn)?shù)據(jù)庫和高速緩沖存儲器之間的同步性;以及為每個進(jìn)程提供應(yīng)用程序接口(API),其包含了用于訪問高速緩沖存儲器內(nèi)數(shù)據(jù)的指令。
2.權(quán)利要求1的方法,其中所述的將數(shù)據(jù)從數(shù)據(jù)庫拷貝到高速緩沖存儲器的步驟包括構(gòu)造高速緩沖存儲器以便包括對于數(shù)據(jù)庫中的每個表,存儲該表中的數(shù)據(jù)的數(shù)據(jù)段的至少一個鏈接列表;對于數(shù)據(jù)庫中的每個表,存儲在每個鏈接列表中的第一數(shù)據(jù)段的地址的控制段;以及存儲每個控制段的地址的主段;以及將數(shù)據(jù)從每個表中拷貝到高速緩沖存儲器中各自的至少一個鏈接列表中。
3.權(quán)利要求1的方法,其中所述的維持?jǐn)?shù)據(jù)庫和高速緩沖存儲器之間的同步性的步驟包括如果刪除或修改了數(shù)據(jù)庫中的相應(yīng)行和表則對高速緩沖存儲器中的一部分?jǐn)?shù)據(jù)進(jìn)行行鎖定,直到驗(yàn)證了該數(shù)據(jù)庫中的該刪除或修改為止,從而在使數(shù)據(jù)庫中的刪除或修改與高速緩沖存儲器進(jìn)行同步的同時防止進(jìn)程訪問該部分?jǐn)?shù)據(jù)。
4.權(quán)利要求1的方法,其中所述的維持?jǐn)?shù)據(jù)庫和高速緩沖存儲器之間的同步性的步驟包括響應(yīng)于數(shù)據(jù)庫的每個改變而產(chǎn)生消息,該消息用于識別被改變的表和行并且識別改變的類型;對于改變類型是刪除或修改行的每個消息,對與該行對應(yīng)的高速緩沖存儲器中的一部分?jǐn)?shù)據(jù)進(jìn)行行鎖定,從而防止進(jìn)程訪問該部分?jǐn)?shù)據(jù);以及對于每個消息,根據(jù)由該消息指定的改變類型而修改高速緩沖存儲器。
5.權(quán)利要求4的方法,其中所述的根據(jù)改變的類型而修改高速緩沖存儲器的步驟包括創(chuàng)建至少一個輔助線程,對每個輔助線程分配修改一部分高速緩沖存儲器的任務(wù);創(chuàng)建通知組對象;在每個輔助線程完成其指定任務(wù)之后,釋放該通知組對象;以及在釋放該通知組對象之后,移除由該消息所識別的該部分高速緩沖存儲器的任何行鎖定。
6.一種用于存儲來自存儲多個表的數(shù)據(jù)庫中的數(shù)據(jù)的高速緩沖存儲器,所述高速緩沖存儲器具有這樣一種數(shù)據(jù)結(jié)構(gòu),包括對于每個表,存儲該表中的數(shù)據(jù)的數(shù)據(jù)段的至少一個鏈接列表;對于每個表,存儲在每個鏈接列表中的第一數(shù)據(jù)段的地址的控制段;以及存儲每個控制段的地址的主段。
7.一種用于提供作業(yè)同步的方法,對于每個作業(yè),所述方法包括將該作業(yè)分成多個任務(wù);將所述任務(wù)分成至少一個任務(wù)組,每個任務(wù)組是用于同步目的的單個操作并且包括至少一個任務(wù);在屬于特定線程服務(wù)器池的輔助線程上執(zhí)行每個任務(wù);以及僅在完成該作業(yè)的最后一個任務(wù)之后通知所有等待的客戶機(jī)應(yīng)用該作業(yè)已完成。
全文摘要
提供了用于提供可由多進(jìn)程訪問的數(shù)據(jù)庫的共享RAM高速緩沖存儲器的系統(tǒng)和方法。通過共享單個高速緩沖存儲器而不是數(shù)據(jù)庫的本地拷貝,節(jié)省了存儲器并且確保了由不同進(jìn)程所訪問的數(shù)據(jù)的同步。通過使用數(shù)據(jù)庫和共享高速緩沖存儲器之間的單向通知機(jī)制確保了數(shù)據(jù)庫和共享高速緩沖存儲器間的同步。進(jìn)程內(nèi)的客戶機(jī)API直接搜索共享高速緩沖存儲器內(nèi)的數(shù)據(jù),而不是通過請求數(shù)據(jù)庫服務(wù)器。因此服務(wù)器負(fù)載不會受到請求應(yīng)用的數(shù)目的影響,并且數(shù)據(jù)讀取時間不會受到進(jìn)程間通信的延遲或受到額外的環(huán)境切換的影響。新的同步方案允許多進(jìn)程被用于建立和維護(hù)高速緩沖存儲器,其極大地降低了啟動時間。
文檔編號G06F17/30GK1763719SQ20051012832
公開日2006年4月26日 申請日期2005年10月14日 優(yōu)先權(quán)日2004年10月14日
發(fā)明者R·M·皮佩, M·C·皮隆, F·M·蘭德里 申請人:阿爾卡特公司