亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

具有快照隔離的基于約束的一致性的制作方法

文檔序號(hào):6547424閱讀:243來(lái)源:國(guó)知局
具有快照隔離的基于約束的一致性的制作方法
【專利摘要】本發(fā)明公開(kāi)了具有快照隔離的基于約束的一致性。通過(guò)識(shí)別對(duì)于正確應(yīng)用行為而言需要滿足的約束來(lái)提供并發(fā)原子事務(wù)的高效處理。利用這些所識(shí)別的約束,用于事務(wù)的提交處理于是可以引用約束,以查看在所述約束的情況下提交當(dāng)前事務(wù)是否引起問(wèn)題。如果存在與所述約束的沖突,則事務(wù)中止。如果不存在與所述約束的沖突,則事務(wù)提交。
【專利說(shuō)明】具有快照隔離的基于約束的一致性

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及事務(wù)處理。

【背景技術(shù)】
[0002]原子事務(wù)經(jīng)常用于簡(jiǎn)化并發(fā)和容錯(cuò)編程。如果事務(wù)是不可分的,則其為原子的,以使得用以執(zhí)行事務(wù)的嘗試可能僅有兩種可能的結(jié)果:1)事務(wù)的所有部分發(fā)生(事務(wù)提交);或者2)事務(wù)的各部分不發(fā)生(事務(wù)中止)。因此,對(duì)于原子事務(wù)而言,不可能有事務(wù)的部分執(zhí)行發(fā)生。例如,如果事務(wù)是將資金從一個(gè)賬戶轉(zhuǎn)移到另一賬戶,則高度期望該事務(wù)是原子的,以避免信貸應(yīng)用于一個(gè)賬戶而在另一賬戶中沒(méi)有對(duì)應(yīng)借記的可能性(或反之亦然)。在更一般的編程情況下,由于原子事物而得到類似的優(yōu)點(diǎn)。
[0003]可以識(shí)別用于提供原子事務(wù)的兩種基本方法:1)就地更新(in-place update)和
2)陰影拷貝(shadow copy)。前者通常通過(guò)鎖定以防止并發(fā)更新以及撤銷(undo)日志來(lái)實(shí)現(xiàn),以能夠在事務(wù)中止的情況下撤銷改變。這還可以替代使用鎖定而通過(guò)如果另一事務(wù)寫(xiě)入該事務(wù)正在寫(xiě)入的數(shù)據(jù)(所謂的寫(xiě)入-寫(xiě)入沖突)或?qū)懭朐撌聞?wù)正在讀取的數(shù)據(jù)(所謂的讀取-寫(xiě)入沖突)則中止事務(wù)來(lái)開(kāi)放式地實(shí)現(xiàn)。
[0004]歷史上直到最近,考慮到大多數(shù)事務(wù)數(shù)據(jù)已經(jīng)是基于盤的,就地更新因?yàn)楸3直P布局的益處而受到偏愛(ài)。然而,考慮到在很多應(yīng)用中讀取比寫(xiě)入占優(yōu)勢(shì),讀取鎖定是明顯的開(kāi)銷。此外,讀取鎖定數(shù)據(jù)意味著對(duì)于被鎖定數(shù)據(jù)的更新被延遲,這實(shí)際意味著如果對(duì)應(yīng)的真實(shí)世界值在其被鎖定的時(shí)間期間改變,則其潛在地與真實(shí)世界不一致而結(jié)束。在某種意義上,這意味著其對(duì)于實(shí)現(xiàn)內(nèi)部一致性的關(guān)注可能導(dǎo)致與外部環(huán)境的不一致性??紤]到讀取-寫(xiě)入沖突的普遍性(prevalence),就地更新的開(kāi)放式形式可能由于過(guò)度的中止率而受損。
[0005]在移動(dòng)到存儲(chǔ)器中的數(shù)據(jù)庫(kù)的情況下,陰影拷貝方法變得比以前更有吸引力。在此,更新事務(wù)使得數(shù)據(jù)的拷貝被更新、作出修改并且然后原子地更新對(duì)該數(shù)據(jù)的根引用(或指針)以引用新的(先前陰影)拷貝。進(jìn)一步采用該方法,事務(wù)可以從甚至其恰正在讀取的數(shù)據(jù)的快照(即不可變的拷貝)執(zhí)行。該方法被稱為快照隔離(SI)。該方法提供具有不由于就地更新事務(wù)的讀取-寫(xiě)入沖突而受損的附加明顯益處的常規(guī)串行化事務(wù)的大多數(shù)性質(zhì),其中就地更新事務(wù)的讀取-寫(xiě)入沖突可能招致明顯的鎖定開(kāi)銷或者在開(kāi)放式實(shí)現(xiàn)的情況下增加中止率。
[0006]陰影拷貝在分布式實(shí)現(xiàn)中可能是有吸引力的,因?yàn)槠浣?jīng)常需要在處理執(zhí)行事務(wù)時(shí)復(fù)制數(shù)據(jù),由此提供數(shù)據(jù)的拷貝或快照以提供高效的本地存取。在此情況下,SI的拷貝開(kāi)銷由于保存該拷貝的存取提供本地處理而被有效地消除,或者反過(guò)來(lái),本地拷貝的創(chuàng)建已經(jīng)有效地負(fù)擔(dān)了 SI事務(wù)機(jī)制所要求的快照的成本。該本地拷貝還可以減少處理面臨包含狀態(tài)的主拷貝的處理的失效和重啟,因?yàn)槠淇梢岳闷浔镜乜煺斩^續(xù)操作。
[0007]遺憾的是,在所有的執(zhí)行產(chǎn)生好像以某種順序的次序被執(zhí)行那樣的相同結(jié)果的意義上,SI不提供順序一致性(或者可串行化(serializability),如其在數(shù)據(jù)庫(kù)世界中被描述的那樣)。因?yàn)樗^的寫(xiě)入偏移問(wèn)題,所以出現(xiàn)折中行為??梢酝ㄟ^(guò)考慮期待事務(wù)應(yīng)用被保持的簡(jiǎn)單斷言約束來(lái)圖解該問(wèn)題。例如,考慮斷言約束:
39 > b + c;
其中,分離的事務(wù)Tb和Tc可以分別更新b和C。如果b和C初始為10,則Tb可以將b更新為20,將c的快照看作10,而Tc可以將c更新為20,類似地將b的快照看作10。因?yàn)闆](méi)有寫(xiě)入-寫(xiě)入沖突,所以這兩個(gè)事務(wù)可以均在SI模型中并發(fā)地提交,而這樣做引起約束被違反。
[0008]已經(jīng)對(duì)該問(wèn)題提出了各種解決方案,包括確保SI事務(wù)的嚴(yán)格的可串行化,但這些或是在事務(wù)處理自身上導(dǎo)致過(guò)度開(kāi)銷或是由于將事務(wù)的中止率增加得遠(yuǎn)高于嚴(yán)格所需而導(dǎo)致過(guò)度開(kāi)銷。
[0009]所需要的是一種在保持SI事務(wù)的應(yīng)用和實(shí)現(xiàn)益處的同時(shí)確保正確應(yīng)用行為的手段。


【發(fā)明內(nèi)容】

[0010]本方法基于識(shí)別對(duì)于正確應(yīng)用行為而言需要被滿足的約束。在這些約束被識(shí)別的情況下,用于事務(wù)的提交處理可以然后引用約束并且引用并發(fā)更新以查看提交當(dāng)前事務(wù)是否在有約束的情況下引起問(wèn)題。如果存在與約束的沖突,則事務(wù)中止。如果不存在與約束的沖突,則事務(wù)提交。
[0011]與常規(guī)的快照隔離相比,因?yàn)楸痉椒ń鉀Q了常規(guī)快照隔離的寫(xiě)入偏移問(wèn)題,所以其提供優(yōu)良的語(yǔ)義。
[0012]與對(duì)于SI (例如可串行化的SI)的寫(xiě)入偏移問(wèn)題的常規(guī)修復(fù)相比,本方法可以提供更高的效率(例如減少的事務(wù)開(kāi)銷和/或更少的不必要事務(wù)中止)。例如,如果對(duì)數(shù)據(jù)的要求被表達(dá)為可以作為提交處理的一部分而被檢查的約束,則可以在不中止事務(wù)的情況下解決很多明顯的寫(xiě)入-寫(xiě)入沖突。

