專利名稱:數(shù)據(jù)變更通告的制作方法
數(shù)據(jù)變更通告背景在許多計算機系統(tǒng)中,用于計算機應用程序并通過其存儲和檢索的信息由一 個或多個中央存儲系統(tǒng)處理。例如,在個人計算機中普遍使用的一種存儲系統(tǒng)是基 于文件文件夾和目錄的系統(tǒng),通常被稱為"文件系統(tǒng)"。這些文件系統(tǒng)將多個文件 組織入各層次,以創(chuàng)建存儲介質(zhì)的物理組織的抽象概念,用于存儲各文件。 一般而 言,這一成為層次的組織在操作系統(tǒng)級發(fā)生。存儲的文件通常包括具體表現(xiàn)為由文 件系統(tǒng)維持的指定文件的該文件層次本身("目錄")。該目錄又維護與該目錄內(nèi) 所有其他文件相對應的條目列表以及這些文件在該層次內(nèi)的節(jié)點位置(在此被稱為 文件夾)。用于中央存儲的文件系統(tǒng)的使用具有各種限制。這些限制可以通過使用作為 中央存儲系統(tǒng)基礎的關(guān)系數(shù)據(jù)庫技術(shù)來克服。在使用存儲在存儲系統(tǒng)中數(shù)據(jù)的應用程序中,該應用程序的某些活動是以存 儲在存儲系統(tǒng)內(nèi)數(shù)據(jù)的變更為基礎的。基于該存儲內(nèi)各獨立對象或?qū)ο笕旱淖兏?應用程序可能希望執(zhí)行相關(guān)的商業(yè)邏輯或顯示邏輯。例如,電子郵件程序可能想要 知道新電子郵件消息何時到達。在某些系統(tǒng)中,電子郵件消息到達并被存儲在存儲 系統(tǒng)上。當新消息到達時,電子郵件程序隨后就能使用新電子郵件消息己到達的事 實或者使用該電子郵件消息的上下文來執(zhí)行任何內(nèi)部處理。例如,某些電子郵件程 序包含用于處理消息的規(guī)則。這些規(guī)則的應用程序在某些情況下由新消息的到達來 觸發(fā)。此外還存在基于存儲在存儲系統(tǒng)內(nèi)變更的用戶界面的變更。例如, 一有新消 息到達,就向用戶程序呈現(xiàn)指示新消息已到達的通告信號??梢运⑿孪⒘斜硪园?括該新消息。應用程序感興趣的這類數(shù)據(jù)變更包括對象創(chuàng)建、對象刪除、以及包括移動對 象或?qū)ο蟀踩宰兏膶ο蟾?。基礎關(guān)系數(shù)據(jù)庫可以不提供能被用來提供這些更 新的觸發(fā)。某些組件要求對存儲在關(guān)系數(shù)據(jù)庫中各對象變更的持續(xù)監(jiān)控。例如,反病毒 程序要求某些類型的對象的變更(包括這些對象的添加)觸發(fā)病毒掃描。類似地,對各實體的全文本索引在持續(xù)性基礎上完成。如果應用程序?qū)A關(guān)系數(shù)據(jù)庫的連 接中斷,通告就會丟失,并且連接一恢復,就可能要求多得多的工作來恢復各操作。 對變更的監(jiān)控(和響應)的無縫恢復將能夠節(jié)省連接恢復時的處理和時間,該變更 包括在應用程序?qū)﹃P(guān)系數(shù)據(jù)庫的連接中斷期間出現(xiàn)的變更。鑒于前述,需要一種能夠在基于數(shù)據(jù)庫的存儲系統(tǒng)中使用并提供良好性能和 可量測性的變更通告程序。本發(fā)明滿足這一需要。概述為了提供變更通告,應用程序向變更通告系統(tǒng)注冊并允許應用程序經(jīng)由預定(subscription)獲取關(guān)于指定變更的信息。變更通告系統(tǒng)監(jiān)控基礎關(guān)系數(shù)據(jù)庫內(nèi)數(shù) 據(jù)的變更并在隊列中存儲與接收到的請求相關(guān)的變更信息。應用程序能夠從隊列中 訪問相關(guān)變更以確定響應于該應用程序的請求出現(xiàn)了什么變更。根據(jù)一個實施例,創(chuàng)建了兩類監(jiān)視程序(watcher)。如果應用程序請求一非 持久監(jiān)視程序,則當該應用程序丟失或終止與變更通告系統(tǒng)的連接時,隊列內(nèi)有關(guān) 該應用程序的剩余信息就被移除并且不再會有對響應于該應用程序請求的變更的 跟蹤出現(xiàn)。然而,如果請求持久監(jiān)視程序,則即使應用程序終止或丟失連接,隊列 內(nèi)的剩余信息仍被保留,并且與來自該應用程序的請求相關(guān)的任何附加變更都被存 儲在該隊列中。當應用程序重新連接時,斷開連接期間的變更信息在隊列中可用, 像在重新連接期間和之后的變更一樣。以此方式,應用程序可以在各種對象范圍(在對象的獨立項目級別、文件 夾內(nèi)容級別或者完整的層次級別)處、并且針對各種事件類型(創(chuàng)建、更新、 刪除操作)、對象類型(文檔、消息等)和對象種類(項目、擴展、鏈接等) 來訪問事件通告預定選項的豐富集合。此外,事件通告可以在會話終止(自愿或 者非自愿)期間被保留,從而可能實現(xiàn)監(jiān)控的無縫恢復。通過下面對本發(fā)明的以及附圖的詳細說明,將會明了本發(fā)明的其他特征和優(yōu)點。
當結(jié)合所附的附圖進行閱讀時,可以更好地理解上面的摘要以及下面對本發(fā) 明的詳細說明。出于說明本發(fā)明的目的,在附圖中示出了本發(fā)明的各個方面的示例 性實施例;然而,本發(fā)明不限于所公開的具體方法和手段。附圖中圖1是表示了在其中可以結(jié)合本發(fā)明各方面的計算機系統(tǒng)的框圖; 圖2是示出了分成三個組件群的計算機系統(tǒng)的框圖;硬件組件、硬件/軟件接口系統(tǒng)組件以及應用程序組件;圖3是根據(jù)本發(fā)明一個實施例的變更通告系統(tǒng)采取的步驟的流程圖;圖4是根據(jù)本發(fā)明一個實施例的變更通告系統(tǒng)和特定數(shù)據(jù)流的框圖;以及圖5是根據(jù)一個實施例由變更通告系統(tǒng)400跟蹤客戶410的變更所采取的步驟的流程圖。詳細說明 示例性計算環(huán)境本發(fā)明的許多實施例可在計算機上執(zhí)行。圖1及以下討論旨在提供對適合于 在其中實現(xiàn)本發(fā)明的計算環(huán)境的簡要概括描述。雖然不是必需,本發(fā)明的諸方面能以諸如由客戶工作站或服務器的計算機上執(zhí)行的程序模塊的計算機可執(zhí)行指令的 一般上下文中描述。 一般而言,程序模塊包括例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu) 等,它們執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。此外,本發(fā)明可用其它計算機系 統(tǒng)配置實現(xiàn),包括手持設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)或可編程消費者 電子設備、網(wǎng)絡PC、小型機、大型機等。本發(fā)明還能在分布式計算環(huán)境中實現(xiàn), 其中任務由通過通信網(wǎng)絡鏈接的遠程處理設備完成。在分布式計算環(huán)境中,程序模 塊可被置于本地或遠程的存儲器設備中。如圖1所示,示例性通用計算系統(tǒng)包括傳統(tǒng)的個人計算機20等,它包括處理 單元21、系統(tǒng)存儲器22和將包括系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元21 的系統(tǒng)總線23。系統(tǒng)總線23可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲 器總線或存儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總 線。系統(tǒng)存儲器包括只讀存儲器(ROM) 24和隨機存取存儲器(RAM) 25?;?輸入/輸出系統(tǒng)26 (BIOS)包含有助于諸如啟動時在個人計算機20中元件之間傳 遞信息的基本例程,它存儲在ROM 24中。個人計算機20也可包括用于對硬盤(未 示出)進行讀寫的硬盤驅(qū)動器27、用于對可移動磁盤28進行讀寫的磁盤驅(qū)動器29 以及用于對可移動光盤31,如CD-ROM或其它光介質(zhì)進行讀寫的光盤驅(qū)動器30。 硬盤驅(qū)動器27、磁盤驅(qū)動器28以及光盤驅(qū)動器30分別通過硬盤驅(qū)動器接口 23、 磁盤驅(qū)動器接口 32和光盤驅(qū)動器接口 33連接至系統(tǒng)總線23。驅(qū)動器及其相關(guān)的 計算機可讀介質(zhì)為個人計算機20提供了計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性存儲。雖然這里描述的示例性環(huán)境采用硬盤、可移動磁盤29和可移動光盤31,本領域技術(shù)人員理解,在示例性操作環(huán)境中也能使用可存儲能由計算機訪問的數(shù)據(jù)的其它類型計算機可讀介質(zhì),如盒式磁帶、閃存卡、數(shù)字視頻盤、Bernoulli盒式磁帶、隨機存取存儲器(RAM)、只讀存儲器(ROM)等。類 似地,示例環(huán)境還可包括許多類型的監(jiān)控設備,如熱傳感器和安全或火警系統(tǒng),及 其它信息來源。若干程序模塊能存儲在硬盤、磁盤29、光盤31、 ROM24或RAM25中,包括 操作系統(tǒng)35、 一個或多個應用程序36、其它程序模塊37和程序數(shù)據(jù)38。用戶能 通過如鍵盤40和定位設備42等輸入設備將命令和信息輸入到個人計算機20。其 它輸入設備(未示出)可包括話筒、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等。 這里和其它輸入設備常通過耦合到系統(tǒng)總線的串行接口 46連接到處理單元21,但 也可通過其它接口連接,如并行口、游戲口或通用串行總線(USB)。監(jiān)視器47 或其它類型的顯示設備也通過如視頻適配器48的接口連接到系統(tǒng)總線23。除監(jiān)視 器47以外,個人計算機通常包括如揚聲器和打印機等其它外圍輸出設備(未示出)。 圖1的示例系統(tǒng)還包括主適配器55、小型計算機系統(tǒng)接口 (SCSI)總線56和連接 到SCSI總線的外部存儲設備62。個人計算機20可使用到如遠程計算機49的一個或多個遠程計算機的邏輯連 接在網(wǎng)絡環(huán)境中操作。遠程計算機49可以是另一臺個人計算機、服務器、路由器、 網(wǎng)絡PC、對等設備或其它公共網(wǎng)絡節(jié)點,并通常包括以上對個人計算機20描述的 許多或所有元件,雖然在圖1中只示出存儲器存儲設備50。圖1中畫出的邏輯連 接包括局域網(wǎng)(LAN) 51和廣域網(wǎng)(WAN) 52。那樣的網(wǎng)絡環(huán)境常見于辦公室、 企業(yè)范圍計算機網(wǎng)絡、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)。當在LAN網(wǎng)絡環(huán)境中使用時,個人計算機20通過網(wǎng)絡接口或適配器53連接 至局域網(wǎng)51。當在WAN網(wǎng)絡環(huán)境中使用時,個人計算機20通常包括調(diào)制解調(diào)器 54,或用于通過廣域網(wǎng)52與,如因特網(wǎng)建立通信的其它裝置。內(nèi)置或外接的調(diào)制 解調(diào)器54通過串行端口接口46連接系統(tǒng)總線23。在網(wǎng)絡環(huán)境中,相對個人計算 機20畫出的程序模塊或其部分可存儲在遠程存儲器存儲設備中。將會理解所示 的這些網(wǎng)絡連接起示例性的作用,也可以使用在計算機之間建立通信鏈路的其他手 段。如圖2的框圖所示,計算機系統(tǒng)200可以被粗略地分為三個組件群硬件組 件202、硬件/軟件接口組件204、以及應用程序組件206 (在本文的某些上下文中也被稱為"用戶組件"或"軟件組件")。在計算機系統(tǒng)200的各個實施例中,并且參考回圖1,硬件組件202尤其可以 包括中央處理單元(CPU) 21、存儲器(ROM24和RAM25兩者)、基本輸入輸 出系統(tǒng)(BIOS) 26、以及諸如鍵盤40、鼠標42、監(jiān)視器47和/或打印機(未示出) 的各種輸入/輸出(I/O)設備。硬件組件202包括計算機系統(tǒng)200的基本物理基礎 結(jié)構(gòu)。應用程序組件206包括各種軟件程序,包括但不限于編譯器、數(shù)據(jù)庫系統(tǒng)、 字處理程序、商用程序、視頻游戲等。應用程序提供各種途徑,通過這些途徑,就 能夠利用計算機資源來解決問題、提供解決方案并為各用戶(機器、其他計算機系 統(tǒng)和/或終端用戶)處理數(shù)據(jù)。硬件/軟件接口組件204包括(并且在某些實施例中由以下各項唯一地組成) 操作系統(tǒng),而操作系統(tǒng)本身在大多數(shù)情況下包括外殼和內(nèi)核。"操作系統(tǒng)"(OS) 是用作應用程序和計算機硬件之間中介物的指定程序。硬件/軟件接口組件204還 可以包括虛擬機監(jiān)視器(VMM)、公共語言運行時庫(CLR)或其功能等效物、 Java虛擬機(JVM)或其功能等效物、或者在計算機系統(tǒng)內(nèi)用以代替或補充操作系 統(tǒng)的其他這些軟件組件。硬件/軟件接口系統(tǒng)的目的在于提供一個在其中用戶能夠 執(zhí)行應用程序的環(huán)境。任何硬件/軟件接口系統(tǒng)的目標在于使得計算機系統(tǒng)易于使 用,并能以高效的方式利用計算機硬件。硬件/軟件接口系統(tǒng)通常在啟動時被裝入計算機系統(tǒng),并在其后管理計算機系 統(tǒng)內(nèi)的所有應用程序。應用程序通過經(jīng)由應用程序接口 (API)請求服務來與硬件 /軟件接口系統(tǒng)交互。某些應用程序能夠讓終端用戶經(jīng)由諸如命令語言或用戶圖形 界面(GUI)的用戶接口來與硬件/軟件接口系統(tǒng)交互。硬件/軟件接口系統(tǒng)傳統(tǒng)上執(zhí)行有關(guān)應用程序的各種服務。在多個程序同時運 行的多任務硬件/軟件接口系統(tǒng)中,硬件/軟件接口系統(tǒng)確定各應用程序應該以何種 次序運行以及確定在作為輪換切換至另一應用程序之前應該允許每個應用程序允 許多長時間。硬件/軟件接口系統(tǒng)還管理多個應用程序之間內(nèi)部存儲器的共享,并 且處理來自諸如硬盤、打印機和撥號端口之類的附連硬件設備的輸入以及對其的輸 出。硬件/軟件接口系統(tǒng)還將有關(guān)操作的狀態(tài)和可能已發(fā)生的任何錯誤的消息發(fā)送 給每個應用程序(并且在特定情況下,發(fā)送給終端用戶)。硬件/軟件接口系統(tǒng)還 卸載批作業(yè)(例如,打印)的管理,以使得原始應用程序免除管理劃分程序,使得它同時在多個處理器上運行。硬件/軟件接口系統(tǒng)外殼(這里簡稱"外殼")是到硬件/軟件接口系統(tǒng)的交互 式最終用戶接口。(外殼也稱為"命令解釋器",或在一個操作系統(tǒng)中稱為"操作 系統(tǒng)外殼")。外殼是可直接由應用程序和/或最終用戶訪問的硬件/軟件接口系統(tǒng) 的外層。與外殼相反,內(nèi)核是直接與硬件組件交互的硬件/軟件接口系統(tǒng)的最內(nèi)層。雖然可構(gòu)想本發(fā)明的許多實施例尤其適用于計算機化的系統(tǒng),然而在本說明 中不意味著將本發(fā)明限于那些實施例。相反,這里使用的術(shù)語"計算機系統(tǒng)"旨在 包括能存儲和處理信息和/或能使用存儲的信息控制設備本身的行為或執(zhí)行的任何 和所有設備,而不管那些設備本質(zhì)上是否為電子的、機械的、邏輯的、或虛擬的。數(shù)據(jù)變更通告為了允許應用程序能夠至少部分基于關(guān)系數(shù)據(jù)庫來監(jiān)控在存儲系統(tǒng)中存儲的 獨立項目、文件夾或者項目域內(nèi)的變更,建立一變更通告框架??梢詫μ囟愋偷?變更事件(創(chuàng)建、更新、刪除、更新及安全設置等)進行監(jiān)控。根據(jù)一個實施例,與期望注意一個或多個實體、文件夾或域內(nèi)變更的應用程 序(或其他實體)交互的變更通告系統(tǒng)將進行如圖3所示的動作。圖3是由變更通告系統(tǒng)根據(jù)本發(fā)明一個實施例采取的步驟的流程圖。如圖3所示,變更通告系統(tǒng)的 第一步驟300是接收關(guān)于做出請求的實體的標識信息。在一個實施例中,這為該變 更通告系統(tǒng)的通告客戶組成了請求。變更通告系統(tǒng)在一個實施例中被集成到包含關(guān) 系數(shù)據(jù)庫存儲的文件系統(tǒng)中。在替換實施例中,變更通告系統(tǒng)是與關(guān)系數(shù)據(jù)庫存儲 通信(直接或間接)的層或?qū)嶓w。通告客戶的注冊允許請求實體從變更通告系統(tǒng)獲取客戶句柄。這允許該應用 程序它與變更通告系統(tǒng)的事務處理中用唯一的標識符。在某些實施例中,在客戶注 冊期間存儲安全信息,從而允許變更通告系統(tǒng)確定對可經(jīng)由變更通告與該應用程序 共享的信息有何限制(如果有的話)。在一個實施例中,如果該應用程序?qū)σ豁椖?有讀訪問權(quán)限,則僅遞送有關(guān)該項目的變更通告。在通告客戶已被注冊之后,如步驟310所示,變更通告系統(tǒng)將提供通告的有 關(guān)的變更信息注冊。在一個實施例中,這通過監(jiān)視程序預定的注冊來實現(xiàn)。通告客 戶從步驟300提供可用于注冊預定的句柄。每個預定都在文件系統(tǒng)中指定為其請求 通告的一個或多個特定元素。例如,在一個基于關(guān)系數(shù)據(jù)庫的文件系統(tǒng)的示例中, 能被監(jiān)視的元素可以包括實體、文件夾和域。元素的說明可以是直接的(例如,指 定要監(jiān)視的具體域)或者是其他方式的(例如,指定其名稱匹配某一常規(guī)表達式的所有文件夾)。另外,每個預定指定應被監(jiān)控的數(shù)據(jù)變更事件的種類。例如,預定 可以請求有關(guān)文件系統(tǒng)內(nèi)創(chuàng)建、刪除或元素變更的通告。在一個實施例中,可以呈 現(xiàn)用于指定元素的默認值以及數(shù)據(jù)變更事件的類型。這樣,例如在這一實施例中, 如果沒有指定元素(由直接指定引用或其他方式)也沒有指定變更類型,則考慮對 全部元素內(nèi)所有可能變更的通告請求。監(jiān)視程序預定可以在任何時刻注冊。在一個或多個監(jiān)視程序預定己注冊之后, 如步驟320所示,將變更通告提供給請求實體。在某些實施例中,變更通告被同步 提供。例如,在變更通告系統(tǒng)己經(jīng)注冊了所期待的實體信息和變更信息之后,可由請求實體調(diào)用"WaitForChanges (等待變更)"方法。這一方法將等待變更——它 在一得到變更通告系統(tǒng)通告時就返回變更通告。在其他實施例中,變更通告被異步 提供。在異步實施例中,請求實體能夠在一段時間間隔經(jīng)過之后訪問其變更通告, 并且該請求實體接收來自該間隔期間的所有變更通告。這樣,可以調(diào)用 "ReadOldNotifications (讀取舊通告)"方法來確定是否有關(guān)于該請求實體的任何 信息未決,并且返回任何未決通告。在一個實施例中,呈現(xiàn)了一種組合了 WaitForChanges和ReadOldNotifications功能性的方法,在該方法中,如果有任何 未決通告存在,則在調(diào)用未決通告時立即返回,而如果沒有,則在變更由變更通告 系統(tǒng)通告時返回。在一個實施例中,變更通告可從變更通告系統(tǒng)經(jīng)由通告客戶提供。在另一實 施例中,應用程序發(fā)信號表明它準備好通過上述調(diào)用變更通告系統(tǒng)的方法來接收這 一通告。該通告作為相關(guān)變更的集合返回。在一個實施例中,變更作為在變更隊列 上執(zhí)行的等待查詢的結(jié)果返回。等待是僅在找到匹配該查詢的數(shù)據(jù)時才返回的一特 定類型的查詢(找出,例如在數(shù)據(jù)庫系統(tǒng)中)。隊列可以包括若干監(jiān)視程序的變更, 然而該等待査詢(僅在找到匹配該查詢的數(shù)據(jù)時返回)被構(gòu)造為僅接收作為有關(guān)該 客戶的已注冊監(jiān)視程序預定的響應的變更??梢宰詠碜詥蝹€客戶的任何數(shù)量的監(jiān)視程序預定。對于客戶注冊新的監(jiān)視 程序預定并沒有限制,可以是只在創(chuàng)建稍后或者是只在通告被請求或接收之前。在 上述實施例中,與任何已注冊預定相關(guān)的所有通告在單個集合內(nèi)被返回給該監(jiān)視程 序。在其它的實施例中,可以為每個監(jiān)視程序預定返回分開的響應。在其它一些實 施例中,沒有注冊通告客戶,而是注冊了單個預定客戶,包含并具體化為該通告客 戶和一個監(jiān)視程序預定。根據(jù)本發(fā)明的一個實施例,監(jiān)視程序在其與變更通告系統(tǒng)的連接終止時終止。此時或在往后清除期間的某些時刻,隊列內(nèi)有關(guān)該已終止監(jiān)視程序的任何通告被刪 除,并且響應于該監(jiān)視程序預定的通告不再排隊。這類監(jiān)視程序叫做非持久監(jiān)視程 序。根據(jù)本發(fā)明的其它實施例,還提供了被稱為持久監(jiān)視程序的一類監(jiān)視程序。持久監(jiān)視程序客戶可以持續(xù)多個會話。這就使得創(chuàng)建持久監(jiān)視程序客戶的應 用程序能夠確保它們不錯過它們已為其注冊的任何變更。當創(chuàng)建該持久監(jiān)視程序客 戶的會話結(jié)束時,不從隊列中刪除有關(guān)該客戶的變更通告。相反地,它們被保留。 實際上,隊列上該持久監(jiān)視程序的所有通告都被保留直到該持久監(jiān)視程序客戶請求 將其刪除。當創(chuàng)建該持久監(jiān)視程序客戶的應用程序在終止之后重新連接時,隊列將 包含該客戶在終止時已位于隊列上但尚未請求刪除的并與監(jiān)視程序預定相關(guān)的任 何通告,以及在終止之后放置在該隊列上的任何相關(guān)通告。應用程序隨后創(chuàng)建一新 客戶并讀取這些通告(并且在讀取它們之后,能夠請求將其刪除以節(jié)省隊列上的空 間)。因為持久監(jiān)視程序客戶的通告直到持久監(jiān)視程序客戶要求時才被移除,所以 就增加了該應用能接收所有相關(guān)通告的把握。例如,如果通告被發(fā)送給運行持久監(jiān) 視程序客戶的應用程序但是沒被收到(例如,因為存在連接的意外終止),隨后該 應用程序?qū)⒉粫埱髮⑵鋭h除,并且當連接重新建立時,這些通告將仍然在隊列中 對該持久監(jiān)視程序可用。在一個實施例中,持久監(jiān)視程序可以請求在隊列內(nèi)及兩個 給定時刻(由時間戳、計數(shù)器點擊或其他方式引用)之間出現(xiàn)的變更有關(guān)的任何變 更通告。根據(jù)本發(fā)明的各實施例,可以提供持久監(jiān)視程序、非持久監(jiān)視程序、或其兩者。圖4是根據(jù)本發(fā)明一個實施例的變更通告系統(tǒng)和特定數(shù)據(jù)流的框圖。如圖4 所示,變更通告系統(tǒng)400經(jīng)由客戶410與應用交互。這些客戶410是注冊監(jiān)視程序 客戶的應用程序和變更通告系統(tǒng)400的監(jiān)視程序預定的應用程序。注冊事務未在圖 4中示出。有關(guān)監(jiān)視程序預定的信息(以及有關(guān)監(jiān)視程序預定的關(guān)聯(lián)客戶410的身份) 被存儲在預定表420內(nèi)。在一個實施例中,存儲有兩個表——客戶預定表和監(jiān)視程 序預定表。客戶預定表存儲所有的客戶注冊。對于持久監(jiān)視程序客戶,保持在客戶 預定表內(nèi)的信息直到該持久監(jiān)視程序客戶請求將其移除。對于非持久監(jiān)視程序客 戶, 一旦關(guān)閉與該客戶相關(guān)聯(lián)的連接,就移除該客戶數(shù)據(jù)。監(jiān)視程序預定表保持有 關(guān)已注冊監(jiān)視程序的信息。預定表數(shù)據(jù)可以被圖式化并存儲為被跟蹤變更的關(guān)系數(shù)據(jù)庫內(nèi)的數(shù)據(jù),或如圖4所示,也可被分開存儲。
通告分派程序430是變更通告系統(tǒng)400的核心。在一個實施例中,通告分派 程序430是如預定表420所指示對關(guān)系數(shù)據(jù)庫(實體表440)執(zhí)行查詢并在通告隊 列460中存儲變更通告的背景線程。實體表440可由諸如發(fā)布程序450之類的外部 實體變更。這些數(shù)據(jù)通告都對實體表440 (該關(guān)系數(shù)據(jù)庫基礎存儲系統(tǒng))發(fā)生。輸 入實體表被示出作為變更通告系統(tǒng)400的一部分,但是也可與其分開。
在一個實施例中,通告分派程序通過對來自預定表420和實體表440的數(shù)據(jù) 執(zhí)行聯(lián)結(jié)操作來找出實體表440內(nèi)的各自的變更信息。在某些實施例中,部分客戶 410可能未被允許查看實體表440內(nèi)的所有數(shù)據(jù),并且在這些實施例中,有關(guān)客戶 410允許訪問的變更的變更通告僅被存儲在通告隊列460上。
在一個實施例中,通告隊列460使用關(guān)系數(shù)據(jù)庫表被實現(xiàn),并且客戶410使 用等待査詢以確定是否已將響應于監(jiān)視程序預定的變更通告放置入通告隊列460。 隊列條目包括用以標識變更通告所針對客戶410的客戶標識符,以及時間戳。因為 多個變更通告可被立刻遞送(例如,在重新連接的持久監(jiān)視程序的情況下),所以 該時間戳允許客戶410知道各變更以何次序出現(xiàn)。雖然通告隊列460以在其中客戶 410接收有關(guān)變更通告的信息的方式呈現(xiàn),但是可以考慮客戶410從通告分派程序 430接收變更通告的所有方法。通常,在某些實施例中,系統(tǒng)由針對變更請求信息 (預定表420)的存儲、確定是否己做出相關(guān)變更的通告分派程序430、以及將通 告?zhèn)鬟f給客戶的通告程序組成。
服務代理程序470確定非持久監(jiān)視程序客戶410是否己斷開連接,并且如果 是,則清零屬于該非持久監(jiān)視程序客戶410的變更通告隊列。服務代理程序470 還管理其他客戶狀態(tài)信息,諸如預定表420內(nèi)的信息,以保持預定表420最新。另 外,在其中支持持久監(jiān)視程序的一個實施例中,服務代理程序470確定監(jiān)視程序客 戶410是否已要求移除變更通告或終止,并且為這些請求的每一個在預定表420 和通告隊列460上執(zhí)行清除操作。
圖5是由變更通告系統(tǒng)400根據(jù)一個實施例跟蹤客戶410的變更所采取的步 驟的流程圖。如圖5所示,在第一步驟500,向關(guān)系數(shù)據(jù)庫査詢相關(guān)數(shù)據(jù)修改。在 一個實施例中,該步驟500僅在關(guān)系數(shù)據(jù)庫已發(fā)生變更時執(zhí)行。
在第二步驟510,將相關(guān)數(shù)據(jù)修改提供給變更通告系統(tǒng)的客戶。通告包括有關(guān) 發(fā)生的變更的信息,例如正被監(jiān)視的項目到底變更了什么——是該項目本身、該項 目的某些成分、或者某些關(guān)聯(lián)項目。此外,通告包括有關(guān)觸發(fā)該通告的事件類型的信息。關(guān)于該項目的任何數(shù)據(jù)或元數(shù)據(jù)的變更可以是該變更的起源。
在某些實施例中,框架經(jīng)由作為應用程序編程接口一部分的公布的方法為應 用程序提供工具。提供的工具包括
*注冊——應用程序能夠注冊通告客戶。以此方式,可以經(jīng)由單個應用程序 指定的客戶句柄來處理有關(guān)一應用的獨立的通告預定。
皿——己注冊的通告客戶能夠注冊監(jiān)視程序預定,以指定要被監(jiān)視的數(shù) 據(jù)變更事件(例如,有關(guān)一實體、文件夾、或域的變更事件)。通告客戶可以注冊 任何數(shù)量的這些監(jiān)視程序預定。(在其它實施例中,沒有注冊是必需的,并且預定 直接由該應用程序獲取。)
未決變更的枚舉~~所有未決數(shù)據(jù)變更都在注冊之后或重啟期間為預定的 監(jiān)視程序枚舉。
通告的生成~一生成有關(guān)預定已被注冊的數(shù)據(jù)變更事件的通告。
通告的排隊~~通告被排入通告隊列以響應預定的監(jiān)視程序。
通告的供應~一來自通告隊列的相關(guān)通告被提供給預定的監(jiān)視程序。
終止提供一種方法來終止獨立的監(jiān)視程序或終止一通告客戶。
用于非持久監(jiān)視程序的容錯通告的清除。
刪除監(jiān)視程序和刪除客戶^這有關(guān)監(jiān)視程序如何指示其完成并從變更通 告系統(tǒng)中移除其信息??梢允莿h除獨立監(jiān)視程序預定,或是刪除任何能被請求的客 戶相關(guān)信息。雖然這些既可以為持久監(jiān)視程序也可以為非持久監(jiān)視程序?qū)崿F(xiàn),但是 在持久監(jiān)視程序的實施例中,持久監(jiān)視程序客戶必須使用這些,或者該變更將繼續(xù) 為這些客戶排隊。
結(jié)論
如之前所示,本發(fā)明針對用于組織、搜索以及共享數(shù)據(jù)的存儲平臺。本發(fā)明 的存儲平臺擴展并且擴大了現(xiàn)有文件系統(tǒng)和數(shù)據(jù)庫系統(tǒng)之外的數(shù)據(jù)存儲的概念,并 且被設計為用于所有類型的數(shù)據(jù)的存儲,包括結(jié)構(gòu)化的、非結(jié)構(gòu)化的、或者半結(jié)構(gòu)
化的數(shù)據(jù)例如關(guān)系(表列)數(shù)據(jù)、XML,以及一種被稱作項目的新形式的數(shù)據(jù)。
通過其共同存儲基礎和圖式化的數(shù)據(jù),本發(fā)明的存儲平臺允許用于客戶、知識工人 以及企業(yè)的更有效的應用程序開發(fā)。它提供了豐富的并且可擴展的應用程序編程接 口,所述接口不僅可以使用其數(shù)據(jù)模型中固有的性能,而且包含并擴展了現(xiàn)有文件 系統(tǒng)和數(shù)據(jù)庫訪問方法??梢岳斫猓诓幻撾x其寬泛的發(fā)明概念的情況下,可以對以上所述的實施例進行的變更。因此,本發(fā)明并不限于所公開的特殊實施例,而是 旨在覆蓋由所附權(quán)利要求所規(guī)定的本發(fā)明的精神和范圍內(nèi)的所有變更。
如以上所述很明顯,本發(fā)明的各種系統(tǒng)、方法、以及方面的所有或者一部分 可以以程序代碼(即,指令)的形式來體現(xiàn)。這種程序代碼可以被存儲在計算機可
讀介質(zhì)上,例如磁的、電的或者光的存儲介質(zhì),在非限定情況下包括軟盤、CD-ROM、 CD-RW、 DVD-ROM、 DVD-RAM、磁帶、閃速存儲器、硬盤驅(qū)動器、或者其它機 器可讀存儲介質(zhì),其中當程序代碼被載入到機器例如計算機或服務器中并由機器執(zhí)
行時,所述機器就變成用于實施本發(fā)明的裝置。本發(fā)明還可以以在一些傳輸介質(zhì)上 被傳輸?shù)某绦虼a的形式來體現(xiàn),在傳輸介質(zhì)上例如在電線或者電纜上、通過光纖、 通過網(wǎng)絡,包括因特網(wǎng)或內(nèi)部網(wǎng),或者通過任何其它形式的傳輸,其中,當程序代 碼被接收并且被載入到機器例如計算機中并且由機器執(zhí)行時,所述機器就變成用于 實施本發(fā)明的裝置。當在通用處理器上被實現(xiàn)時,所述程序代碼與處理器相結(jié)合, 以便提供類似于特定邏輯電路的操作的獨特裝置。
權(quán)利要求
1.一種用于向?qū)嶓w提供關(guān)于關(guān)系數(shù)據(jù)庫內(nèi)指定類型數(shù)據(jù)變更的變更通告的方法,所述方法包括接收標識所述實體的實體信息;接收關(guān)于所述變更的指定類型的變更信息;以及將關(guān)于在所述關(guān)系數(shù)據(jù)庫內(nèi)所述指定類型的變更的變更通告數(shù)據(jù)提供給所述實體。
2. 如權(quán)利要求1所述的方法,其特征在于,所述將變更通告數(shù)據(jù)提供給所述 實體的步驟包括在隊列中存儲所述變更通告數(shù)據(jù)。
3. 如權(quán)利要求2所述的方法,其特征在于,所述將變更通告數(shù)據(jù)提供給所述實體的步驟包括響應來自所述隊列的針對數(shù)據(jù)的請求。
4. 如權(quán)利要求3所述的方法,其特征在于,所述響應來自所述隊列的針對數(shù)據(jù)的請求的步驟包括響應在所述隊列上執(zhí)行的等待査詢。
5. 如權(quán)利要求2所述的方法,其特征在于,所述響應來自所述隊列的針對數(shù)據(jù)的請求的步驟包括使用實體信息確定所述請求是否由所述實體發(fā)出。
6. 如權(quán)利要求1所述的方法,其特征在于,所述變更涉及所述關(guān)系數(shù)據(jù)庫內(nèi)的指定項目,其中對所述關(guān)系數(shù)據(jù)庫內(nèi)所述指定項目的訪問受安全需求所限,所述方法還包括確定所述實體履行所述安全需求。
7. 如權(quán)利要求2所述的方法,其特征在于,所述隊列包括附加的變更通告信 息項目,每個所述附加的變更通告信息項目對應于請求實體,所述方法還包括如果對所述實體的連接被終止,就刪除所述隊列內(nèi)對應于所述實體的任何所 述附加的變更通告信息。
8. 如權(quán)利要求2所述的方法,其特征在于,所述隊列包括附加的變更通告信 息項目,每個所述附加的變更通告信息項目對應于請求實體,所述方法還包括確定對所述實體的連接被終止; 確定對所述實體的新連接存在;以及使用所述新連接提供對應于所述請求實體的所述附加的變更通告信息項目。
9. 一種用于向?qū)嶓w提供至少一個變更通告的系統(tǒng),每個變更通告關(guān)于數(shù)據(jù)庫 內(nèi)一變更,所述系統(tǒng)包括存儲關(guān)于所述實體的實體信息以及關(guān)于至少一個變更定義的變更信息的預定 表,所述變更定義則定義了對所述數(shù)據(jù)庫的一個或多個可能的變更;通告分派程序,所述通告分派程序用于連接至所述預定表,所述預定表用于 連接至所述數(shù)據(jù)庫,并且所述通告分派程序為所述變更定義所固有的的數(shù)據(jù)庫變更 來査詢所述數(shù)據(jù)庫并接收關(guān)于一相干變更的數(shù)據(jù);以及用于連接至所述通告分派程序的通告程序,所述通告程序用于連接至所述實 體,所述通告程序提供關(guān)于所述相干變更的至少一個通告。
10. 如權(quán)利要求9所述的系統(tǒng),其特征在于,所述通告程序包括 存儲關(guān)于所述相干變更的至少一個所述通告的至少一個的隊列。
11. 如權(quán)利要求IO所述的系統(tǒng),其特征在于,所述隊列接收來自所述實體的 查詢并且其中所述關(guān)于所述相干變更的至少一個通告的供應是響應所述査詢的。
12. 如權(quán)利要求IO所述的系統(tǒng),其特征在于,還包括服務代理程序,如果在所述通告程序和所述實體之間的所述操作性連接被終止,則所述服務代理程序從所述隊列中移除對應于所述實體的所有相干變更。
13. —種包括計算機可執(zhí)行指令的計算機可讀介質(zhì),所述計算機可執(zhí)行指令 用于執(zhí)行以下步驟為關(guān)于與至少一個變更定義相對應的數(shù)據(jù)變更的信息來查詢數(shù)據(jù)庫,每個所 述至少一個變更定義對應于來自一組可能的請求實體集的一請求實體;以及 將關(guān)于所述數(shù)據(jù)變更的數(shù)據(jù)變更數(shù)據(jù)提供給所述請求實體之一。
14. 如權(quán)利要求13所述的計算機可讀介質(zhì),其特征在于,所述提供關(guān)于所述 數(shù)據(jù)變更的數(shù)據(jù)變更數(shù)據(jù)的步驟還包括為每個所述請求實體,在隊列中存儲通告數(shù)據(jù)項目,所述通告數(shù)據(jù)項目包括 所述數(shù)據(jù)變更數(shù)據(jù)以及對應于所述請求實體的實體標識符;用來自所述隊列內(nèi)所述通告數(shù)據(jù)項目之中的至少一個響應的通告數(shù)據(jù)項目, 響應來自所述請求實體之一的對所述隊列中數(shù)據(jù)的請求,其中每個所述響應的通告 數(shù)據(jù)項目包括與所述請求實體之一相對應的實體標識符。
15. 如權(quán)利要求14所述的計算機可讀介質(zhì),其特征在于,所述通告數(shù)據(jù)還包 括標識時間點的時間數(shù)據(jù),其中所述對數(shù)據(jù)的請求包括時間范圍,并且對每個所述 響應的通告數(shù)據(jù)項目的所述時間數(shù)據(jù)被包含在所述范圍內(nèi)。
16. 如權(quán)利要求14所述的計算機可讀介質(zhì),其特征在于,所述請求是所述隊列上的等待請求。
17. 如權(quán)利要求13所述的計算機可讀介質(zhì),其特征在于,還包括提供一種用于實體來注冊作為所述可能的請求實體之一的方法。
18. 如權(quán)利要求13所述的計算機可讀介質(zhì),其特征在于,還包括提供一種用于所述可能的請求實體之一來注冊對應于所述實體的變更定義的 方法。
19. 如權(quán)利要求13所述方法,其特征在于,所述將關(guān)于所述數(shù)據(jù)變更的數(shù)據(jù)變更數(shù)據(jù)提供給所述請求實體之一的步驟僅在確定所述請求實體之一具有訪問所 述數(shù)據(jù)變更數(shù)據(jù)的權(quán)限之后才被執(zhí)行。
全文摘要
用于數(shù)據(jù)變更通告的框架包括存儲事件通告的通告隊列??蛻魬贸绦蚩梢哉埱箨P(guān)于各種數(shù)據(jù)變更事件的事件信息。例如,客戶應用程序可以經(jīng)由一個或多個API預定以接收事件信息。框架能夠?qū)崿F(xiàn)在多個客戶會話期間以及在服務器重啟時被保存的會話指定的事件通告機制以及持久事件通告機制。本發(fā)明的創(chuàng)新方面包括事件通告的有保證的遞送、允許應用程序獲取有關(guān)預定對象過去事件的概述的API、當客戶會話終止時對通告進行的自動垃圾收集/清除。
文檔編號G06Q90/00GK101243445SQ200680029565
公開日2008年8月13日 申請日期2006年8月4日 優(yōu)先權(quán)日2005年8月25日
發(fā)明者A·舒克拉, C·羅, H·原, J·D·拉斯弗, J·克萊恩, L·方, N·R·艾利斯, S·P·阿查亞, S·辛恩 申請人:微軟公司