專利名稱:企業(yè)計劃系統(tǒng)中的更新處理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及企業(yè)計算環(huán)境,并且尤其涉及企業(yè)業(yè)務(wù)計劃的計算環(huán)境。
背景技術(shù):
企業(yè)軟件系統(tǒng)通常是復(fù)雜的大型系統(tǒng),其支持很多例如上百或上千 的并發(fā)用戶。企業(yè)軟件系統(tǒng)的范例包括財務(wù)計劃系統(tǒng)、預(yù)算計劃系統(tǒng)、訂 單管理系統(tǒng)、存貨管理系統(tǒng)、銷售人員管理系統(tǒng)、業(yè)務(wù)智能工具、企業(yè)報 告工具、項目和資源管理系統(tǒng)以及其它企業(yè)軟件系統(tǒng)。
—些類型的企業(yè)計劃應(yīng)用,例如計劃和預(yù)算應(yīng)用,需要大量用戶輸 入數(shù)據(jù),從而軟件將數(shù)據(jù)聚合到組織內(nèi)的較高層責(zé)任區(qū)中。該系統(tǒng)可以對 數(shù)據(jù)執(zhí)行數(shù)學(xué)計算,將一個用戶提交的數(shù)據(jù)與另一個用戶提交的數(shù)據(jù)進(jìn)行 組合。利用這些計算結(jié)果,該系統(tǒng)可產(chǎn)生用于較高層管理進(jìn)行審查的報告。
隨著企業(yè)變得越來越大并且越來越復(fù)雜,數(shù)據(jù)的累積和報告的產(chǎn)生 變得非常復(fù)雜。在將結(jié)果聚合到組織層的最高層節(jié)點之前,需要很多中間 層的計算。 一種累積數(shù)據(jù)的傳統(tǒng)技術(shù)涉及在單數(shù)據(jù)庫事務(wù)內(nèi)從組織層的葉 節(jié)點到頂點的累積。然而,因為累積處理將匯總集中到這些較高層中,因 此這種方法可能經(jīng)歷對數(shù)據(jù)的大量爭用,所述數(shù)據(jù)表示較高層節(jié)點。另一 種傳統(tǒng)方法推遲累積直到預(yù)定的時間(通常為整夜或"非工作時間"(off hours))為止。在這些預(yù)定的時間期間,防止用戶輸入新的數(shù)據(jù),而同時系統(tǒng) 累積數(shù)據(jù)并產(chǎn)生任何請求的報告。整夜處理可能在收集數(shù)據(jù)和產(chǎn)生報告之 間導(dǎo)致嚴(yán)重的時間延遲。另外,對于全球化運營的企業(yè)來說,是沒有"非 工作時間"的。這些問題特別在面向期限的活動(例如企業(yè)計劃)中是存在問 題的。發(fā)明內(nèi)容
—般而言,本發(fā)明涉及用于邏輯上保持企業(yè)軟件系統(tǒng)的一致數(shù)據(jù)的技術(shù)。具體而言,本發(fā)明涉及在持久的數(shù)據(jù)存儲器內(nèi)保持不同版本(verskm) 的企業(yè)數(shù)據(jù)的技術(shù)。當(dāng)用戶提交新的多個值集到系統(tǒng)時,系統(tǒng)保持較早值 集的副本。然后該系統(tǒng)啟動一組任務(wù)以更新其余的數(shù)據(jù)存儲器來反映新的 值集。該組任務(wù)在此處被稱作為"更新處理"。更新處理的謹(jǐn)慎管理使系統(tǒng) 能夠在不必停止系統(tǒng)或?qū)⒂嬎慵性诟?jié)點的情況下訪問一致的記錄。很 多個別的更新處理可以在任何給定的時間在系統(tǒng)內(nèi)進(jìn)行。
在一個實施例中, 一種方法包括根據(jù)用于企業(yè)計劃系統(tǒng)的計算模 型,在數(shù)據(jù)存儲器中存儲企業(yè)計劃數(shù)據(jù),其中所述計算模型包括多個分層 排列的節(jié)點,且其中每一個節(jié)點具有對應(yīng)的層次測度,接收用戶提交的與 所述計算模型中一個或多個葉節(jié)點相對應(yīng)的值集,啟動更新處理,以將所 提交的值集累積入所述數(shù)據(jù)存儲器中,其中所述更新處理包括一組活動, 每一個活動對應(yīng)于所述計算模型中的節(jié)點,確定可用活動集中的最低層次 測度,調(diào)度具有最低層次測度的所有可用活動,以及執(zhí)行所調(diào)度的活動。
在另一個實施例中, 一種系統(tǒng)包括企業(yè)計劃系統(tǒng),其根據(jù)計算模 型為一組企業(yè)用戶執(zhí)行企業(yè)計劃會話(session),其中所述計算模型定義分層 排列的節(jié)點,以及更新處理管理器,其啟動更新處理以將用戶提交的值集 累積入數(shù)據(jù)存儲器,其中每一個更新處理包括對應(yīng)于所述計算模型中節(jié)點 的一組活動,其中所述更新處理管理器還識別出在所述更新處理之間潛在 的沖突活動,以及其中所述更新處理管理器響應(yīng)于査詢,識別所述計算模 型中節(jié)點的一致版本。
通過附圖和以下的描述,闡述本發(fā)明的一個或多個實施例的細(xì)節(jié)。 根據(jù)該描述、附圖和權(quán)利要求書,本發(fā)明的其它特征、目的及優(yōu)點將變得 顯而易見。
圖1是例示示例性計算環(huán)境的方框圖,在所述示例性計算環(huán)境中多 個用戶與企業(yè)軟件系統(tǒng)交互;
圖2是進(jìn)一步詳細(xì)例示企業(yè)計劃系統(tǒng)的一個范例的方框圖3A是示出示例性有向非循環(huán)圖(DAG)的方框圖,其例示假設(shè)的計算任務(wù)之間的關(guān)系;圖3B是示出用于假設(shè)的組織的示例性DAG的方框圖;
圖4是例示企業(yè)計劃系統(tǒng)在實現(xiàn)更新處理中的操作的概述的流程圖;
圖5是例示具有兩個活動的更新處理的示例性DAG的方框圖;
圖6是例示企業(yè)計劃系統(tǒng)在建立兩個活動的更新處理之間關(guān)聯(lián)中的 示例性操作的流程圖7是例示具有兩個活動的更新處理的另一個示例性DAG的方框 圖8A和圖8B是例示企業(yè)計劃系統(tǒng)在兩個活動的更新處理之間添加排序約束并根據(jù)排序約束進(jìn)行操作的示例性操作的流程圖9是例示企業(yè)計劃系統(tǒng)響應(yīng)査詢而報告一致集(consistent set)的示例性操作的流程圖。;
圖IO是例示企業(yè)計劃系統(tǒng)標(biāo)記一致集的示例性操作的流程圖;
圖11是例示企業(yè)計劃系統(tǒng)除去陳舊實例的示例性操作的流程圖。
具體實施方式
圖1是例示企業(yè)4的示例性計算環(huán)境2的方框圖。在企業(yè)3中,多 個用戶6通過計算設(shè)備8A-8N(統(tǒng)稱為"計算設(shè)備8")與企業(yè)計劃系統(tǒng)12 交互。計算設(shè)備8彼此通信并通過網(wǎng)絡(luò)10與企業(yè)計劃系統(tǒng)12通信。企業(yè) 計劃系統(tǒng)12還與數(shù)據(jù)庫14通信。管理員16配置并維護(hù)企業(yè)計劃系統(tǒng)12。
出于示例性目的,參考企業(yè)計劃系統(tǒng)(例如企業(yè)財務(wù)計劃、預(yù)算計劃、 市場計劃或其它業(yè)務(wù)計劃系統(tǒng))來描述本發(fā)明。這里描述的技術(shù)易于應(yīng)用到 其它軟件系統(tǒng),包括其它大型企業(yè)軟件系統(tǒng)。其它企業(yè)軟件系統(tǒng)的例子包 括訂單管理系統(tǒng)、存貨管理系統(tǒng)、銷售人員管理系統(tǒng)、業(yè)務(wù)智能工具、企 業(yè)報告工具、項目和資源管理系統(tǒng)。
—般而言,企業(yè)計劃系統(tǒng)12提供三個企業(yè)計劃階段建模階段、貢 獻(xiàn)階段(contribution stage)以及協(xié)調(diào)階段(reconciliation stage)。在建模階段中, 稱作為分析者3的用戶6的子集(例如首席財務(wù)官、高級財務(wù)分析師或產(chǎn)品 和銷售分析師)定義需求并為企業(yè)3構(gòu)建計劃模型。更具體的,分析者4開 發(fā)具有多個分層排列節(jié)點的模型,所述節(jié)點表示企業(yè)3內(nèi)的各個組織單元, 例如業(yè)務(wù)單元或部門,以及還表示每一個組織單元內(nèi)的變量之間的計算關(guān)系。
在建模階段期間,分析者4還為組織層級的每一個節(jié)點建立團(tuán)體目 標(biāo)(corporate target)。分析者4然后為層中的一個或多個節(jié)點指定一個或多 個企業(yè)用戶,例如經(jīng)理、主管、銷售代表、研究室管理員等等,他們對相 應(yīng)組織單元的企業(yè)計劃負(fù)責(zé)。通常,每一個用戶一般對屬于他們各自組織 單元的一個或多個節(jié)點負(fù)責(zé)。其它用戶對其它組織單元的類似節(jié)點負(fù)責(zé)。 可以將每一個企業(yè)用戶指定為提供計劃數(shù)據(jù)給企業(yè)系統(tǒng)12的參與者 (contributor)7、接受或拒絕來自參與者7的貢獻(xiàn)的審査者5或二者。參與者 7和審査者5可以是企業(yè)3內(nèi)的或耦合到網(wǎng)絡(luò)10的其它實體內(nèi)的被授權(quán)的 用戶,例如供應(yīng)商和消費者。
接下來,企業(yè)計劃系統(tǒng)12進(jìn)入貢獻(xiàn)階段,在該階段期間參與者7與 企業(yè)計劃系統(tǒng)12交互,并輸入貢獻(xiàn)數(shù)據(jù)形式的詳細(xì)信息。例如,取決于企 業(yè)3執(zhí)行的特定企業(yè)計劃活動,參與者7可提供詳細(xì)的財務(wù)預(yù)測、收益預(yù) 測、訂單預(yù)測、存貨預(yù)測、估計的資源需求等。該系統(tǒng)還可以用于其它類 型的計劃例如市場活動計劃、零售商店計劃或任何其它業(yè)務(wù)計劃活動。
在協(xié)調(diào)期間,企業(yè)計劃系統(tǒng)12自動協(xié)調(diào)預(yù)測數(shù)據(jù)和分析者4提供的 團(tuán)體目標(biāo)。企業(yè)計劃系統(tǒng)12可累積企業(yè)3的貢獻(xiàn)數(shù)據(jù)并為與企業(yè)3的較高 層關(guān)聯(lián)的審查者5提供對累積數(shù)據(jù)的訪問。企業(yè)計劃系統(tǒng)12識別受最近接 收的貢獻(xiàn)數(shù)據(jù)影響的組織模型的所有較高層,并將結(jié)果累積入組織層級的 較高層。企業(yè)計劃系統(tǒng)12以如下方式累積數(shù)據(jù)最小化數(shù)據(jù)庫爭用,允許 進(jìn)行中的計劃數(shù)據(jù)輸入,并允許在累積進(jìn)行時對該數(shù)據(jù)進(jìn)行查詢以返回一 致結(jié)果。
在每一層上,企業(yè)計劃系統(tǒng)12確保(如企業(yè)模型的節(jié)點所定義的)審 查者7協(xié)調(diào)目標(biāo)數(shù)據(jù)和預(yù)測數(shù)據(jù)??紤]到分析者8提供的團(tuán)體目標(biāo),每一 個審査者7可以例如拒絕或接受貢獻(xiàn)數(shù)據(jù)。該處理繼續(xù)直到組織層級的最 高層最后批準(zhǔn)該貢獻(xiàn)數(shù)據(jù)為止,從而確保來自參與者6的貢獻(xiàn)數(shù)據(jù)與由分 析者8提供的團(tuán)體目標(biāo)相協(xié)調(diào)。
從而企業(yè)計劃系統(tǒng)12能夠使組織將團(tuán)體模型和組織目標(biāo)與詳細(xì)的預(yù) 測相協(xié)調(diào),并提供用于遞送合作計劃能力的平臺,所述合作計劃能力可容 易地調(diào)整至上千用戶。
企業(yè)用戶(例如參與者7、分析者4和審查者5)可利用各種計算設(shè)備 8經(jīng)由網(wǎng)絡(luò)10與企業(yè)計劃系統(tǒng)12交互。例如,利用膝上型計算機(jī)、桌上型 計算機(jī)等,運行web瀏覽器(例如位于華盛頓州雷蒙德(Redmond, Washington) 的微軟公司(Microsoft Corporation)所出品的Internet Explorer 或網(wǎng)景通信 公司(Netscape Communications Corp.)所出品的Netscape),企業(yè)用戶6可與 企業(yè)計劃系統(tǒng)12交互。
在另一個實施例中,用戶6可以利用擴(kuò)展的傳統(tǒng)電子表格軟件應(yīng)用 進(jìn)行離線工作,所述傳統(tǒng)電子表格軟件應(yīng)用例如是微軟公司提供的 Microsoft Excel 、 IBM的QuattroTM Pro of Corel and Lotus l-2畫3TM,在 2004年10月14日提交的Humenansky等人的共同待決并共同受讓的美國 專利申請NO. 10/965,321中對其進(jìn)行了描述。如應(yīng)用中所描述的,在電子 工作表環(huán)境中,電子表格應(yīng)用的功能可以擴(kuò)展成向企業(yè)用戶提供觀看和編 輯多維數(shù)據(jù)的能力,所述多維數(shù)據(jù)例如置于由企業(yè)計劃系統(tǒng)12維持的多維 數(shù)據(jù)存儲器中的數(shù)據(jù)。這允許用戶調(diào)節(jié)現(xiàn)有的電子表格功能,例如格式化、 制圖和其它功能,同時與復(fù)雜的多維數(shù)據(jù)存儲器交互。
或者,企業(yè)用戶可以利用個人數(shù)字助理(PDA),例如位于加州圣克拉 拉(Santa Clara, California)的Palm公司所出品的PalmTM管理器、支持web 的蜂窩式電話或類似設(shè)備。網(wǎng)絡(luò)IO表示任何通信網(wǎng)絡(luò),例如基于包的數(shù)字 網(wǎng)絡(luò),如因特網(wǎng)。以此方式,系統(tǒng)2可以容易地調(diào)整至適用于大型企業(yè)。 企業(yè)用戶6可經(jīng)由局域網(wǎng)直接訪問企業(yè)計劃系統(tǒng)12,或可以經(jīng)由虛擬專用 網(wǎng)絡(luò)、遠(yuǎn)程撥號或類似遠(yuǎn)程訪問通信機(jī)制遠(yuǎn)程訪問企業(yè)計劃系統(tǒng)3。
系統(tǒng)2還包括數(shù)據(jù)庫14,其為模型中的每一個節(jié)點存儲值集。數(shù)據(jù) 庫14可以以多種方式被體現(xiàn)。例如,數(shù)據(jù)庫14可以是關(guān)系數(shù)據(jù)庫,例如 位于華盛頓州雷蒙德的微軟公司所出品的SQL服務(wù)器或位于加州紅木海 岸(Redwood Shores, CA)的甲骨文(Oracle)公司所出品的Oracle數(shù)據(jù)庫。該數(shù) 據(jù)庫還可以是面向?qū)ο蟮幕蚱渌愋偷臄?shù)據(jù)庫。
在用戶6每一次提交新的值集時,企業(yè)計劃系統(tǒng)12執(zhí)行一組后臺活 動以將新的值集并入企業(yè)3的總數(shù)據(jù)存儲器中。這些后臺活動可以不與任 務(wù)提交同步發(fā)生。需要使整個數(shù)據(jù)存儲器與最近提交的值集同步的該組任 務(wù)或活動在這里稱作為"更新處理"。在大型企業(yè)中,可能有很多員工在提交新的值集。因此,在企業(yè)計劃系統(tǒng)12內(nèi)可能并發(fā)運行很多的更新處理。
圖2是進(jìn)一步詳細(xì)例示企業(yè)計劃系統(tǒng)12的一個例子的方框圖。需要 理解的是,企業(yè)計劃系統(tǒng)12還包括其它的功能部件,僅示出企業(yè)計劃系統(tǒng) 12與本發(fā)明最相關(guān)的那些部分。用戶6經(jīng)由關(guān)聯(lián)的計算設(shè)備8和網(wǎng)絡(luò)10與 企業(yè)計劃系統(tǒng)12通信。更新處理模塊20接收最近提交的值集并協(xié)調(diào)它們 到數(shù)據(jù)存儲器的集成。如上所述,在建模階段期間,分析者4開發(fā)一種計 算模型24,其具有多個分層級排列的節(jié)點,所述節(jié)點表示企業(yè)3內(nèi)的各種 組織單元,例如業(yè)務(wù)單元或部門,或通過計算相關(guān)的不同變量,所述變量 表示與建模的業(yè)務(wù)處理相關(guān)的規(guī)格。計算模型24使各個值集彼此相關(guān),包 括在每一個組織單元內(nèi)不同層上的變量之間的聚合,以及在組織層級的一 層上的值和該組織層級的較高層上的值之間的聚合。
當(dāng)從用戶6接收到新的值集時,更新處理模塊20確定計算模型24 的哪個節(jié)點對應(yīng)于每一個值集。更新處理模塊20還確定用于使得數(shù)據(jù)存儲 器以最近提交的值集進(jìn)行更新所需的活動集。更新處理模塊20參考計算模 型24以確定在更新數(shù)據(jù)存儲器以反映最近提交的值集時執(zhí)行哪些活動。更 新處理模塊20還可創(chuàng)建在提交新的值集時管理每一個更新處理所需的任何 必要記錄和列表。例如,更新處理模塊20可創(chuàng)建對應(yīng)于每一個更新處理的 更新處理記錄。計算引擎21執(zhí)行由計算模型24中的節(jié)點定義的必要計算。
更新處理模塊20還在可用活動(available activity)之間進(jìn)行調(diào)度 (schedule),并識別出在兩個或更多個同時活動的更新處理之間潛在的沖突 更新。更新處理模塊20在累積進(jìn)行時報告一致值集。更新處理模塊20允 許在特定的時間點標(biāo)記數(shù)據(jù)存儲器內(nèi)一致的節(jié)點實例集,并進(jìn)一步提供在 隨后訪問那些被標(biāo)記的數(shù)據(jù)集。更新處理模塊20還識別查詢或更新處理不 再可訪問的節(jié)點實例,從而可以將它們從數(shù)據(jù)存儲器中除去。
圖3A是示出示例性計算模型50的方框圖。概念上而言,可以將計 算模型排列進(jìn)圖中,其中圖的邊使值集彼此相關(guān),圖的節(jié)點是實際的計算。 在該實施例中,該圖在每一個邊使計算的源值到目標(biāo)值相關(guān)的意義上是有 方向的,并且是非循環(huán)的,因為沒有值可以被直接或間接輸入至其自身的 計算中。這種類型的圖稱作為有向非循環(huán)圖(DAG)。
DAG 50包括多個葉節(jié)點52、 54、 56和58。在該例子中,這些葉節(jié)點被定義成折扣%52、價格54、銷售單元56和成本58。將基于其它節(jié)點被 計算出的DAG50的節(jié)點在這里稱作為計算出的節(jié)點。節(jié)點62、 64、 72和 82是計算出的節(jié)點的例子。在這個例子中,這些計算出的節(jié)點被定義為銷 售62、銷售成本64、收益72和毛利82。根節(jié)點例如節(jié)點82是那些不是用 于另一個節(jié)點計算的輸入的節(jié)點。
DAG 50的最低層(由葉節(jié)點組成)稱作為葉層或1層。在計算節(jié)點和 葉節(jié)點之間的最大節(jié)點數(shù)(包括節(jié)點本身)在這里稱作為節(jié)點層。因此在 DAG50的例子中,節(jié)點62和64處于2層,節(jié)點72處于3層,而節(jié)點82 處于4層。
DAG 50表示計算模型,其中根據(jù)節(jié)點54和56計算節(jié)點62,根據(jù) 節(jié)點56和58計算節(jié)點64,根據(jù)節(jié)點52和62計算節(jié)點72,而根據(jù)節(jié)點64 和72計算節(jié)點82。
每一個節(jié)點的值集可以是單一值,但一般它們可包含任意數(shù)目的同 核值類型的測度,其隨著不同的特性例如產(chǎn)品或時間改變。計算處理對輸 入值集中的所有對應(yīng)值應(yīng)用相同的運算。節(jié)點計算還可能更復(fù)雜,因為它 們可能不需要以與目標(biāo)節(jié)點相同的方式對計算群的輸入節(jié)點進(jìn)行個別測 度。
將每一個節(jié)點的值集存儲在可靠并持久的存儲中,例如數(shù)據(jù)庫14。 根據(jù)DAG 50,企業(yè)計劃系統(tǒng)12可確定這些值集如何相關(guān)。如這里所描述 的,企業(yè)計劃系統(tǒng)12使得最近提交的值集以如下方式被聚合進(jìn)數(shù)據(jù)存儲器 中(所述值集是總值集組的子集)在累積進(jìn)行時最小化數(shù)據(jù)庫爭用,同時允 許對數(shù)據(jù)存儲器進(jìn)行查詢以返回一致的僅具有短時間滯后的最新結(jié)果,還 允許用戶連續(xù)提交新的值集。
因為企業(yè)計劃系統(tǒng)12接收最近提交的值集,企業(yè)計劃系統(tǒng)12在持 久存儲中存儲所提交的值集,而不是替換那些值集的在前版本,它們被存 儲為與在前值集關(guān)聯(lián)的新值集,但被分配不同的序列版本號。類似地,企 業(yè)計劃系統(tǒng)12在數(shù)據(jù)存儲器中將從最近提交的值集獲得的計算出的值集存 儲為新版本,而將在前版本留在適當(dāng)?shù)奈恢谩?br>
如上所述,在這里將使整個數(shù)據(jù)存儲器與一組提交的值集同步的活 動集稱作為更新處理。當(dāng)活動完成時,更多活動可被添加到更新處理中。因為計算順序是非循環(huán)的,因此每一個更新處理最后可完成;也就是說, 最近提交的值集最后被并入DAG的根節(jié)點中,對于所述根節(jié)點,最近提交 的值集是具有從屬性的(dependent)。在原始值集被保存進(jìn)數(shù)據(jù)存儲器時提交 值集的行為完成。
執(zhí)行與更新處理相關(guān)的活動,直到所有活動完成為止,此時整組值 集(例如DAG50的所有節(jié)點)的新的一致版本對于查詢可用。這些活動可以 與來自任意數(shù)目的其它提交的值集變化以及它們關(guān)聯(lián)的更新處理的活動交 織。
如上所述,DAG的節(jié)點表示節(jié)點之間的從屬關(guān)系。出于描述目的, 將"從屬"值集定義為目的節(jié)點計算的輸入值集。通過這種定義,節(jié)點54 和56稱作為對節(jié)點62 "從屬的節(jié)點",節(jié)點56和58稱作為對節(jié)點64從屬 的節(jié)點,節(jié)點52和62稱作為對節(jié)點72從屬的節(jié)點,節(jié)點72和64稱作為 對節(jié)點82從屬的節(jié)點。對應(yīng)于節(jié)點54和56的值集稱作為節(jié)點62的"從 屬值集",依此類推。
當(dāng)對更新處理的活動進(jìn)行調(diào)度時,識別出可用活動子集是非相互從 屬的。換句話說,首先被調(diào)度的活動是那些具有從屬集的活動,所述值集 已被更新或未被最近提交的值集變化所影響。在該子集中的活動被一個或 多個計算處理調(diào)度用于計算。這些活動中的每一個活動可以潛在地由不同 的活動處理并行執(zhí)行。
為了識別非相互從屬的活動子集,企業(yè)計劃系統(tǒng)12從可用活動集中 確定子集,在執(zhí)行子集之前不需要完成那些可用活動中的任何其它活動。 在一個實施例中,測度被用于DAG中的每一個節(jié)點,每一個節(jié)點標(biāo)識出其 相對于葉層的位置(即,不是計算出的且不從屬任何其它節(jié)點的節(jié)點層)。當(dāng) 活動被調(diào)度用于執(zhí)行時,算法僅釋放具有相同層測度的活動,以及僅釋放 測度是所有可用活動中最低值的那些活動。換句話說,選擇可用活動子集, 其中每一個活動具有從DAG的最低層算起的相同步驟數(shù),并具有在所有可 用活動中從DAG的最低層算起的最小步驟數(shù)。
例如,參考圖3A,假設(shè)用戶提交新的值集到價格節(jié)點54和銷售單 元節(jié)點56。使以最近提交的值集更新DAG 50所需的活動集包括計算節(jié)點 62(2層)、64(2層)、72(3層)禾卩82(4層)。由于那些2層任務(wù)是可用活動中的最低層,因此待調(diào)度的第一個活動集可以是計算節(jié)點62和64。這些活動 (節(jié)點62和64的計算)可以并行執(zhí)行。在該2層任務(wù)完成之后,企業(yè)計劃系 統(tǒng)12可在剩余的可用活動中查看,并發(fā)現(xiàn)最低的剩余活動是累積節(jié)點72, 其是3層任務(wù)。最后,在計算節(jié)點72之后,將調(diào)度計算節(jié)點82,其是4層 活動。
當(dāng)每一個活動完成時,如果活動還不是更新處理的一部分的話,則添加活動到可用活動列表中,剛計算出的值集從屬于所述可用活動列表。然后進(jìn)行檢查以查看任何其它活動對于更新處理是否仍是活動的。如果當(dāng)前活動是在調(diào)度組內(nèi)執(zhí)行的最后活動,則再次識別哪些活動的所有從屬集已被更新或不需要被更新,并調(diào)度活動子集用于計算。
當(dāng)最后活動完成并且在更新處理中不再有活動時,完成更新處理并且將最初提交的新值集應(yīng)用到DAG內(nèi)的所有值集(節(jié)點)。
圖3B示出假設(shè)的組織的示例性DAG90的方框圖。DAG90示出具有巻入"所有區(qū)域"匯總的"東"和"西"區(qū)域的假設(shè)組織。東區(qū)的計算模型由附圖標(biāo)記92表示,西區(qū)的計算模型由附圖標(biāo)記94表示,所有區(qū)域的計算模型由附圖標(biāo)記96表示。
在DAG90中,東區(qū)DAG 92和西區(qū)DAG 94中的節(jié)點"折扣%"僅 用于計算DAG92和94的每一個中的"收益"節(jié)點,并且不巻入所有區(qū)域 DAG 96中。DAG 92和94中的"銷售"和"銷售成本"節(jié)點在區(qū)域?qū)舆M(jìn)行 計算,但對所有區(qū)域?qū)舆M(jìn)行求和,以得到所有區(qū)域DAG 96中"價格"和 "成本"的加權(quán)平均值。因此,圖3B所示的示例性組織/計算DAG90例示 了計算可隨著組織的不同層而改變。
圖4是例示在實現(xiàn)更新處理(102)時更新處理模塊20的示例性操作的 流程圖。在接收到最近提交的值集時,更新處理模塊20啟動更新處理并指 定更新數(shù)據(jù)存儲器以反映最近提交的值集所需的可用活動(104)。當(dāng)為更新 處理調(diào)度活動時,僅調(diào)度以下活動非相互從屬的,SP,所有從屬集已被 更新或不受提交的值集變化影響的那些活動。為了識別非相互從屬的活動, 更新處理模塊20確定所有可用活動中的最低層測度(106)。更新處理模塊 20然后調(diào)度用于執(zhí)行的所有可用活動,所述可用活動具有所確定的最低層 測度(10S)。以此方式,僅調(diào)度具有相同層測度的活動用于執(zhí)行,其中測度是所有可用活動中最低的。換句話說,每一個調(diào)度的活動具有從DAG中最 低層算起的相同步驟數(shù),并且步驟數(shù)是所有可用活動中最小的。
—旦調(diào)度了適當(dāng)?shù)幕顒?,更新處理模塊20釋放被調(diào)度的活動用于執(zhí) 行(IIO)。更新處理模塊20檢查是否存在任何其它被調(diào)度的活動(112)。如果 存在,則更新處理模塊20可釋放另一個被調(diào)度的活動(110)?;蛘撸绻麤] 有其它被調(diào)度的活動,則更新處理模塊20檢查是否有用于該更新處理的任 何其它可用活動(114)。如果沒有,則更新處理模塊20標(biāo)記該更新處理為競 爭(116)。如果有用于更新處理的任何其它可用活動(114),則更新處理模塊 20再次從可用活動中確定最低層測度(116講調(diào)度它們用于執(zhí)行(108)。
企業(yè)計劃系統(tǒng)12可以識別何時多個不同更新處理的處理導(dǎo)致以下情 形,其中給出的值集起源與總的數(shù)據(jù)存儲器不一致。企業(yè)計劃系統(tǒng)12內(nèi)的 更新處理模塊20識別這種潛在不一致的更新。這種潛在不一致的更新可能 發(fā)生在有兩個或更多個同時活動的更新處理時。因為更新處理內(nèi)的活動可 能不是同時完成,因此在另一個更新處理準(zhǔn)備計算時, 一個更新處理可能 還沒有在目標(biāo)節(jié)點的所有輸入節(jié)點中輸入己更新的值集。例如,如果目標(biāo) 節(jié)點有兩個輸入節(jié)點,并且第一個更新處理己更新一個輸入節(jié)點,但第二 個更新處理還未更新該第二個輸入節(jié)點,則第一個更新處理不應(yīng)打算計算 目標(biāo)節(jié)點,因為目標(biāo)節(jié)點的計算還沒有獲得第二個輸入節(jié)點的最近數(shù)據(jù)。
在這種情形下,當(dāng)?shù)谝粋€更新處理確定第二個更新處理已更新從屬 集(計算的輸入值集),但還未更新當(dāng)前目標(biāo)節(jié)點時,第一個更新處理建立與 第二個更新處理的"關(guān)聯(lián)"。在這種情形下,第二個更新處理變得對更新兩 個關(guān)聯(lián)的更新處理的目標(biāo)節(jié)點負(fù)責(zé)。該第二個更新處理在達(dá)到計算目標(biāo)值 集點時執(zhí)行兩個計算,并存儲值集,該值集用于在單一增加的值集中組合 兩個更新處理的所有變化。必要時該關(guān)聯(lián)過程可擴(kuò)展至任意數(shù)目的更新處 理。關(guān)聯(lián)過程持續(xù)直到完成所有更新處理為止,所述更新處理是關(guān)聯(lián)的一 部分。
圖5是例示上述的示例性更新處理關(guān)聯(lián)的示例性DAG 50的方框圖。 圖5的DAG 50具有與圖3A的DAG 50相同的節(jié)點和邊關(guān)系。DAG 50具 有兩個當(dāng)前活動的更新處理。節(jié)點的在前版本由節(jié)點52A、 54A、 56A和 62A表示。那些節(jié)點的更新版本分別由節(jié)點52B、 54B、 56B和62B表示。第一個更新處理(混編的(hashed))已更新節(jié)點54B和62B。第二個更新處理 (灰色陰影部分)已更新最近提交進(jìn)節(jié)點52B和56B的值集。假設(shè)在圖5所 示的時間點,第一個更新處理準(zhǔn)備更新節(jié)點72。換句話說,第一個更新處 理的當(dāng)前目標(biāo)節(jié)點是節(jié)點72。然而,第二個更新處理(其更新節(jié)點實例52B 和56B)還未更新節(jié)點62,該節(jié)點62是目標(biāo)節(jié)點72的輸入。在這種情形下, 第一個更新處理確定對第二個更新處理己更新目標(biāo)節(jié)點72從屬的節(jié)點(在 這個例子中是節(jié)點52B),但還未更新節(jié)點62或72。如果第一個更新處理 繼續(xù)進(jìn)行并更新節(jié)點72,則更新將不一致,因為這僅包括來自第一個更新 處理的數(shù)據(jù)部分,即節(jié)點52B,而非節(jié)點56B。
從而該第一個更新處理建立與該第二個更新處理的"關(guān)聯(lián)"。根據(jù)該 關(guān)聯(lián),該第二個更新處理變成對更新第一個和第二個更新處理的目標(biāo)節(jié)點 72負(fù)責(zé)。當(dāng)節(jié)點72和82的計算值集并入來自兩個任務(wù)集的數(shù)據(jù)時,該關(guān) 聯(lián)過程持續(xù)直到兩個更新都完成為止。因此,在這個例子中,第一個更新 處理"傳遞"節(jié)點72的計算至第二個更新處理。 一旦該第二個更新處理已 更新節(jié)點62(在此時已創(chuàng)建節(jié)點62C,未示出),則其將更新該第一個和第二 個更新處理的節(jié)點72,創(chuàng)建單一的新節(jié)點實例72B(未示出),該單一的新節(jié) 點實例72B并入最近提交的值集52B、 54B和56B。
當(dāng)更新處理與另一個更新處理相關(guān)聯(lián)時,該關(guān)聯(lián)更新處理通知關(guān)聯(lián) 的其它更新處理并且"傳遞"其對節(jié)點72的計算。
為了識別出潛在發(fā)生沖突的更新,更新處理模塊20利用DAG中每 一個節(jié)點中的測度,所述節(jié)點標(biāo)識出其相對葉層的位置。當(dāng)一連串活動被 調(diào)度用于執(zhí)行時,算法僅釋放具有相同的最小層測度的活動。更新處理模 塊20記下可用于執(zhí)行的那些活動的層次。當(dāng)?shù)谝粋€更新處理準(zhǔn)備計算節(jié)點 時,其檢查每一個從屬節(jié)點并識別出創(chuàng)建最近版本的更新處理。如果與從 屬節(jié)點的最近版本相關(guān)聯(lián)的第二個更新處理的層次低于目標(biāo)節(jié)點的層次, 則該第一個更新處理建立與第二個更新處理的關(guān)聯(lián),并使該第二個更新處 理完成計算。因為所有更新處理涉及DAG中的從屬信息,因此其它的更新 處理將在某一點執(zhí)行目標(biāo)節(jié)點的計算。
圖6是例示在識別潛在不一致的更新并在任何如此識別的潛在發(fā)生 沖突的更新處理之間建立關(guān)聯(lián)時更新處理模塊20的示例性操作的流程圖(120)。因為最近提交的值集被并入到數(shù)據(jù)存儲器中,因此更新處理模塊20 為每一個值集實例創(chuàng)建關(guān)聯(lián)的從屬集列表。該從屬集列表記錄每一個值集 的特定版本,所述每一個值集被用于計算特定的節(jié)點實例。例如,在圖6 中,DAG50中每一個節(jié)點的從屬集如下所示節(jié)點 從屬集62A 54A, 56A62B 54B, 56A64 56A, 5872 52A, 62A, 54A82 72, 64
為了識別潛在的不一致的更新,當(dāng)?shù)谝粋€更新處理準(zhǔn)備計算目標(biāo)節(jié) 點時,更新處理模塊20識別出對目標(biāo)節(jié)點從屬的每一個節(jié)點(122)。 一旦識 別出對目標(biāo)節(jié)點從屬的每一個節(jié)點,更新處理模塊20識別出創(chuàng)建每一個從 屬節(jié)點的最近版本的更新處理(124)。更新處理模塊20確定每一個識別出的 更新處理的最高完成層(126)。如果與每一個識別出的更新處理相關(guān)聯(lián)的層 次不低于目標(biāo)節(jié)點的層次(128)(換句話說,與每一個識別出的更新處理相關(guān) 聯(lián)的層次在目標(biāo)節(jié)點層上或高于該目標(biāo)節(jié)點層),則更新處理已完成其對 DAG中目標(biāo)節(jié)點的至少該層的計算,并且低于該層的值集與更新處理一致。 然后更新處理模塊20將計算目標(biāo)節(jié)點(132)。
—旦目標(biāo)節(jié)點被計算出,更新處理模塊20可繼續(xù)另一個活動(134)。 或者,如果與任何識別出的更新處理關(guān)聯(lián)的層次低于目標(biāo)節(jié)點的層次(128), 則第一個更新處理將其自身與較低層的更新處理"相關(guān)聯(lián)"(130)。在這種 情況下,該第一個更新處理通知關(guān)聯(lián)的較低層的更新處理,并且應(yīng)完成對 較高層更新處理的目標(biāo)節(jié)點計算。通過建立這種關(guān)聯(lián),更新處理模塊20從 第一個更新處理"傳遞"目標(biāo)節(jié)點計算到較低層的更新處理。在這一點上, 因為目標(biāo)節(jié)點的計算通過與較低層的更新處理關(guān)聯(lián)而被傳遞,所以更新處 理模塊20可繼續(xù)進(jìn)行另一個活動(134)。
本發(fā)明確保創(chuàng)建節(jié)點的任何特定版本的更新處理所處的層次決不高 于創(chuàng)建該節(jié)點的任何在前版本的更新處理所處的層次。這種保證允許通過 檢査其最近的版本來確定任何給定節(jié)點的一致性狀態(tài)。換句話說,通過提供這種保證,不需檢查創(chuàng)建節(jié)點的任何在前版本的任何更新處理的狀態(tài), 而僅檢查創(chuàng)建最近版本的更新處理的狀態(tài)。
為了實現(xiàn)這個目的,更新處理模塊20提供排序約束,該排序約束防 止來自DAG中較高層處的計算節(jié)點的更新處理,其高于DAG中處于或高 于該層的另一個更新處理,但可能在隨后的某一點落后該更新處理。當(dāng)創(chuàng) 建節(jié)點的新版本時,更新處理模塊20確定創(chuàng)建該節(jié)點的在前最近版本的更 新處理的狀態(tài)。如果該更新處理還未完成,則在兩個更新處理之間建立排 序約束,從而相比創(chuàng)建節(jié)點的最近版本的更新處理,不允許建立排序約束 的更新處理以計算DAG中的較高層處的節(jié)點。
當(dāng)更新處理發(fā)現(xiàn)已完成其被調(diào)度的活動集并轉(zhuǎn)而調(diào)度另一組可用活 動時,其首先識別所有其可用活動的最低層測度。其將該最低層測度與具 有附加排序約束的每一個更新處理的層次進(jìn)行比較。如果其最低層測度高 于任何更新處理當(dāng)前正執(zhí)行活動的層次,則當(dāng)前更新處理不在那時調(diào)度任 何新的可用活動。取而代之的是,在具有附加排序約束的那些更新處理的 層次變化期間,該更新處理使其本身處于"阻止"狀態(tài)。
當(dāng)另一個更新處理發(fā)現(xiàn)其己更新完其被調(diào)度的活動集并可以調(diào)度額 外的活動從而轉(zhuǎn)至較高層以執(zhí)行任務(wù)時,其查看是否有被阻止的任何附加 更新處理正等待該更新處理向前執(zhí)行。如果存在任何這種更新處理,則將 解除對這些更新處理的阻止,從而它們可以再次檢查它們的可用活動集, 并且如果不再被約束的話,則調(diào)度額外的活動來執(zhí)行。如果任何這些其它 更新處理發(fā)現(xiàn)其仍然必須等待一些其它更新處理,則其可以再次使其本身 處于"阻止"狀態(tài),等待另一個更新處理移至DAG中的較高層。
圖7是例示示例性排序情況的示例性DAG 50的方框圖。圖7的DAG 50的節(jié)點和邊關(guān)系與圖3A所示的DAG 50相同。DAG 50具有兩個當(dāng)前活 動的更新處理。節(jié)點的在前版本由節(jié)點52A、 56A、 58A、 62A和64A表示。 那些節(jié)點的更新版本分別由節(jié)點52B、 56B、 58B、 62B和64B表示。第一 個更新處理(混編的)已更新節(jié)點52B、 56B、 62B和64B。第二個更新處理(灰 色陰影部分)己更新最近提交至節(jié)點58B的值集。第二個更新處理現(xiàn)在準(zhǔn)備 計算節(jié)點64,然后計算節(jié)點82。然而,如果在該第二個更新處理計算節(jié)點 64之后,其計算節(jié)點82,則請求節(jié)點82和/或72的查詢可能不會產(chǎn)生一致的報告,這是因為對節(jié)點82進(jìn)行檢查的査詢(由第二個更新處理更新)可能 不知道第一個更新處理仍在活動,而還未將其所有數(shù)據(jù)并入節(jié)點72或82。
為了防止發(fā)生這種情況,在更新節(jié)點64之后(從而創(chuàng)建新的節(jié)點實例 64C,未示出),該第二個更新處理確定哪個更新處理創(chuàng)建該節(jié)點的在前最 近版本。在這個例子中,第一個更新處理創(chuàng)建節(jié)點64B,即,在前最近版 本。然后該第二個更新處理檢査第一個更新處理的層次,并確定第一個更 新處理是在2層。然后第二個更新處理對第一個更新處理附加排序約束, 并使其本身處于"阻止"狀態(tài),直到該第一個更新處理至少進(jìn)行到與第二 個更新處理的下一個活動相同的層次。在第一個更新處理完成其3層任務(wù) (更新節(jié)點72)和其4層任務(wù)(更新節(jié)點82)之后,該第一個更新處理將解除對 該第二個更新處理的阻止,允許其更新節(jié)點82。
圖8A是例示在建立排序約束時更新處理模塊20的示例性操作的流 程圖(160)。企業(yè)計劃系統(tǒng)12確保創(chuàng)建節(jié)點的任何特定版本的更新處理絕不 處于比創(chuàng)建該節(jié)點的任何在前版本的更新處理更高的層次。為了確定任何 給定節(jié)點的狀態(tài),不必檢査用于創(chuàng)建該節(jié)點的任何在前版本的任何更新處 理的狀態(tài),而僅檢查創(chuàng)建該節(jié)點的最近版本的更新處理。
當(dāng)?shù)谝粋€更新處理創(chuàng)建目標(biāo)節(jié)點的新版本時(162),更新處理模塊20 確定創(chuàng)建在前最近版本的更新處理的狀態(tài)(164)。如果第二個更新處理已完 成(166),則更新處理模塊20允許第一個更新處理繼續(xù)進(jìn)行下一個活動 (169)。如果該第二個更新處理還未完成(166),則更新處理模塊20建立排序 約束,從而相比第二個更新處理,不允許第一個更新處理計算DAG中更高 層的節(jié)點(168)。
圖8B是例示用于具有至少一個排序約束的更新處理的更新處理模 塊20的示例性操作的流程圖(170)。當(dāng)更新處理準(zhǔn)備調(diào)度另一組可用活動 時,其確定所有其可用活動的最低層測度(172)。其將具有附加排序約束的 任何更新處理的層次與該最低層測度進(jìn)行比較(174)。如果其最低層測度高 于任何這種更新處理的層次(176),則第一個更新處理在那時不調(diào)度任何新 的可用活動。取而代之的是,在具有附加排序約束的那些更新處理的層次 變化期間,第一個更新處理使其自身進(jìn)入"阻止"狀態(tài)(17S)。
當(dāng)具有附加排序約束的更新處理已完成其被調(diào)度的活動集并可以調(diào)度額外的活動,從而轉(zhuǎn)至更高層進(jìn)行任務(wù)執(zhí)行時,該更新處理查看是否有 被阻止的更新處理正等待其向前進(jìn)行。如果有其它的這種更新處理,則將 解除對它們的阻止,從而它們可以再次檢査它們的可用活動集,并且如果不再被約束,則調(diào)度額外的活動來執(zhí)行。當(dāng)解除對更新處理的阻止(180)時, 該更新處理可繼續(xù)進(jìn)行下一個較高層的活動(182)。如果另一個更新處理發(fā) 現(xiàn)其仍必須等待一些其它更新處理,則在等待另一個更新處理轉(zhuǎn)至DAG中 的更高層時,其可以再次使其自身進(jìn)入"阻止"狀態(tài)。
即使一些值集是通過仍在活動的更新處理計算出的,企業(yè)計劃系統(tǒng) 12也可以收集/報告一組彼此一致的值集。g卩,如果將是DAG基本模型一 部分的計算應(yīng)用到從查詢結(jié)果的最低層返回的實際值,則回答將與隨著査 詢返回的計算節(jié)點中的結(jié)果一致。
如上所述,每一個值集的實例具有從屬集的關(guān)聯(lián)列表。從屬集列表 記錄每一個值集的特定版本,所述值集被用于計算特定節(jié)點實例。為了識 別值集的一致集,更新處理模塊20首先將定位査詢所請求的DAG中的最 高層值集(即,距離葉層最遠(yuǎn)的查詢中的節(jié)點)。可以將它們認(rèn)為是該査詢的 根節(jié)點。更新處理模塊20發(fā)現(xiàn)這些值集中每一個的最近版本,其中對應(yīng)的 更新處理已經(jīng)過查詢中所請求的最高層。因為更新處理在DAG中的該點上 己計算出(或己完成執(zhí)行),則可知存在于該層或低于該層的值集與那些更新 處理一致。
更新處理模塊20從這些根節(jié)點(查詢的根節(jié)點)遵循從屬節(jié)點列表行 進(jìn)。這可能需要追蹤不是實際查詢部分的節(jié)點,以定位滿足査詢所需的值 集。遵循從屬集列表經(jīng)過從屬鏈行進(jìn)將導(dǎo)致其中所有值集與被識別出的(查 詢的)根節(jié)點一致的一組值集,從而它們是內(nèi)部一致的。
為了舉例說明,再次參考圖5所示的情形。對三個節(jié)點收益72、銷 售62和折扣°/。52的請求將節(jié)點72識別為査詢的根節(jié)點。該節(jié)點最近完成 的版本是節(jié)點72。節(jié)點72通過其從屬集列表連結(jié)到節(jié)點52和62的在前版 本,即52A和62A。這些版本與節(jié)點72的特定版本一致。因此,響應(yīng)該查 詢報告的版本是值集72、 52A和62A。
舉另一個例子,如果查詢請求銷售62、價格54和銷售單元56,則 那些節(jié)點的最近版本62B、 54B和56B并不形成一致集,因為僅將通過第二個更新處理得到的輸入數(shù)據(jù)(即對應(yīng)于54B的值集)并入節(jié)點62B,而第一 個更新處理還未將對應(yīng)于節(jié)點56B的值集并入銷售節(jié)點62。在這種情形下, 査詢的根節(jié)點是節(jié)點62。節(jié)點62的在前版本(即節(jié)點實例62A)以及節(jié)點54A 和56A通過查詢被返回,因為這些節(jié)點包括最近的一致集。
然而,如果査詢僅請求銷售62和價格54,則查詢返回這兩個節(jié)點的 最近版本(即,分別是節(jié)點62B和54B)。該査詢的根節(jié)點是節(jié)點62,并且 第二個更新處理己進(jìn)行到至少該層(2層),從而該節(jié)點組內(nèi)部一致。如果該 査詢請求節(jié)點54和56,則將返回這些節(jié)點的最近版本54B和56B,因為這 些節(jié)點并不以任何方式彼此從屬。
圖9是例示在響應(yīng)如上所述的查詢來報告一致集時更新處理模塊20 的示例性操作的流程圖(190)。更新處理模塊20識別出查詢中的最高層節(jié)點 或多個節(jié)點,或查詢的"根節(jié)點"(192)。更新處理模塊20確定最高層節(jié)點 的每一個值集的最近完成版本(194)。 S卩,更新處理模塊20發(fā)現(xiàn)每一個根節(jié) 點值集的最近版本,其中對應(yīng)的更新處理已經(jīng)過査詢中所請求的最高層。 因為對應(yīng)的更新處理己在DAG中的該點之上進(jìn)行計算(或已完成執(zhí)行),因 此該層上或低于該層的值集與更新處理一致。
更新處理模塊20識別出對最高層節(jié)點的最近完成版本從屬的所有節(jié) 點,其延伸至DAG的葉層(196)。為了實現(xiàn)這個目的,在一個實施例中,更 新處理模塊20遵循所有從屬節(jié)點的從屬集列表行進(jìn),直到已識別出DAG 中與最高層節(jié)點的最近完成版本相對應(yīng)的所有節(jié)點為止。更新處理模塊20 報告所識別出的與最高層節(jié)點的最近完成版本相對應(yīng)的從屬集(198)。因此 企業(yè)計劃系統(tǒng)12準(zhǔn)備將最近提交的值集并入DAG,同時允許進(jìn)行查詢以 返回彼此一致的值集。
企業(yè)計劃系統(tǒng)12可以標(biāo)記所選擇的節(jié)點實例的一致集,并通過在未 來的某一時間指定標(biāo)簽來識別及訪問那些節(jié)點實例。被標(biāo)記的一致集反映 在與標(biāo)簽關(guān)聯(lián)的特定時刻的數(shù)據(jù)存儲器狀態(tài)。在一個實施例中,與標(biāo)簽關(guān) 聯(lián)的該組節(jié)點實例可包含在關(guān)聯(lián)時刻數(shù)據(jù)存儲器內(nèi)的所有節(jié)點實例。
圖IO是例示在特定時刻橫跨數(shù)據(jù)存儲器創(chuàng)建節(jié)點實例被標(biāo)記的一致 集時更新處理模塊20的示例性操作的流程圖(200)。為了創(chuàng)建被標(biāo)記的一致 集,管理員16或其他用戶8創(chuàng)建期望的標(biāo)簽來描述被標(biāo)記的一致集(202)。更新處理模塊20識別出DAG中的一組根節(jié)點(204)。該組根節(jié)點是DAG 中不具有任何向夕卜(outgoing)邊的一組節(jié)點,艮卩,不用于作為DAG描述的任 何其它計算的輸入。
更新處理模塊20檢查DAG中的每一個根節(jié)點,以確定由完成的更 新處理產(chǎn)生的最近版本(206)。為了實現(xiàn)這個目的,更新處理模塊20識別每 一個根節(jié)點的最近版本,并發(fā)現(xiàn)創(chuàng)建該版本的更新處理。根據(jù)定義DAG的 規(guī)則,當(dāng)創(chuàng)建根節(jié)點的最近版本的更新處理完成時,作為該根節(jié)點輸入的 所有節(jié)點的對應(yīng)版本必須與該根節(jié)點的最近版本一致。更新處理模塊20將 所選擇的標(biāo)簽附加到該根節(jié)點的最近版本(208)。然后更新處理模塊20識別 (210)作為該根節(jié)點的最近版本輸入的對應(yīng)從屬集版本,所述根節(jié)點的56最 近版本包括對向下延伸至DAG的葉層的所有從屬節(jié)點。例如,在一個實施 例中,更新處理模塊20遵循從屬集列表行進(jìn),直到識別出DAG中與該根 節(jié)點的最近版本相對應(yīng)的所有節(jié)點為止(212)。更新處理模塊20將DAG中 與每一個根節(jié)點的最近完成版本相對應(yīng)的所有從屬節(jié)點的識別出的版本進(jìn) 行標(biāo)記(214)。
在一個實施例中,如果在該處理中識別出多于一個的特定節(jié)點實例 (可能發(fā)生在節(jié)點被輸入到多個其它節(jié)點時),則選擇該節(jié)點的最近實例。從 所有根節(jié)點重復(fù)沿著從屬關(guān)系列舉數(shù)據(jù)存儲器內(nèi)的所有節(jié)點實例。從而所 識別出的整組節(jié)點實例與標(biāo)簽關(guān)聯(lián)。因此企業(yè)計劃系統(tǒng)12為用戶提供訪問 數(shù)據(jù)一致集的能力,該數(shù)據(jù)一致集反映在與標(biāo)簽關(guān)聯(lián)的特定時刻數(shù)據(jù)存儲 器的狀態(tài)。
在圖IO所示的實施例中,被標(biāo)記的一致集反映在特定時刻數(shù)據(jù)存儲 器的狀態(tài),標(biāo)簽在該特定時刻被創(chuàng)建。在另一個實施例中,用戶6可指定 標(biāo)簽應(yīng)反映的時刻。在這種實施例中,標(biāo)簽?zāi)K28可以在指定的時期標(biāo)記 每一個根節(jié)點的最近完成版本,然后在指定的時期標(biāo)記與最近完成的版本 一致的所有輸入節(jié)點的版本。
當(dāng)用戶繼續(xù)添加新的數(shù)據(jù)到企業(yè)計劃系統(tǒng)12時,節(jié)點的較新版本將 取代較舊的版本。在整個處理中,在以下意義上數(shù)據(jù)存儲器中的某些節(jié)點 實例將變得"陳舊"所述節(jié)點實例既不是最近一致集的部分,不是用戶在 將來的某些時間可能引用的被標(biāo)記集的部分,也不是當(dāng)前執(zhí)行的更新處理部分。更新處理模塊20識別這些"陳舊的"節(jié)點實例,從而可以從數(shù)據(jù)存 儲器14除去這些節(jié)點實例。以此方式,可以從該存儲除去不再需要的節(jié)點 實例和任何關(guān)聯(lián)關(guān)系以及保持這些節(jié)點所需的其它開銷,從而它們占據(jù)的 空間可以由企業(yè)計劃系統(tǒng)12重新利用。
為了確定哪些節(jié)點實例是陳舊的,并且可以從數(shù)據(jù)存儲器中刪除它 們,企業(yè)計劃系統(tǒng)12識別出應(yīng)被保留的節(jié)點。應(yīng)被保留的節(jié)點實例可以包 括例如最近一致集、任何被標(biāo)記的集以及比最近一致集更新(即更近)的任何 節(jié)點實例。后一節(jié)點實例組應(yīng)被保留,因為它們的關(guān)聯(lián)更新處理仍處于將 它們關(guān)聯(lián)的最近提交的值集并入數(shù)據(jù)存儲器的處理中。被標(biāo)記的集和最近 一致集應(yīng)被保留,因為它們可能將在某個未來時間由查詢引用。
圖11是例示更新處理模塊20從數(shù)據(jù)存儲器中除去陳舊實例的示例 性操作的流程圖(250)。為了確定可以從數(shù)據(jù)存儲器14中除去的一組陳舊實 例,更新處理模塊20可識別出應(yīng)被保留的那些節(jié)點實例,并識別出陳舊的 任何剩余實例。為此,更新處理模塊20可識別出最近的一致集(252)。用于 識別最近一致集的過程類似于上述關(guān)于圖10用于創(chuàng)建被標(biāo)記的一致集的過 程。更新處理模塊20還識別與數(shù)據(jù)存儲器14關(guān)聯(lián)的所有被標(biāo)記的一致集 (254)。更新處理模塊20還可識別比最近的一致數(shù)據(jù)集中的節(jié)點實例更新的 任何剩余節(jié)點實例??梢詫⒉皇禽^新的節(jié)點實例除去。換句話說,更新處 理模塊20可識別出通過當(dāng)前執(zhí)行的更新處理(即,尚未完成的更新處理)創(chuàng) 建的任何剩余節(jié)點實例(256)。接著更新處理模塊20可將任何剩余的節(jié)點實 例識別為"陳舊的"(258)。
本文中描述的更新處理技術(shù)可以以硬件、軟件、固件或其任何組合 實現(xiàn)。本發(fā)明可被體現(xiàn)為計算機(jī)可讀介質(zhì),該計算機(jī)可讀介質(zhì)包括用于使 可編程處理器執(zhí)行上述方法的指令。例如,該計算機(jī)可讀介質(zhì)可包括隨機(jī) 存取存儲器(RAM)、只讀存儲器(ROM)、非易失隨機(jī)存取存儲器(NVRAM)、 電可擦可編程只讀存儲器(EEPROM)、閃存、磁或光學(xué)媒體等??梢詫⑺?指令實現(xiàn)為一個或多個軟件模塊,所述軟件模塊可以由它們自身或與其它 軟件結(jié)合來執(zhí)行。
所述指令和介質(zhì)并不必與任何特定計算機(jī)或其它裝置相關(guān)聯(lián),而是 可以由各種通用或?qū)S脵C(jī)器來實現(xiàn)。所述指令可以分布在兩個或更多個介質(zhì)之間并且可以由兩個或更多個機(jī)器來執(zhí)行。所述機(jī)器可以直接彼此耦合,或通過網(wǎng)絡(luò)耦合,所述網(wǎng)絡(luò)例如為局域網(wǎng)(LAN)或全球網(wǎng)(例如因特網(wǎng))。
本發(fā)明可被體現(xiàn)為一個或多個設(shè)備,所述設(shè)備包括用于實現(xiàn)本文所 述功能或方法的邏輯電路。該邏輯電路可包括通用或?qū)S玫目删幊烫幚砥鳎?例如微控制器、微處理器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)等等。
已經(jīng)描述了本發(fā)明的各種實施例。這些和其它實施例均落入所附的 權(quán)利要求書的范圍內(nèi)。
權(quán)利要求
1、一種方法,包括根據(jù)用于企業(yè)計劃系統(tǒng)的計算模型,在數(shù)據(jù)存儲器中存儲企業(yè)計劃數(shù)據(jù),其中,所述計算模型包括多個分層排列的節(jié)點,以及其中,每一個節(jié)點具有對應(yīng)的層測度;接收由用戶提交的與所述計算模型中的葉節(jié)點相對應(yīng)的值集;啟動更新處理,以將所提交的值集累積到所述數(shù)據(jù)存儲器中,其中,所述更新處理包括一組活動,每一個所述活動對應(yīng)于所述計算模型中的一個節(jié)點;確定獨立的可用活動集的子集;調(diào)度具有最低層測度的所有可用活動;以及執(zhí)行所調(diào)度的活動。
2、 如權(quán)利要求l所述的方法,其中,執(zhí)行所調(diào)度的活動包括 完成調(diào)度的活動,以創(chuàng)建所述計算模型中對應(yīng)節(jié)點的更新值集; 添加額外的活動到所述可用活動集中,所述更新值集是所述額外的活動的從屬集。
3、 如權(quán)利要求2所述的方法,還包括為所述更新值集指定版本,并在 所述數(shù)據(jù)存儲器中存儲所述更新值集。
4、 如權(quán)利要求2所述的方法,還包括保持所述從屬集的版本列表,所 述從屬集是到所述更新值集的輸入。
5、 如權(quán)利要求2所述的方法,還包括 確定是否存在任何剩余的被調(diào)度的活動;以及確定所述剩余的被調(diào)度的活動集的子集,所述剩余的被調(diào)度的活動是 獨立的。
6、 如權(quán)利要求5所述的方法,還包括 確定是否存在任何剩余的可用活動; 調(diào)度所述剩余的可用活動。
7、 如權(quán)利要求l所述的方法,還包括啟動多個更新處理,所述多個更 新處理中的每一個對應(yīng)于多個被提交的值集中的一個值集。
8、 如權(quán)利要求7所述的方法,還包括識別指定給第一個更新處理的活動,所述第一個更新處理可能會與第 二個更新處理發(fā)生更新沖突,其中所述第一個更新處理具有關(guān)聯(lián)的較高層 測度,而所述第二個更新處理具有關(guān)聯(lián)的較低層測度;以及將指定給所述第一個更新處理的所述活動傳遞給所述第二個更新處理。
9、 如權(quán)利要求l所述的方法,還包括響應(yīng)于查詢,識別所述計算模型 中的節(jié)點的一致版本。
10、 如權(quán)利要求9所述的方法,其中,識別節(jié)點的一致版本還包括 識別所述查詢中的最高層節(jié)點; 確定所述最高層節(jié)點的最近完成版本;以及識別與所述最高層節(jié)點的最近完成版本相對應(yīng)的所述最高層節(jié)點的從 屬版本。
11、 如權(quán)利要求1所述的方法,還包括標(biāo)記所述計算模型中所有節(jié)點 的一致版本。
12、 如權(quán)利要求ll所述的方法,其中,標(biāo)記一致版本包括 選擇標(biāo)簽;識別所述計算模型中的根節(jié)點; 確定每一個根節(jié)點的最近完成版本;識別與每一個根節(jié)點關(guān)聯(lián)的從屬版本,所述每一個根節(jié)點對應(yīng)于關(guān)聯(lián) 根節(jié)點的最近完成版本;使標(biāo)簽關(guān)聯(lián)于所述根節(jié)點以及所識別出的從屬版本。
13、 如權(quán)利要求1所述的方法,還包括刪除所述計算模型中的節(jié)點的 陳舊版本。
14、 如權(quán)利要求13所述的方法,其中,刪除節(jié)點的陳舊版本包括 識別所述計算模型中值集的最近一致集; 識別所述計算模型中任何被標(biāo)記的一致集; 識別由進(jìn)行中的更新處理創(chuàng)建的值集版本;以及 刪除所述計算模型中值集的任何剩余版本。
15、 如權(quán)利要求1所述的方法,其中,所述計算模型包括有向非循環(huán)圖。
16、 一種系統(tǒng),包括企業(yè)計劃系統(tǒng),用于根據(jù)計算模型為一組企業(yè)用戶執(zhí)行企業(yè)計劃會話, 其中,所述計算模型定義分層排列的節(jié)點;以及更新處理管理器,其啟動更新處理以將用戶提交的值集累積入數(shù)據(jù)存 儲器中,其中,每一個更新處理包括與所述計算模型中的節(jié)點相對應(yīng)的一 組活動;其中,所述更新處理管理器還識別在所述更新處理之間潛在的沖突活動;其中,所述更新處理管理器響應(yīng)于査詢,識別所述計算模型中的節(jié)點 的一致版本。
17、 如權(quán)利要求16所述的系統(tǒng),其中,所述計算模型中的每一個節(jié)點 具有關(guān)聯(lián)的層測度,以及其中,所述更新處理管理器調(diào)度具有確定的最低 層測度的用于執(zhí)行的所有可用活動。
18、 如權(quán)利要求16所述的系統(tǒng),其中,所述更新處理管理器標(biāo)記所述 計算模型中的所有節(jié)點的一致版本。
19、 如權(quán)利要求16所述的系統(tǒng),其中,所述更新處理管理器刪除所述 計算模型中的值集的陳舊版本。
20、 如權(quán)利要求16所述的系統(tǒng),其中,所述更新處理管理器識別指定 給第一個更新處理的活動,所述第一個更新處理可能與第二個更新處理發(fā) 生更新沖突,其中,所述第一個更新處理具有關(guān)聯(lián)的較高層測度,而所述 第二個更新處理具有關(guān)聯(lián)的較低層測度,并且將指定給所述第一個更新處 理的所述活動傳遞給所述第二個更新處理。
21、 如權(quán)利要求16所述的系統(tǒng),其中,所述計算模型包括有向非循環(huán)圖。
全文摘要
企業(yè)計劃系統(tǒng)(12)以如下方式累積最近提交的計劃數(shù)據(jù)最小化數(shù)據(jù)庫(14)爭用,允許進(jìn)行中的計劃數(shù)據(jù)輸入,并允許在累積進(jìn)行時對該數(shù)據(jù)進(jìn)行查詢以返回一致結(jié)果。“更新處理”是使整個數(shù)據(jù)存儲器以最近提交的值集更新所需的活動集。所述活動可以與任意數(shù)目的其它提交的值集變化(其它更新處理)交織。企業(yè)計劃系統(tǒng)(12)還標(biāo)記一致集并除去值集的陳舊版本。
文檔編號G06F17/30GK101273355SQ200680035601
公開日2008年9月24日 申請日期2006年9月21日 優(yōu)先權(quán)日2005年9月27日
發(fā)明者J·E·帕特森 申請人:科格洛斯公司