【專利附圖】

【附圖說(shuō)明】
[0013]圖1示出若干事務(wù)的例示性時(shí)間線。
[0014]圖2示出根據(jù)并發(fā)更新來(lái)更新當(dāng)前事務(wù)的快照以提供被合并的快照的示例。
[0015]圖3示出根據(jù)當(dāng)前事務(wù)所執(zhí)行的操作來(lái)更新快照的示例。
[0016]圖4A提供事務(wù)、斷言約束和更新約束的例示性示例。
[0017]圖4B是與圖4A的示例有關(guān)的圖。
[0018]圖5示出按輪次執(zhí)行事務(wù)處理的示例。

【具體實(shí)施方式】
[0019]介紹
我們通過(guò)以下操作來(lái)提供具有快照隔離(SI)事務(wù)的正確應(yīng)用行為:
1)明確地指定對(duì)隱含數(shù)據(jù)模型的約束;
2)如果數(shù)據(jù)模型保持這些約束,則設(shè)計(jì)應(yīng)用處理是正確的;
3)作為事務(wù)提交處理的一部分對(duì)約束進(jìn)行檢查以確保每個(gè)約束由事務(wù)保持,或者另外如果這并未被實(shí)現(xiàn)則中止事務(wù)。
[0020]如果所有這樣的約束被明確地指定,則基礎(chǔ)架構(gòu)可以確保違反這樣的約束的事務(wù)被中止。
[0021]我們認(rèn)為,如下面那樣,應(yīng)用可以被設(shè)計(jì)為如果對(duì)于其數(shù)據(jù)模型所要求的約束被保持則正確地操作。首先,每個(gè)應(yīng)用事務(wù)被實(shí)現(xiàn)為讀取并且寫(xiě)入應(yīng)用狀態(tài)的一系列指令,即其數(shù)據(jù)模型。在所有的事務(wù)模型中,每個(gè)應(yīng)用事務(wù)除了其通過(guò)該數(shù)據(jù)模型的交互之外獨(dú)立并且并發(fā)地執(zhí)行。該應(yīng)用處理關(guān)于用于其正確執(zhí)行的數(shù)據(jù)模型作出一定的假設(shè)??梢园凑赵趹?yīng)用事務(wù)的執(zhí)行期間數(shù)據(jù)模型的將要為真的約束、聲明來(lái)捕獲這些假設(shè)。因此,如果應(yīng)用相對(duì)于這些約束是在過(guò)程上是正確的,并且數(shù)據(jù)模型約束在每個(gè)事務(wù)的執(zhí)行期間為真,則應(yīng)用正確地執(zhí)行。
[0022]要求可串行化的常規(guī)方法自身并不確保應(yīng)用特定的約束成立。其僅僅是確保如果事務(wù)的命令式(imperative)代碼當(dāng)被執(zhí)行為串行事務(wù)時(shí)維持約束,則因?yàn)閳?zhí)行是可串行化的,即等同于串行執(zhí)行,所以該代碼在由多個(gè)事務(wù)并發(fā)地執(zhí)行時(shí)也維持約束的(笨拙)方式。
[0023]與此對(duì)比,在本工作中,約束被明確地聲明,并且然后運(yùn)用約束特定的手段以確保它們成立,而不是強(qiáng)加這種通用次序要求(這經(jīng)常相當(dāng)于對(duì)于寫(xiě)入偏移的問(wèn)題的過(guò)度破壞的解決方案)。
[0024]在一些情況下,輸入源代碼包括約束的說(shuō)明。在這樣的情況下,可以容易地自動(dòng)生成對(duì)應(yīng)的約束檢查代碼。如果輸入源代碼不包括其約束的明確說(shuō)明,則經(jīng)由自動(dòng)程序分析自動(dòng)生成對(duì)應(yīng)的約束檢查代碼可以是可能的。然而,實(shí)際上,很有可能用戶將需要為不具有明確約束的輸入源代碼提供約束檢查代碼。
[0025]利用SI事務(wù)確保數(shù)據(jù)模型約束通過(guò)考慮對(duì)于寫(xiě)入偏移的常規(guī)解決方案,可以展示出使用SI來(lái)確保約束成立的可行性。
[0026]常規(guī)解決方案有效地將每個(gè)約束具體化(materialize)為由更新該約束中的變量的任何事務(wù)所更新的變量。例如,使用更早些的示例,將會(huì)存在比如具有所構(gòu)造的名稱“約束一(39>b+c)”的變量,其作為更新b或c的部分而遞增。結(jié)果,影響同一約束的任意兩個(gè)并發(fā)事務(wù)將具有寫(xiě)入-寫(xiě)入沖突,并且它們中的至少一個(gè)將被SI事務(wù)機(jī)制中止。因此,對(duì)于事務(wù)機(jī)制而言可行的是通過(guò)這種構(gòu)造來(lái)自動(dòng)確保這些約束在每個(gè)事務(wù)期間成立。
[0027]注意,在很多情況下,該方法導(dǎo)致不必要的中止。例如,繼續(xù)我們更早些的示例,如果并發(fā)地更新a和b而它們的和仍然還小于39,則即使將二者都提交也仍將維持約束,但因?yàn)樵诩s束變量上的寫(xiě)入-寫(xiě)入沖突,所以事務(wù)中的一個(gè)被不必要地中止。此外,在最壞的情況下,這些SI事務(wù)的寫(xiě)入集合可能被擴(kuò)展從而所有事務(wù)具有重疊的寫(xiě)入集合,強(qiáng)制這些事務(wù)的順序執(zhí)行。實(shí)際上,這種構(gòu)造擴(kuò)展寫(xiě)入集合以補(bǔ)償讀取-寫(xiě)入沖突的檢測(cè)的缺失。
[0028]本方法因此提供一種提交事務(wù)的方法,該方法基于約束的實(shí)際語(yǔ)義而允許更大的并發(fā)和更少的中止(與在所有情況下宣稱寫(xiě)入-寫(xiě)入沖突相反)。
[0029]基本的想法是使這些約束的知識(shí)在提交時(shí)間可用,以識(shí)別在該時(shí)間的任意沖突,嘗試解決這些沖突,并且在假設(shè)事務(wù)不會(huì)出于其它原因(諸如資源限制)而被中止的情況下,只有這些沖突不能被解決才中止。
[0030]在對(duì)該方法進(jìn)一步詳述之前,我們首先澄清一些術(shù)語(yǔ)。并發(fā)事務(wù)是在當(dāng)前事務(wù)的開(kāi)始時(shí)間之后并且在該事務(wù)的目標(biāo)提交時(shí)間之前提交給數(shù)據(jù)模型的事務(wù)。并發(fā)更新是這樣的并發(fā)事務(wù)所執(zhí)行的更新。圖1提供一些示例以圖解該術(shù)語(yǔ)。在此,TO是在時(shí)間線上示出的當(dāng)前事務(wù)。事務(wù)Tl和T2與TO并發(fā),而事務(wù)T3和T4并不與TO并發(fā)。注意,并發(fā)的定義與哪個(gè)事務(wù)被指明為當(dāng)前事務(wù)有關(guān)。例如,如果T2被當(dāng)作是當(dāng)前事務(wù),則TO并不與T2并發(fā)。
[0031]更具體地說(shuō),當(dāng)前事務(wù)TO具有開(kāi)始時(shí)間t0s和當(dāng)前目標(biāo)提交時(shí)間t0e。類似地,事務(wù)T1、T2、T3和Τ4具有對(duì)應(yīng)的開(kāi)始時(shí)間tls、t2s、t3s和t4s,并且具有對(duì)應(yīng)的結(jié)束時(shí)間tle、七26336和t4e(此時(shí)事務(wù)要么提交要么中止)。因?yàn)閠0s < tle < t0e并且t0s < t2e < t0e,所以Tl和T2與當(dāng)前事務(wù)TO并發(fā)。因此,tle和t2e是在當(dāng)前開(kāi)始時(shí)間(tcs)之后并且在當(dāng)前目標(biāo)提交時(shí)間()之前的中間時(shí)間。
[0032]示例性事務(wù)處理方法包括下面的步驟:
I)提供與數(shù)據(jù)模型中的數(shù)據(jù)有關(guān)的約束集合。
[0033]2)執(zhí)行至少兩個(gè)事務(wù),其中,所述事務(wù)中的每一個(gè)具有對(duì)應(yīng)的開(kāi)始時(shí)間,并且依賴于從開(kāi)始時(shí)間之時(shí)起所述數(shù)據(jù)模型的一部分或全部的對(duì)應(yīng)快照。在圖1上,這些快照被標(biāo)記為S0、S1、S2、S3和S4,分別與事務(wù)T0、T1、T2、T3和Τ4對(duì)應(yīng)。
[0034]3)針對(duì)如上面所定義的當(dāng)前事務(wù)以及一個(gè)或更多個(gè)并發(fā)事務(wù),執(zhí)行提交處理檢查,提交處理檢查自動(dòng)確定是否可以與至少來(lái)自a)當(dāng)前事務(wù)的快照jPb)并發(fā)事務(wù)對(duì)數(shù)據(jù)模型所作的改變這兩者的約束集合一致地提交當(dāng)前事務(wù)。
[0035]4)如果能夠使得當(dāng)前事物與所述約束集合一致,則自動(dòng)地提交當(dāng)前事物。以及 5)如果不能使得當(dāng)前事物與所述約束集合一致,則自動(dòng)地中止當(dāng)前事物。在此,步驟4
和5依賴于步驟3的提交處理檢查的結(jié)果。
[0036]斷言約束和讀取-寫(xiě)入集合
“斷言”約束檢查給定的條件為真,并且如果并非如此,則強(qiáng)制中止事務(wù)。
[0037]在該方法中,對(duì)照其它并發(fā)更新來(lái)檢查每個(gè)斷言約束,如果使用當(dāng)前值(即在這些更新之后)以及在當(dāng)前事務(wù)中被更新的那些值違反斷言約束,則中止當(dāng)前事務(wù)。用于斷言約束的讀取集合是需要被讀取以估計(jì)約束表達(dá)式(即確定其是否為真)的變量集合。如果當(dāng)前事務(wù)已經(jīng)寫(xiě)入被指定為約束的一部分的至少一個(gè)變量(X),則檢查于是需要確定任何并發(fā)事務(wù)是否已經(jīng)改變與約束關(guān)聯(lián)的任何其它變量。這可以被當(dāng)作是讀取-寫(xiě)入沖突檢查。如果一個(gè)或更多個(gè)這樣的變量已經(jīng)被并發(fā)事務(wù)修改,則約束檢查需要利用這些新提交的值以及X的被更新的但未提交的值來(lái)重新估計(jì)約束,以驗(yàn)證約束仍然成立。
[0038]實(shí)際上,可以看到,在當(dāng)前事物的快照被提交以生成被合并的快照之前,將并發(fā)更新應(yīng)用于當(dāng)前事務(wù)的快照。對(duì)照數(shù)據(jù)模型狀態(tài)的這種被合并的快照來(lái)檢查斷言約束。圖2示出該情況的示例。在此,事務(wù)Tl的并發(fā)更新被應(yīng)用于初始快照SO以生成第一被合并的快照Sml(其可以替代初始快照S0)。稍后,事務(wù)T2的并發(fā)更新被應(yīng)用于被合并的快照Sml以生成第二被合并的快照Sm2(其可以替代更早的被合并的快照Sml)。針對(duì)當(dāng)前事務(wù)TO的提交處理檢查可以引用快照Sm2,并且由此包括來(lái)自事務(wù)Tl和T2的并發(fā)更新的效果。提交處理檢查可以包括使用被合并的快照重新估計(jì)斷言約束。如果生成若干個(gè)被合并的快照,則運(yùn)用最新近的快照。為了讓圖解清楚,圖2的示例示出分離的被合并的快照。替換地,在提交處理的時(shí)間生成單個(gè)被合并的快照,其包括對(duì)從如上面那樣的約束確定的讀取集合中的變量的所有并發(fā)更新的效果。對(duì)于任一種替換,這樣的被合并的快照通過(guò)更新更早的快照來(lái)把被提交的歸因于并發(fā)事物的改變考慮在內(nèi),而不使當(dāng)前事務(wù)由于并發(fā)事務(wù)而面臨未被提交的改變。
[0039]圖3示出關(guān)于該主題的變形,其中,當(dāng)前事務(wù)TO根據(jù)其執(zhí)行的操作來(lái)更新其快照,以提供被更新的快照用于提交處理檢查。在該示例中,當(dāng)前事務(wù)TO將操作01、02和03按順序應(yīng)用于初始快照S0,以分別提供被更新的快照S1、S2和S3。提交處理檢查可以引用被更新的快照S3以確定是否提交當(dāng)前事務(wù)T0。如果TO被中止,則在被更新的快照S1、S2和S3中作出的改變從不會(huì)得以被提交到主數(shù)據(jù)模型,由此維持原子事務(wù)的期望的性質(zhì)。為了讓圖解清楚,圖3的示例示出分離的被更新的快照。替換地,在提交處理的時(shí)間生成單個(gè)被更新的快照,其包括當(dāng)前事務(wù)的所有操作的效果。
[0040]可以從重做(redo)日志確定并發(fā)更新,如常規(guī)實(shí)踐那樣。
[0041]在實(shí)施例中,可以通過(guò)將當(dāng)前事務(wù)快照與當(dāng)前所提交的數(shù)據(jù)模型狀態(tài)關(guān)于指示并發(fā)更新的差異(由當(dāng)前事務(wù)中的更新引起的差異除外)進(jìn)行比較來(lái)確定并發(fā)更新。
[0042]在實(shí)施例中,可以通過(guò)將當(dāng)前所提交的數(shù)據(jù)模型狀態(tài)與從當(dāng)前事務(wù)的開(kāi)始時(shí)間之時(shí)起所提交的狀態(tài)的未被修改的快照關(guān)于指示并發(fā)更新的差異進(jìn)行比較,從而確定并發(fā)更新。
[0043]在實(shí)施例中,如更早些所描述的那樣,可以通過(guò)按每個(gè)約束對(duì)變量進(jìn)行具體化并且進(jìn)行更新來(lái)檢測(cè)并發(fā)的潛在沖突更新,但是如上面那樣使用在這樣的約束變量上的寫(xiě)入-寫(xiě)入沖突的指示來(lái)觸發(fā)約束解決處理,而不是立即中止當(dāng)前事務(wù)。
[0044]利用上面的方法,兩個(gè)并發(fā)事務(wù)可以更新影響同一約束并且仍然提交的兩個(gè)屬性。例如,繼續(xù)更早些的示例,如果更新b的事務(wù)Tb與更新c的當(dāng)前事務(wù)Tc并發(fā)地運(yùn)行,則在Tc的提交處理時(shí),檢測(cè)b的并發(fā)更新而觸發(fā)約束的重新估計(jì)。如果被更新的b和c的值仍然小于上限39,則當(dāng)前事務(wù)可以提交,否則其被中止。因此,在該方法中,只有在邏輯上必須由斷言約束來(lái)中止事務(wù)時(shí)才這樣做。
[0045]在實(shí)施例中,事務(wù)機(jī)制可以針對(duì)一些約束選擇該重新估計(jì)約束的方法,而對(duì)于其它約束使用常規(guī)的“約束變量”方法(例如,如果約束對(duì)于提交處理而言被認(rèn)為執(zhí)行起來(lái)太昂貴或困難)。在所期待的情況下,大多數(shù)約束是相對(duì)簡(jiǎn)單的。因此,與單純使用常規(guī)方法相比,僅將該約束分析方法應(yīng)用于簡(jiǎn)單的約束、否則仍借助于常規(guī)的“約束變量”的構(gòu)造的實(shí)施例應(yīng)會(huì)在使開(kāi)發(fā)復(fù)雜度最小化的同時(shí)提供明顯的性能改進(jìn)。
[0046]更新約束
另一類別的約束是“更新約束”,其中,某個(gè)屬性的值是由約束來(lái)確定的,并且因此當(dāng)約束的參數(shù)值改變時(shí)被更新。更新約束的示例是“等式約束”,其中所確定的屬性被指定為等同于某個(gè)表達(dá)式。例如:al = a0 + I;
意思是al被約束為等同于a0加I的值。利用更新約束,實(shí)現(xiàn)引起所確定的屬性(在此情況下即al)在約束的自變量(在此情況下即a0)改變時(shí)被更新。
[0047]在2008 年 05 月 21 日提交的標(biāo)題為 “Notificat1n-based constraint settranslat1n to imperative execut1n”、案卷號(hào) 0TS-102/US 的美國(guó)專利申請(qǐng) 12/154,399中描述了更新約束的實(shí)現(xiàn),通過(guò)整體引用該專利申請(qǐng)而將其并入于此,并且在下文中將其稱為0TS-102。與此對(duì)比,常規(guī)SQL完整性約束(諸如斷言)只是檢查相關(guān)聯(lián)的表達(dá)式在事務(wù)的提交期間是否成立,并且如果不成立則中止事務(wù)。
[0048]圖4A到圖4B提供斷言約束與更新約束之間的差異的簡(jiǎn)單示例。在圖4A上考慮了三個(gè)事務(wù)。事務(wù)Tl是將資金從賬戶I轉(zhuǎn)移到賬戶2,事務(wù)T2是賬戶I中的利息增加額,并且事務(wù)T3是賬戶2中的利息增加額。斷言約束Cl和C2分別用于防止透支賬戶I和賬戶2。更新約束C3和C4對(duì)于當(dāng)余額改變時(shí)針對(duì)賬戶I和賬戶2更新利息利率(如果余額〈1000則無(wú)利息,如果余額>=1000則支付利息)有益。
[0049]圖4B示出用于圖4A的示例的約束(左側(cè))和數(shù)據(jù)模型成員(右側(cè))的維恩圖。在此,402是所有約束的集合,404是與當(dāng)前事務(wù)Tl有關(guān)的所有約束的集合,并且406是作為更新約束的約束404的子集。在右側(cè),412是所有數(shù)據(jù)模型成員的集合,414是受當(dāng)前事務(wù)Tl影響的所有數(shù)據(jù)模型成員的集合,并且416是因?yàn)門l的相關(guān)聯(lián)的更新約束所以受Tl影響的數(shù)據(jù)模型成員的集合。將受當(dāng)前事務(wù)的更新約束影響的數(shù)據(jù)模型成員稱作為“目標(biāo)成員”是方便的。
[0050]在該示例中,我們看到事務(wù)Tl直接影響數(shù)據(jù)元素余額I和余額2(S卩,存在資金的轉(zhuǎn)移)。然而,因?yàn)楦录s束的原因,所以目標(biāo)成員利率I和利率2也間接地受提交事務(wù)Tl影響。這可以被當(dāng)作是用于利用相關(guān)的約束集合來(lái)檢查提交當(dāng)前事務(wù)的第二(以及更高)階效果的一致性的機(jī)制。因此,提交處理檢查可以包括:1)針對(duì)當(dāng)前事務(wù)確定數(shù)據(jù)模型的將要由于提交當(dāng)前事務(wù)而作為更新約束的結(jié)果被更新的目標(biāo)成員;以及2)確定提交當(dāng)前事務(wù)以及根據(jù)更新約束來(lái)更新目標(biāo)成員是否與約束集合一致。
[0051]在本工作中,所確定的屬性可以被自動(dòng)更新并且在提交事務(wù)之前添加到寫(xiě)入集合,或作為提交事務(wù)的一部分。因此,在提交時(shí),事務(wù)自動(dòng)確保該約束被保持。如果存在未解決的寫(xiě)入-寫(xiě)入沖突,則中止事務(wù),即使由這樣的約束解決方案引起寫(xiě)入中的一個(gè)或更多個(gè)也如此。
[0052]在實(shí)施例中,指定斷言約束和更新約束,以使得更新約束不會(huì)引起斷言約束被違反??梢酝ㄟ^(guò)具有排除這樣的違反的斷言約束來(lái)實(shí)現(xiàn)這種情況。例如,如果如在更早的示例中那樣由更新約束來(lái)確定變量al,并且通過(guò)斷言約束al < 100將al約束為小于100,則該斷言約束被斷言約束a0 < 99替代,從而更新約束從不會(huì)引起斷言違反。
[0053]在實(shí)施例中,當(dāng)使用被合并的快照在提交時(shí)間(重新)估計(jì)更新約束時(shí),獨(dú)立于由于相關(guān)聯(lián)的更新約束的對(duì)所確定屬性的沖突寫(xiě)入來(lái)提交事務(wù)。因?yàn)樗_定的屬性由約束和被合并的快照確定,而并非直接通過(guò)任何事務(wù)的動(dòng)作來(lái)確定,所以該情況得以保證。
[0054]在實(shí)施例中,例如,如在0TS-102中所指定的那樣,針對(duì)數(shù)據(jù)模型所指定的約束被轉(zhuǎn)譯為單個(gè)觸發(fā)約束的組集而作為數(shù)據(jù)模型的編譯和實(shí)例的一部分。因此,當(dāng)更新被事務(wù)執(zhí)行并且被應(yīng)用于數(shù)據(jù)模型時(shí),與每個(gè)被觸發(fā)的約束關(guān)聯(lián)的命令式過(guò)程被調(diào)用,并且由這些約束執(zhí)行的任何寫(xiě)入被追蹤為事務(wù)的一部分。特別地,并發(fā)更新被在邏輯上應(yīng)用于當(dāng)前快照,這意味著這些更新也能夠引起更新約束的觸發(fā),但是然后利用當(dāng)前所提交的狀態(tài)加上要作為當(dāng)前事務(wù)的一部分被提交的狀態(tài)來(lái)估計(jì)所有這些約束,以確保約束在最終(要被提交的)狀態(tài)下成立。如上面指示的那樣,實(shí)際上,通常優(yōu)選的是將當(dāng)前快照的所有修改推遲到直到當(dāng)前事務(wù)的提交處理(與在每次并發(fā)更新之后就更新快照相反)。如果并發(fā)更新影響更新約束,則可以通過(guò)在當(dāng)前事務(wù)的提交處理期間合并該并發(fā)更新來(lái)重新觸發(fā)該更新約束處理。
[0055]由約束操控過(guò)程進(jìn)行的寫(xiě)入可以觸發(fā)其它約束,這能夠觸發(fā)進(jìn)一步的寫(xiě)入。確保這種序列最終完成是應(yīng)用程序員在開(kāi)發(fā)約束說(shuō)明中的職責(zé)。實(shí)際上,序列通常很短,諸如一個(gè)或兩個(gè)觸發(fā)級(jí)別。
[0056]在作為約束處理的一部分的失效的情況下,中止事務(wù)并且不作出對(duì)數(shù)據(jù)模型的改變。
[0057]在分布式的實(shí)施例中,數(shù)據(jù)模型實(shí)例可以被執(zhí)行為與執(zhí)行代碼的處理分離的“sysdb”處理,以執(zhí)行事務(wù)的動(dòng)作,后者的處理被稱為“代理”。當(dāng)這樣的代理完成事務(wù)執(zhí)行時(shí),其將該事實(shí)傳送給sysdb處理,sysdb處理然后操控提交處理。如果整個(gè)數(shù)據(jù)模型由單個(gè)sysdb處理保持,則其可以執(zhí)行所有約束的提交處理作為本地動(dòng)作,因此使得與要求分布式的通信的設(shè)計(jì)相比是高效的。
[0058]在跨多個(gè)sysdb處理對(duì)數(shù)據(jù)模型進(jìn)行分區(qū)的實(shí)施例中,約束生成的寫(xiě)入可以應(yīng)用于此前在該事務(wù)中未牽涉的sysdb處理中所存儲(chǔ)的狀態(tài)。在此情況下,當(dāng)前事務(wù)被擴(kuò)展為包括該附加的sysdb處理。
[0059]在實(shí)施例中,sysdb處理將事務(wù)的改變以日志記錄到數(shù)據(jù)模型(即重做(redo)或預(yù)寫(xiě)式(write-ahead)日志),并且實(shí)際上還未將這些改變應(yīng)用于數(shù)據(jù)模型實(shí)例。在初始準(zhǔn)備提交期間,其然后將這些日志記錄的改變應(yīng)用于數(shù)據(jù)模型實(shí)例,引起約束生成附加的寫(xiě)入。這些附加的寫(xiě)入由日志記錄機(jī)制捕獲,日志記錄機(jī)制檢測(cè)對(duì)于數(shù)據(jù)模型的改變,以用于將這些改變存留到次級(jí)存儲(chǔ)件和/或?qū)⑦@些改變傳送到數(shù)據(jù)模型的其它拷貝(諸如分離處理所提供的備份拷貝(被提供以允許在失效的情況下的快速恢復(fù)))。應(yīng)用這些日志記錄的改變還能夠調(diào)用代碼以檢查任何受影響的斷言約束。如果任何這些斷言約束失效,則然后可以中止事務(wù)。注意,在該實(shí)施例中,在應(yīng)用這些日志記錄的改變期間該sysdb處理中的狀態(tài)表示日志中直到該點(diǎn)的被合并的快照。如果斷言約束受日志中的多個(gè)改變影響,則在最后的這樣的改變提供與所述斷言約束有關(guān)的完整的被合并的快照狀態(tài)。因此,總是在用于當(dāng)前事務(wù)的狀態(tài)的最終的被合并的快照上有效地估計(jì)斷言約束。
[0060]在該約束執(zhí)行已經(jīng)完成之后,如果事務(wù)仍然能夠提交(即作為約束檢查或動(dòng)作的結(jié)果,還沒(méi)有失效),則以常規(guī)方式提交事務(wù)狀態(tài),典型地在事務(wù)提交的指示的情況下將更新刷新到重做日志。如果在提交處理期間強(qiáng)制中止事務(wù),則可以根據(jù)撤銷日志撤銷對(duì)sysdb狀態(tài)的改變,如本領(lǐng)域中熟知的那樣。
[0061]在寫(xiě)入-寫(xiě)入沖突被檢測(cè)為該提交處理的一部分的情況下,提交處理嘗試解決寫(xiě)入-寫(xiě)入沖突,如以下所描述那樣,否則如果其不能解決寫(xiě)入-寫(xiě)入沖突,則中止事務(wù)。
[0062]寫(xiě)入-寫(xiě)入沖突解決方案
在實(shí)施例中,在提交時(shí)間元數(shù)據(jù)關(guān)于數(shù)據(jù)模型中已經(jīng)由該事務(wù)更新的屬性是可用的,元數(shù)據(jù)描述這些屬性的類別、類型和/或語(yǔ)義。然后,事務(wù)提交機(jī)制關(guān)于寫(xiě)入-寫(xiě)入沖突考查相關(guān)聯(lián)的屬性、屬性值以及相關(guān)聯(lián)的元數(shù)據(jù),以確定是否存在可能的解決方案。
[0063]作為一種情況,元數(shù)據(jù)可以指示其上存在當(dāng)前事務(wù)與并發(fā)事務(wù)之間的寫(xiě)入-寫(xiě)入沖突的屬性ai是計(jì)數(shù)器。在這樣的情況下,提交處理可以從當(dāng)前事務(wù)確定要使用的增量。用于當(dāng)前事務(wù)的提交處理于是可以將該增量應(yīng)用于并發(fā)事務(wù)已經(jīng)提交的ai的值,以確定用于ai的正確最終值。實(shí)質(zhì)上,先前所提交的寫(xiě)入和當(dāng)前事務(wù)兩者都使計(jì)數(shù)器遞增,從而倘若當(dāng)前事務(wù)以使兩個(gè)增量都維持的值來(lái)進(jìn)行提交,則寫(xiě)入-寫(xiě)入沖突并不需要使當(dāng)前事務(wù)中止。如果多個(gè)并發(fā)事務(wù)已經(jīng)更新計(jì)數(shù)器ai,則用于當(dāng)前事務(wù)的提交處理將當(dāng)前事務(wù)增量應(yīng)用于最新近提交的并發(fā)更新。
[0064]例如,如果計(jì)數(shù)器具有在用于當(dāng)前事務(wù)的最初快照中為3的先前值并且現(xiàn)在其為4,則當(dāng)前事務(wù)已經(jīng)使計(jì)數(shù)器遞增I。然后,如果因?yàn)椴l(fā)增量所以當(dāng)前所提交的計(jì)數(shù)器的值是7,則當(dāng)前事務(wù)以7+1=8的值進(jìn)行提交,從而當(dāng)前事務(wù)的效果(即遞增I)與其它并發(fā)更新的效果合并。
[0065]作為另一情況,如果屬性不是計(jì)數(shù)器,則如果并發(fā)寫(xiě)入和當(dāng)前事務(wù)寫(xiě)入正將屬性寫(xiě)入為相同的值,那么可以在沒(méi)有進(jìn)一步的動(dòng)作的情況下認(rèn)為寫(xiě)入-寫(xiě)入沖突被解決。
[0066]作為又一情況,如果元數(shù)據(jù)指示寫(xiě)入-寫(xiě)入沖突出現(xiàn)在具有被定義的默認(rèn)值或空值的映射數(shù)據(jù)結(jié)構(gòu)上,則提交處理可以確定并發(fā)寫(xiě)入是否將錄入項(xiàng)改變?yōu)槟J(rèn)值,這指示其正有效地將該錄入項(xiàng)從映射刪除而當(dāng)前事務(wù)正將同一錄入項(xiàng)寫(xiě)入為非空值。在此情況下,假如更早的提交事務(wù)有效地刪除錄入項(xiàng)并且當(dāng)前事務(wù)添加具有相同的鍵但不同值的錄入項(xiàng),則由當(dāng)前事務(wù)所寫(xiě)入的值可以越過(guò)所提交的值。
[0067]在一些情況情況下,用于錄入項(xiàng)的鍵是被生成或分配的值,從而當(dāng)前事務(wù)可以只選擇不與并發(fā)更新沖突的用于錄入項(xiàng)的不同的鍵,由此解決寫(xiě)入-寫(xiě)入沖突。
[0068]另一情況是并發(fā)事務(wù)將元素寫(xiě)入到與當(dāng)前事務(wù)寫(xiě)入到的隊(duì)列相同的隊(duì)列的末尾??梢酝ㄟ^(guò)簡(jiǎn)單地在(多個(gè))并發(fā)事務(wù)所入隊(duì)的(多個(gè))元素之后附加當(dāng)前事務(wù)的元素來(lái)解決該情況。
[0069]在實(shí)施例中,屬性可以具有與其關(guān)聯(lián)的寫(xiě)入沖突解決過(guò)程,寫(xiě)入沖突解決過(guò)程可以作出上面指示的處理序列中的一個(gè)或替換地作出解決寫(xiě)入-寫(xiě)入沖突的某種應(yīng)用特定處理。作為后者的例示性示例,該過(guò)程可以確定寫(xiě)入-寫(xiě)入沖突作為并發(fā)事務(wù)分配一些共享資源的結(jié)果而出現(xiàn),然而該并發(fā)事務(wù)表示更低的優(yōu)先級(jí)處理或用戶。在此情況下,可以從該更低優(yōu)先級(jí)處理回收資源,作為結(jié)果可能運(yùn)行補(bǔ)償事務(wù),并且該寫(xiě)入-寫(xiě)入沖突然后由于不允許當(dāng)前事務(wù)提交的原因而被去除。
[0070]總之,約束可能引起與并發(fā)事務(wù)沖突的寫(xiě)入,然而也可以通過(guò)基于與受影響的屬性關(guān)聯(lián)的元數(shù)據(jù)的提交處理來(lái)解決與并發(fā)事務(wù)沖突的寫(xiě)入??梢匀缟厦婺菢永煤线m的約束來(lái)操控計(jì)數(shù)器,即計(jì)數(shù)器被約束為等于某個(gè)特定事件的數(shù)目。作為另一示例,包含組集中的這些值的平均值的屬性可能受影響,并且因此由更新該組集中的值的兩個(gè)并發(fā)事務(wù)來(lái)寫(xiě)入。然而,通過(guò)利用先前所提交的值來(lái)重新計(jì)算當(dāng)前事務(wù)中的平均,被改正的值消除了對(duì)于由其初始的寫(xiě)入-寫(xiě)入沖突來(lái)引起當(dāng)前事務(wù)的中止的需要。
[0071 ] 考慮應(yīng)用的一般結(jié)構(gòu),應(yīng)用數(shù)據(jù)模型普遍地包括原始數(shù)據(jù)輸入和(內(nèi)部)推導(dǎo)的數(shù)據(jù)這兩者。因?yàn)樵紨?shù)據(jù)輸入通常來(lái)源于特定的輸入裝置,所以其自身不導(dǎo)致寫(xiě)入-寫(xiě)入沖突。例如,來(lái)自傳感器I的原始數(shù)據(jù)輸入不蓋寫(xiě)來(lái)自傳感器2的原始數(shù)據(jù)輸入。此外,因?yàn)榇嬖趯?duì)從傳感器I進(jìn)行讀取負(fù)責(zé)的一個(gè)處理,所以來(lái)自傳感器I的更新原本就是順序的并且不是彼此并發(fā)的。
[0072]與此對(duì)比,經(jīng)??梢园凑沾_定被推導(dǎo)的數(shù)據(jù)的值的等式約束(或類似的構(gòu)造)來(lái)指定推導(dǎo)出的數(shù)據(jù)。因此,原始數(shù)據(jù)的兩個(gè)并發(fā)更新(例如來(lái)自傳感器I和2)可能關(guān)于所推導(dǎo)的數(shù)據(jù)引起寫(xiě)入-寫(xiě)入沖突(諸如上面的求和),并且可以通過(guò)允許基于被合并的快照的約束的重新計(jì)算來(lái)解決這些寫(xiě)入-寫(xiě)入沖突。
[0073]使用這些技術(shù),在應(yīng)用中即使不是在所有情況下也可以在很多情況下解決寫(xiě)入-寫(xiě)入沖突,明顯減少中止率,并且由此提供比完全串行化執(zhí)行的常規(guī)實(shí)現(xiàn)更好的性能。
[0074]異步約束
在實(shí)施例中,能夠通過(guò)標(biāo)識(shí)所確定的屬性來(lái)將更新約束指明為是異步的。例如,先前的約束可以被指定為:al' next = a0 + I;
以指示對(duì)al的更新可以關(guān)于對(duì)aO的更新異步地發(fā)生。在此情況下,如果由分離的sysdb處理保持al,則在最初的sysdb處理上的提交處理發(fā)起分離的“補(bǔ)償”事務(wù)以在保持al的sysdb處理上執(zhí)行,而不是將其處理為當(dāng)前事務(wù)的一部分。結(jié)果,當(dāng)前事務(wù)不需要被擴(kuò)展為包括該更新。其也不需要等待對(duì)al的該更新完成。
[0075]在補(bǔ)償事務(wù)不能夠提交的情況下,可以存在針對(duì)該情況指定的進(jìn)一步的動(dòng)作,其可以包括用以將改變復(fù)原到aO的進(jìn)一步的補(bǔ)償事務(wù)。然而,在大多數(shù)應(yīng)用中,如果不能執(zhí)行諸如對(duì)al的簡(jiǎn)單寫(xiě)入,則系統(tǒng)已經(jīng)遭受致命的問(wèn)題并且不能繼續(xù)執(zhí)行。
[0076]對(duì)于性能而言關(guān)鍵的問(wèn)題是當(dāng)要求跨多個(gè)sysdb處理的數(shù)據(jù)模型時(shí)對(duì)跨多個(gè)sysdb處理的數(shù)據(jù)模型仔細(xì)分區(qū),以及指定約束以使得當(dāng)存在跨分區(qū)約束時(shí),如果可行的話,則將它們被指定為異步的。
[0077]處理異步等式約束的應(yīng)用邏輯不能假定約束嚴(yán)格成立。然而,該邏輯可以經(jīng)常依賴于約束語(yǔ)義的更弱的形式。例如,如果在上面的示例中aO是緩慢改變的值,則也可以期待al接近于適當(dāng)?shù)闹?即使不是完全正確)。這是因?yàn)?,在?duì)aO的任意更新之后立即正常地執(zhí)行用以更新al的補(bǔ)償事務(wù)。
[0078]類似地,在各組集之間的等式約束的情況下,如果確定的組集再次相對(duì)緩慢地改變,則所確定的組集可以充分地近于進(jìn)行使用。例如,如果應(yīng)用邏輯在所確定的組集上進(jìn)行迭代以計(jì)算一些統(tǒng)計(jì)量,則具有近似精確的組集對(duì)于該統(tǒng)計(jì)計(jì)算的目的而言可能是足夠的。
[0079]最終,某個(gè)應(yīng)用邏輯可以僅處理第二 sysdb上的狀態(tài),并且因此無(wú)論狀態(tài)的兩個(gè)分區(qū)的異步更新行為如何,都不遭遇到它們之間的嚴(yán)格一致性的問(wèn)題。
[0080]松弛斷言約束
實(shí)際上,真實(shí)世界約束經(jīng)常比針對(duì)順序執(zhí)行來(lái)常規(guī)地聲明的那些約束更松弛。例如,在經(jīng)典的訂單存貨系統(tǒng)中,可以引述被允許下訂單的物品的數(shù)目不應(yīng)超過(guò)存貨中的數(shù)目。然而,在現(xiàn)實(shí)中,實(shí)際關(guān)心的是避免不必要地使得消費(fèi)者失望并且招致針對(duì)退貨訂單的商業(yè)成本。此外,倘若有損壞、失竊以及數(shù)據(jù)捕獲錯(cuò)誤,那么可用的并且適合于裝運(yùn)的實(shí)際存貨在數(shù)據(jù)模型中并不是準(zhǔn)確可知的。因此,實(shí)際的計(jì)算機(jī)存儲(chǔ)的值充其量是對(duì)于訂單而言可用的物品的數(shù)目的良好估算??梢栽诖嘶A(chǔ)上使約束更為近似。
[0081 ] 在一個(gè)實(shí)施例中,可以通過(guò)指示一個(gè)或更多個(gè)屬性可以使用它們的先前的值來(lái)將約束指定為是近似的。例如,更早些的示例的斷言約束可以被指定為:
39 > b,prev + c;
指示更新C的事務(wù)可以只是使用b的快照值,而不需要針對(duì)對(duì)于屬性b的并發(fā)寫(xiě)入進(jìn)行檢查。這種松弛約束消除了對(duì)于識(shí)別與該約束關(guān)聯(lián)的讀取-寫(xiě)入集合以及重新估計(jì)約束的需要。
[0082]如由’ prev前綴所指定的先前值的定義是在當(dāng)前事務(wù)的開(kāi)始時(shí)間的屬性的值。因此,如果該屬性并未與當(dāng)前事務(wù)并發(fā)地更新,則其同樣可以是當(dāng)前值。
[0083]應(yīng)用邏輯可以通過(guò)能夠有效地假定斷言約束近似為真來(lái)使用松弛語(yǔ)義。在一些情況下,可以緊密地估算這樣的近似。例如,考慮銀行透支的情況,假定事務(wù)在與一天相比相對(duì)短的時(shí)間段中完成,如果某個(gè)人在給定時(shí)間間隔內(nèi)可以支取的量被限制在比如D美元,則在D美元內(nèi)斷言賬戶未被透支是正確的。
[0084]在針對(duì)開(kāi)始時(shí)間和提交時(shí)間使用實(shí)時(shí)時(shí)鐘的實(shí)施例中,應(yīng)用還可以獲知屬性的快照值(即在開(kāi)始時(shí)間取得)與當(dāng)前時(shí)間之間的時(shí)間間隔。該獲知的間隔還可以允許應(yīng)用界定斷言約束表達(dá)式的不準(zhǔn)確度。
[0085]通過(guò)提供用以指定松弛斷言約束的單元,與在不允許這些松弛語(yǔ)義的情況下就指定所有約束相比,本發(fā)明的基于約束的一致性可以被提供有更高的效率。這對(duì)于可能橫跨數(shù)據(jù)模型分區(qū)邊界的約束的情況而言特別為真,因?yàn)橛谑撬沙谡Z(yǔ)義能夠避免執(zhí)行分布式事務(wù)及其相關(guān)聯(lián)的往返通信消息成本和延遲。
[0086]事務(wù)的基于輪次的實(shí)現(xiàn)
并不是每個(gè)代理單獨(dú)地提交事務(wù),替換的結(jié)構(gòu)是將每個(gè)代理的事務(wù)提交綁定到由(輪次)時(shí)鐘所指示的系統(tǒng)寬度輪次完成。輪次被跨應(yīng)用同步,以使得代理直到其已經(jīng)從執(zhí)行其它代理的輪次i_l的其它代理接收到與其相關(guān)的所有更新才開(kāi)始處理輪次i。通常,這是通過(guò)直到所有代理已經(jīng)指示它們的輪次i_l的完成才允許任意代理進(jìn)入輪次i來(lái)實(shí)現(xiàn)的。事實(shí)上,來(lái)自時(shí)鐘的每個(gè)新輪次消息指示由代理進(jìn)行新事務(wù)的開(kāi)始,還進(jìn)行動(dòng)作以確保其已經(jīng)接收到來(lái)自先前輪次的狀態(tài)更新。代理然后完成輪次處理,并且響應(yīng)于時(shí)鐘來(lái)有效地提交事務(wù)。如果代理在給定輪次期間沒(méi)有更新要執(zhí)行,則其有效地提交空事務(wù)。這帶來(lái)相對(duì)低的開(kāi)銷。
[0087]圖5提供被組織成輪次的事務(wù)的示意性圖解。在此,輪次I開(kāi)始于時(shí)間tls并且結(jié)束于時(shí)間tle,輪次2開(kāi)始于時(shí)間t2s并且結(jié)束于時(shí)間t2e,并且輪次3開(kāi)始于時(shí)間t3s并且結(jié)束于時(shí)間t3e。期待代理a、b、c和d每個(gè)輪次執(zhí)行一個(gè)事務(wù)(其可以是空事務(wù))。事務(wù)針對(duì)在輪次I中由代理a進(jìn)行的事務(wù)被標(biāo)記Tla,針對(duì)在輪次3中由代理d進(jìn)行的事務(wù)被標(biāo)記T3d,等等。新的輪次通常直到在所有代理已經(jīng)完成先前輪次(即通過(guò)提交或中止它們的相應(yīng)事務(wù))之后才開(kāi)始。每個(gè)代理在輪次的開(kāi)始時(shí)在邏輯上開(kāi)始其事務(wù)。其實(shí)際的執(zhí)行開(kāi)始可能由于對(duì)約束進(jìn)行調(diào)度的處理而被延遲,如圖5所示。類似地,每個(gè)代理的事務(wù)在輪次的結(jié)束時(shí)在邏輯上完成(即提交)。其實(shí)際的執(zhí)行可能完成得更早,因?yàn)槠渑c在輪次時(shí)間期間可用的處理相比要做的事情更少。對(duì)于該一般方案的例外是可能的。例如,圖5上的事務(wù)Tlb橫跨兩個(gè)輪次。因此,在相對(duì)少的事務(wù)占據(jù)多于一個(gè)的輪次的情況下,如果大多數(shù)事務(wù)在單個(gè)輪次內(nèi)發(fā)生,則我們將事務(wù)當(dāng)作為被組織成輪次。
[0088]在一個(gè)實(shí)施例中,可以中止單獨(dú)的代理(跨越(trans))動(dòng)作。在此情況下,動(dòng)作被中止的代理要么立刻接收對(duì)于該效果的指示要么在下一輪次的開(kāi)始時(shí)接收對(duì)于該效果的指示。這是關(guān)于如何操控代理的動(dòng)作的中止的應(yīng)用級(jí)別決定。例如,在一些情況下,代理在接下來(lái)的輪次中可能僅僅是重試事務(wù),或者采取替換的動(dòng)作。替換地,可以停滯當(dāng)前輪次的完成,直到代理已經(jīng)成功地重試同一事務(wù)。在一些情況下,這等同于并且事實(shí)上能夠被實(shí)現(xiàn)為代理失效和重啟。
[0089]在實(shí)施例中,可以通過(guò)以下來(lái)實(shí)現(xiàn)快照行為:一旦新的輪次已經(jīng)開(kāi)始,就在每個(gè)參與代理處在接收上阻斷更新;一旦輪次完成,就僅釋放要被提供給應(yīng)用代理的那些更新。在中止的情況下,中止消息被發(fā)送到每個(gè)代理,每個(gè)代理丟棄這些被阻斷并被排隊(duì)的更新,確保這些代理不看到其中發(fā)生中止的輪次的結(jié)果。如果僅丟棄中止處理所生成的更新,則僅該中止處理需要針對(duì)當(dāng)前輪次重試其處理。否則,所有處理復(fù)原到它們從輪次開(kāi)始之時(shí)起的狀態(tài),并且針對(duì)當(dāng)前輪次對(duì)處理進(jìn)行重做。
[0090]替換地,可以生成更新消息作為將中止處理的狀態(tài)復(fù)原到輪次的開(kāi)始的部分,在該中止處理的后續(xù)重試生成提供重試處理的結(jié)果的更新消息的情況下,這有效地復(fù)原狀態(tài)以撤銷由該中止處理生成的改變。
[0091]作為另一替換,事務(wù)機(jī)制可以依賴于由中止和重試處理生成的新的消息,在這些消息被針對(duì)下一輪次在代理中被解除阻斷并處理之前,中止和重試處理在每個(gè)接收處理的被阻斷并排隊(duì)的消息中提供對(duì)狀態(tài)的更新以提供正確的凈狀態(tài)結(jié)果。例如,如果第一被中止的處理將變量“foo”設(shè)置為3,并且隨后的重試將變量“foo”設(shè)置為4,則被阻斷并被排隊(duì)的消息包含“foo”為3的一個(gè)設(shè)置后接“foo”為4的一個(gè)設(shè)置,從而代理的狀態(tài)中的凈結(jié)果是正確的值(在此情況下,即4)。
[0092]可以通過(guò)使處理重啟來(lái)操控在輪次期間的處理的失效,使之恢復(fù)其從輪次開(kāi)始之時(shí)起的狀態(tài),并且對(duì)輪次的處理進(jìn)行重做。在此情況下,除了有可能延遲輪次的完成之外,失效對(duì)于事務(wù)輪次處理是透明的。
[0093]在一些應(yīng)用的情況下,可能可行的是,即使所指定的處理中的一個(gè)或更多個(gè)還未完成它們的處理并且還未對(duì)輪次時(shí)鐘作出響應(yīng),也允許完成該輪次。例如,如果所指定的處理已經(jīng)指示完成最后三個(gè)輪次中的一個(gè)之內(nèi)的處理,則輪次機(jī)制可以繼續(xù)。這樣的處理可能遭遇由在中間輪次中提交其事務(wù)的另一處理進(jìn)行的并發(fā)更新。例如,圖5的事務(wù)Tlb將需要考慮來(lái)自事務(wù)Tla、Tlc和Tld的并發(fā)更新。
[0094]在一些應(yīng)用的情況下,可以基于特定處理對(duì)于對(duì)應(yīng)用正確性沒(méi)有影響的狀態(tài)作出的改變,而允許在輪次機(jī)制外部執(zhí)行這樣的處理的過(guò)程。例如,溫度傳感器處理可以利用連續(xù)值之間的小的差異來(lái)周期性地更新溫度。應(yīng)用邏輯可以被設(shè)計(jì)為即使這與基于輪次的事務(wù)并發(fā)地發(fā)生(即溫度在輪次的中間顯現(xiàn)為改變),也正確地進(jìn)行操作。這可以是基于輪次的計(jì)算內(nèi)的并發(fā)更新的另一源。
[0095]在實(shí)施例中,存在用以指示在沿著上面描述的優(yōu)化線路的輪次內(nèi)的特定代理處理的特殊操控的規(guī)定。例如,處理可以指示是在當(dāng)前輪次中需要重試事務(wù)的中止還是可以跳到(slip)下一輪次??梢栽诘怯浀捷喆螘r(shí)鐘的代理處理的動(dòng)作中提供該指示,以指示其正參與輪次,即,作為輪次登記處理中的參數(shù)。因此,實(shí)施例可以允許每個(gè)應(yīng)用處理在操控中止和失效中選擇不同的優(yōu)化,目的是在仍然確保應(yīng)用正確性的同時(shí)使對(duì)這些事件的應(yīng)用性能的影響最小化。
[0096]在基于輪次的實(shí)現(xiàn)的情形下,’next后綴被用于指明在下一輪次中對(duì)值進(jìn)行更新。在當(dāng)前事務(wù)可能橫跨多個(gè)輪次時(shí),’ prev后綴可以指代被并發(fā)地更新的值。也就是說(shuō),該值可以在中間輪次中的一個(gè)期間已經(jīng)被更新。
[0097]基于輪次的方法就用以發(fā)起的消息和提交事務(wù)這兩者而言減少了事務(wù)的成本,而且還減少了指定’prev約束值的需要,或者反過(guò)來(lái)減少了未能做到這樣的成本。
【權(quán)利要求】
1.一種確保與數(shù)據(jù)模型有關(guān)的并發(fā)事務(wù)的一致性的方法,所述方法包括: 提供與所述數(shù)據(jù)模型中的數(shù)據(jù)有關(guān)的約束的集合; 執(zhí)行至少兩個(gè)事務(wù),其中,所述至少兩個(gè)事務(wù)中的每一個(gè)具有對(duì)應(yīng)的開(kāi)始時(shí)間,并且依賴于從開(kāi)始時(shí)間之時(shí)起所述數(shù)據(jù)模型的部分或全部對(duì)應(yīng)快照; 其中,所述至少兩個(gè)事務(wù)中的當(dāng)前事務(wù)具有當(dāng)前開(kāi)始時(shí)間和當(dāng)前目標(biāo)提交時(shí)間,并且其中,在所述當(dāng)前開(kāi)始時(shí)間之后并且在所述當(dāng)前目標(biāo)提交時(shí)間之前的一個(gè)或更多個(gè)中間時(shí)間,所述至少兩個(gè)事務(wù)的一個(gè)或更多個(gè)并發(fā)事務(wù)已經(jīng)提交給所述數(shù)據(jù)模型; 執(zhí)行提交處理檢查,提交處理檢查自動(dòng)地確定是否能夠與至少來(lái)自a)所述當(dāng)前事務(wù)的快照和b)所述一個(gè)或更多個(gè)并發(fā)事務(wù)對(duì)所述數(shù)據(jù)模型所作的改變這兩者的約束的集合一致地提交所述當(dāng)前事務(wù); 如果能夠使得所述當(dāng)前事務(wù)與約束的集合一致,則自動(dòng)地提交所述當(dāng)前事務(wù);以及 如果不能使得所述當(dāng)前事務(wù)與約束的集合一致,則自動(dòng)地中止所述當(dāng)前事務(wù)。
2.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括: 執(zhí)行寫(xiě)入-寫(xiě)入沖突解決方案。
3.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括: 根據(jù)由所述當(dāng)前事務(wù)執(zhí)行的操作來(lái)更新所述當(dāng)前事務(wù)的快照,以提供被更新的快照。
4.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括: 根據(jù)由并發(fā)事務(wù)中的一個(gè)或更多個(gè)作出的所提交的改變來(lái)更新所述當(dāng)前事務(wù)的快照,以提供被合并的快照。
5.如權(quán)利要求4所述的方法,其中,所述提交處理檢查包括: 使用所述被合并的快照來(lái)估計(jì)約束的集合中的一個(gè)或更多個(gè)斷言約束。
6.如權(quán)利要求4所述的方法,其中,所述提交處理檢查包括: 執(zhí)行寫(xiě)入-寫(xiě)入沖突解決方案。
7.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括: 針對(duì)所述當(dāng)前事務(wù)確定所述數(shù)據(jù)模型的將要由于提交所述當(dāng)前事務(wù)而作為約束的集合中的更新約束的結(jié)果被更新的目標(biāo)成員; 確定提交所述當(dāng)前事務(wù)以及根據(jù)更新約束來(lái)更新目標(biāo)成員是否與約束的集合一致。
8.如權(quán)利要求1所述的方法,其中,通過(guò)使用公共時(shí)鐘來(lái)提供所述至少兩個(gè)事務(wù)中的一些或全部的開(kāi)始和提交,以按輪次組織事務(wù)中一些或全部。
9.如權(quán)利要求1所述的方法,其中,約束的集合包括選自包括以下項(xiàng)的組的一個(gè)或更多個(gè)約束:斷言約束、更新約束、異步約束以及松弛斷言約束。
10.如權(quán)利要求1所述的方法,其中,約束的集合充分地確保并發(fā)事務(wù)應(yīng)用程序的正確行為。
11.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括:執(zhí)行用戶供給的用于檢查約束的集合的代碼。
12.如權(quán)利要求1所述的方法,其中,所述提交處理檢查包括:執(zhí)行自動(dòng)生成的用于檢查約束的集合的約束檢查代碼。
13.如權(quán)利要求12所述的方法,其中,從約束的集合生成自動(dòng)生成的約束檢查代碼。
【文檔編號(hào)】G06F9/46GK104252382SQ201410220268
【公開(kāi)日】2014年12月31日 申請(qǐng)日期:2014年5月23日 優(yōu)先權(quán)日:2013年6月25日
【發(fā)明者】D.R.徹里頓 申請(qǐng)人:奧普塔姆軟件股份有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1