數(shù)據(jù)庫事務(wù)處理方法與裝置制造方法
【專利摘要】本發(fā)明公開一種數(shù)據(jù)庫事務(wù)處理方法與裝置,用于讓事務(wù)可以跨線程工作,該數(shù)據(jù)庫事務(wù)處理方法包括:判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用;判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果;在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。采用本發(fā)明的技術(shù)方案,可以讓事務(wù)跨線程工作,這樣提高單個線程的利用率,讓單個線程可不間斷的服務(wù)于多個用戶。
【專利說明】數(shù)據(jù)庫事務(wù)處理方法與裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機數(shù)據(jù)庫領(lǐng)域,更具體的,涉及一種數(shù)據(jù)庫事務(wù)處理方法與裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)庫事務(wù)是DBMS (database management system,數(shù)據(jù)庫管理系統(tǒng))執(zhí)行過程中的一個邏輯單位,由一個或者多個操作序列構(gòu)成。它保證了多個操作之間的原子性,即要么全做,要么全不做。典型的例子就是銀行的轉(zhuǎn)賬功能,即甲向乙轉(zhuǎn)賬100元,那么甲的賬戶減去100元和乙的賬戶增加100元這兩次數(shù)據(jù)的操作應(yīng)該算是一件事,即一個事務(wù),否則將有可能造成數(shù)據(jù)丟失的風(fēng)險。
[0003]傳統(tǒng)的數(shù)據(jù)庫如Postgresql,—個事務(wù)只屬于一個用戶進程或線程,即當(dāng)一個用戶連接至數(shù)據(jù)庫時,數(shù)據(jù)庫將啟動一個單獨的用戶進程服務(wù)于該用戶,該用戶所啟動的所有事務(wù)都必須在這個進程里開始和結(jié)束,且該進程在當(dāng)前操作完成前不能做其他的事情。那么當(dāng)一定數(shù)量的用戶登錄該數(shù)據(jù)庫的時候?qū)泻芏嗟倪M程同時工作于該機器上,且過多進程或多線程之間調(diào)度對機器性能的影響是非常大的。
[0004]因此,現(xiàn)有技術(shù)中存在因單個線程服務(wù)單個用戶的模式而導(dǎo)致的線程利用率低下的問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種數(shù)據(jù)庫事務(wù)處理方法與裝置,用于解決現(xiàn)有技術(shù)中存在的因單個線程服務(wù)單個用戶的模式而導(dǎo)致的線程利用率低下的問題。
[0006]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供一種數(shù)據(jù)庫事務(wù)處理方法,并采用以下技術(shù)方案:
[0007]數(shù)據(jù)庫事務(wù)處理方法包括:判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用;判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果;在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
[0008]進一步地,所述判斷第一事務(wù)中的用戶是否處于工作狀態(tài)包括:構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量;判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果;在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
[0009]進一步地,所述判斷所述第一事務(wù)是否啟動包括:判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果;在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動;其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的初始狀態(tài)。
[0010]進一步地,所述控制所述第一事務(wù)處于暫停狀態(tài)包括:讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值;設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)。
[0011]進一步地,所述調(diào)用所述第一事務(wù)包括:根據(jù)所述標(biāo)識從所述全局列表中調(diào)出所述第一事務(wù)。
[0012]進一步地,所述在任一空閑線程上執(zhí)行所述第一事務(wù)之后,所述事務(wù)處理方法包括:判斷所述第一事務(wù)是否結(jié)束,并得出第五判斷結(jié)果;在所述第五判斷結(jié)果為所述第一事務(wù)結(jié)束時,將所述第一事務(wù)從所述列表中移除。
[0013]根據(jù)本發(fā)明的另外一個方面,提供一種數(shù)據(jù)庫事務(wù)處理裝置,并采用如下技術(shù)方案:
[0014]數(shù)據(jù)庫事務(wù)處理裝置包括:第一判斷模塊,用于判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;控制模塊,用于在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用;第二判斷模塊,判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果;調(diào)用模塊,用于在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
[0015]進一步地,所述第一判斷模塊包括:構(gòu)造模塊,用于構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量;第三判斷模塊,用于判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果;保存模塊,用于在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
[0016]進一步地,所述第三判斷模塊包括:第四判斷模塊,用于判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果;確認(rèn)模塊,用于在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動;其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的初始狀態(tài)。
[0017]進一步地,所述控制模塊包括:讀取模塊,用于讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值;設(shè)置模塊,用于設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)
[0018]通過本發(fā)明的上述技術(shù)方案,可以讓事務(wù)跨線程工作,將每一個活動的事務(wù)都保存起來,在需要的時候再將其拿出,附加到一個線程上接著執(zhí)行。這樣提高單個線程的利用率,讓單個線程可不間斷的服務(wù)于多個用戶,總體上使得少量的線程同時服務(wù)于大量的用戶,同時也提高了 CPU的利用率,降低了因過多的線程調(diào)度對機器造成的性能負(fù)擔(dān)。
【專利附圖】
【附圖說明】
[0019]附圖用來提供對本發(fā)明的進一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
[0020]圖1表示本發(fā)明實施例所述的數(shù)據(jù)庫事務(wù)處理方法流程圖;
[0021]圖2表示本發(fā)明實施例所述的數(shù)據(jù)庫事務(wù)處理裝置的結(jié)構(gòu)示意圖;
[0022]圖3表示本發(fā)明實施例所述的第一判斷模塊的結(jié)構(gòu)示意圖;
[0023]圖4表示本發(fā)明實施例所述的第三判斷模塊的結(jié)構(gòu)示意圖;
[0024]圖5表示本發(fā)明實施例所述的控制模塊的結(jié)構(gòu)示意圖。
【具體實施方式】
[0025]以下結(jié)合附圖對本發(fā)明的實施例進行詳細(xì)說明,但是本發(fā)明可以由權(quán)利要求限定和覆蓋的多種不同方式實施。
[0026]圖1表示本發(fā)明實施例所述的數(shù)據(jù)庫事務(wù)處理方法流程圖。
[0027]參見圖1所示,數(shù)據(jù)庫事務(wù)處理方法包括:
[0028]S101:判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;
[0029]S103:在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用;
[0030]S105:判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果;
[0031]S107:在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
[0032]數(shù)據(jù)庫事務(wù)是DBMS (database management system,數(shù)據(jù)庫管理系統(tǒng))執(zhí)行過程中的一個邏輯單位,由一個或者多個操作序列構(gòu)成。它保證了多個操作之間的原子性,即要么全做,要么全不做。典型的例子就是銀行的轉(zhuǎn)賬功能,即甲向乙轉(zhuǎn)賬100元,那么甲的賬戶減去100元和乙的賬戶增加100元這兩次數(shù)據(jù)的操作應(yīng)該算是一件事,即一個事務(wù),否者將有可能造成數(shù)據(jù)丟失的風(fēng)險。
[0033]在步驟SlOl中,首先判斷一個事務(wù),即第一事務(wù)是否有操作在進行,即用戶是否處于工作狀態(tài)。在步驟S103中,在確定該用戶沒有處于工作狀態(tài),即沒有操作在第一事務(wù)中進行時,控制第一事務(wù)處于暫停狀態(tài),即“凍結(jié)”第一事務(wù),目的是騰出第一事務(wù)對應(yīng)的線程為其他有事可做的用戶使用,即控制該線程給其他事務(wù)使用。
[0034]但針對數(shù)據(jù)庫事務(wù)“要么全做,要么全不做”的特點,即一個用戶的執(zhí)行操作只能由一個事務(wù)完成,因此在該用戶回到操作狀態(tài)時,仍需在第一事務(wù)中完成該操作。所以,在步驟S105中,判斷該用戶是否否返回工作狀態(tài),并得出第二判斷結(jié)果。在步驟S107中,當(dāng)該用戶返回工作狀態(tài)時,需調(diào)用第一事務(wù)為該用戶服務(wù),并將第一事務(wù)在任意一個空閑線程上執(zhí)行即可。
[0035]在本實施例的上述技術(shù)方案中,使得單線程不再單獨為一個用戶服務(wù),但針對事務(wù)的特點,即一個用戶的執(zhí)行操作只能由一個事務(wù)完成,當(dāng)之前的用戶返回執(zhí)行操作時,調(diào)出“冷卻”的事務(wù),并將其發(fā)送給隨意一個線程接著往下執(zhí)行。這樣在事務(wù)“冷卻”期間,該線程依然可服務(wù)于另外一個事務(wù),提高了有限線程的利用率。
[0036]優(yōu)選地,所述判斷第一事務(wù)中的用戶是否處于工作狀態(tài)包括:構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量;判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果;在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
[0037]本實施例給出的是將事務(wù)由不可跨線程變?yōu)榭煽缇€程,并且在變?yōu)榭煽缇€程之后,實現(xiàn)自由調(diào)用。
[0038]具體而言,對于一個事務(wù)會準(zhǔn)備很多的全局變量供一個事務(wù)使用,例如,只在某一個事務(wù)中才顯得有意義的內(nèi)存塊,這塊內(nèi)存上保存著只有一個事務(wù)才能理解的內(nèi)容。換句話說,如果這塊內(nèi)存給其他的事務(wù)去使用,這些內(nèi)容就變得無法理解了。傳統(tǒng)的數(shù)據(jù)庫會將這塊內(nèi)存綁定到一個線程上,也就是說,為了這個事務(wù)能正常的從頭到尾正確執(zhí)行,只能在這個線程上做任務(wù),因為這塊內(nèi)存只綁定在這個線程上,無法移動到其他線程。這種類型的全局變量還有很多,內(nèi)存塊只是其中的一個。這也就是為什么傳統(tǒng)數(shù)據(jù)庫的事務(wù)無法跨線程工作的原因,因為如果事務(wù)切換了線程,但是那些全局變量卻沒法切換線程,導(dǎo)致新的線程的全局變量的內(nèi)容是這個事務(wù)無法理解的。
[0039]那么為了讓事務(wù)可以跨線程工作,其中的一個辦法就是使得這些給事務(wù)理解的全局變量不再跟某個線程綁定,讓這些全局變量全部跟著事務(wù)走,而不是跟著線程走。具體的做法就是不再使用全局變量,而是聲明一個結(jié)構(gòu)體,即第一結(jié)構(gòu)體,例如Transact1nState,在這個Transact1nState結(jié)構(gòu)體中,定義了跟之前的全局變量意義一模一樣的成員變量。換句話說,如果原來給事務(wù)使用的全局變量有100個,那么Trasact1nState結(jié)構(gòu)體中也會有100個相對應(yīng)的成員變量。
[0040]之前的全局變量就不再使用了,改成使用這個結(jié)構(gòu)體中的成員變量。改成使用Trasact1nState結(jié)構(gòu)體中的變量后的改變在于,Trasact1nState結(jié)構(gòu)體是隨時隨地產(chǎn)生,隨時隨地銷毀,同時它不跟某一個線程掛鉤,它可以被任何線程使用,也能理解其結(jié)構(gòu)體中變量的內(nèi)容,因為一個事務(wù)只使用一個Trasact1nState結(jié)構(gòu)體,任何在這個事務(wù)里所做的操作而產(chǎn)生的數(shù)據(jù)上的改變?nèi)俭w現(xiàn)在這個結(jié)構(gòu)體中。這樣,一個事務(wù)想切換線程的時候,只要讓這個結(jié)構(gòu)體傳遞到另外一個線程,讓這個事務(wù)在另外的線程上依然使用同一個結(jié)構(gòu)體,那么這個事務(wù)就可以在另外的一個線程上工作了。這就做到了事務(wù)的跨線程,構(gòu)造第一結(jié)構(gòu)體的意義也就在于此,即首先讓事務(wù)變成可跨線程事務(wù),才能解放出線程供其他事務(wù)使用。
[0041]并且,對于通過上述技術(shù)方案,變成可跨線程工作的事務(wù)來說,在啟動以后即保存在一個全局列表中,實現(xiàn)自由調(diào)用。
[0042]更具體的,判斷所述第一事務(wù)是否啟動包括:判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果;在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動;其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的初始狀態(tài)。
[0043]對于本實施例的上述技術(shù)方案來說,系統(tǒng)啟動的時候,會構(gòu)造一個全局唯一的默認(rèn)的結(jié)構(gòu)體,即第二結(jié)構(gòu)體。這個特殊的結(jié)構(gòu)體的作用在于,它定義了所有事務(wù)啟動的時候初始狀態(tài)應(yīng)該是怎樣的。換句話說,當(dāng)有一個線程的結(jié)構(gòu)體處于該初始狀態(tài)時,則說明,這個線程上目前是沒有“活著”的事務(wù)的。反之,如果線程上的結(jié)構(gòu)體不是這個狀態(tài),則說明目前有一個“活著”的事務(wù)。通過這個默認(rèn)結(jié)構(gòu)體不僅可以避免重復(fù)構(gòu)造結(jié)構(gòu)體,還可以判斷目前是不是有事務(wù)“活動”著。
[0044]優(yōu)選地,所述控制所述第一事務(wù)處于暫停狀態(tài)包括:讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值;設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)。
[0045]更具體的說,當(dāng)啟動任何一個事務(wù)的時候,使用一個初始化默認(rèn)值,設(shè)置其為當(dāng)前使用的事務(wù),并放入一個全局的列表中保存起來,然后返回該事務(wù)的一個標(biāo)識。當(dāng)前操作執(zhí)行完畢之后,設(shè)置當(dāng)前線程的事務(wù)為該默認(rèn)值,這樣之前的事務(wù)就脫離了當(dāng)前線程。
[0046]該用戶的下一個操作到來的時候,使用前面的事務(wù)標(biāo)識將該事務(wù)從鏈表中拿出來。然后再次設(shè)置到任意一個線程上去,那么這個線程就可以將前面“凍結(jié)”的事務(wù)接著執(zhí)行下去了。該事務(wù)結(jié)束的時候,將其從事務(wù)列表中移除銷毀即可。
[0047]優(yōu)選地,所述調(diào)用所述第一事務(wù)包括:根據(jù)所述標(biāo)識從所述全局列表中調(diào)出所述笛——車I
[0048]具體的,當(dāng)啟動一個事務(wù)并構(gòu)造一個對應(yīng)的結(jié)構(gòu)體之后,即之前的第二結(jié)構(gòu)體,會將這個結(jié)構(gòu)體保存到一個鏈表中,即全局列表,只有一份,任何線程都能訪問到。這個鏈表保存著所有“活著”的事務(wù)的結(jié)構(gòu)體,即臨時節(jié)點表,作用在于當(dāng)事務(wù)切換線程時,不至于丟失掉自己的結(jié)構(gòu)體信息,因為可以從這個鏈表中找到屬于自己的結(jié)構(gòu)體。當(dāng)事務(wù)結(jié)束后,將自己的結(jié)構(gòu)體,即臨時節(jié)點表從這個鏈表中移除。
[0049]具體到本實施例,在從全局列表中調(diào)用事務(wù)時,定義endStatement函數(shù)和detachThread函數(shù),在每次進行事務(wù)與線程脫離的時候調(diào)用。定義一個getTransact1n函數(shù),在喚回事務(wù)執(zhí)行時將事務(wù)從全局列表中取出,并設(shè)置為線程的當(dāng)前事務(wù)。
[0050]本實施例具體給出事務(wù)調(diào)用方法,即事務(wù)在不工作時,騰出相應(yīng)的線程,在需要繼續(xù)工作時,從全局列表中調(diào)用出來即可,達(dá)到了提高現(xiàn)有線程利用率的效果。
[0051]優(yōu)選地,所述在任一空閑線程上執(zhí)行所述第一事務(wù)之后,所述事務(wù)處理方法包括:判斷所述第一事務(wù)是否結(jié)束,并得出第五判斷結(jié)果;在所述第五判斷結(jié)果為所述第一事務(wù)結(jié)束時,將所述第一事務(wù)從所述列表中移除。
[0052]圖2表示本發(fā)明實施例所述的數(shù)據(jù)庫事務(wù)處理裝置的結(jié)構(gòu)示意圖。
[0053]參見圖2所示,數(shù)據(jù)庫事務(wù)處理裝置包括:第一判斷模塊30,用于判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;控制模塊32,用于在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用;第二判斷模塊34,判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果;調(diào)用模塊36,用于在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
[0054]圖3表示本發(fā)明實施例所述的第一判斷模塊的結(jié)構(gòu)示意圖。
[0055]可選地,參見圖3所示,所述第一判斷模塊30包括:構(gòu)造模塊301,用于構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量;第三判斷模塊303,用于判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果;保存模塊305,用于在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
[0056]圖4表示本發(fā)明實施例所述的第三判斷模塊的結(jié)構(gòu)示意圖。
[0057]可選地,參見圖4所示,所述第三判斷模塊303包括:第四判斷模塊3032,用于判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果;確認(rèn)模塊3034,用于在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動;其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的初始狀態(tài)。
[0058]圖5表示本發(fā)明實施例所述的控制模塊的結(jié)構(gòu)示意圖。
[0059]可選地,參見圖5所示,所述控制模塊32包括:讀取模塊3201,用于讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值;設(shè)置模塊3203,用于設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)
[0060]通過本發(fā)明的上述技術(shù)方案,可以讓事務(wù)跨線程工作,將每一個活動的事務(wù)都保存起來,在需要的時候再將其拿出,附加到一個線程上接著執(zhí)行。這樣提高單個線程的利用率,讓單個線程可不間斷的服務(wù)于多個用戶,總體上使得少量的線程同時服務(wù)于大量的用戶,同時也提高了 CPU的利用率,降低了因過多的線程調(diào)度對機器造成的性能負(fù)擔(dān)。
[0061]以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
【權(quán)利要求】
1.一種數(shù)據(jù)庫事務(wù)處理方法,其特征在于,包括: 判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果; 在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用; 判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果; 在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
2.如權(quán)利要求1所述的數(shù)據(jù)庫事務(wù)處理方法,其特征在于,所述判斷第一事務(wù)中的用戶是否處于工作狀態(tài)包括: 構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量; 判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果; 在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
3.如權(quán)利要求2所述的數(shù)據(jù)庫事務(wù)處理方法,其特征在于,所述判斷所述第一事務(wù)是否啟動包括: 判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果; 在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動; 其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的所述初始狀態(tài)。
4.如權(quán)利要求3所述的數(shù)據(jù)庫事務(wù)處理方法,其特征在于,所述控制所述第一事務(wù)處于暫停狀態(tài)包括: 讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值; 設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)。
5.如權(quán)利要求3所述的事務(wù)處理方法,其特征在于,所述調(diào)用所述第一事務(wù)包括: 根據(jù)所述標(biāo)識從所述全局列表中調(diào)出所述第一事務(wù)。
6.如權(quán)利要求3所述的事務(wù)處理方法,其特征在于,所述在任一空閑線程上執(zhí)行所述第一事務(wù)之后,所述事務(wù)處理方法包括: 判斷所述第一事務(wù)是否結(jié)束,并得出第五判斷結(jié)果; 在所述第五判斷結(jié)果為所述第一事務(wù)結(jié)束時,將所述第一事務(wù)從所述列表中移除。
7.一種數(shù)據(jù)庫事務(wù)處理裝置,其特征在于,包括: 第一判斷模塊,用于判斷第一事務(wù)中的用戶是否處于工作狀態(tài),得出第一判斷結(jié)果;控制模塊,用于在所述第一判斷結(jié)果為所述用戶處于非工作狀態(tài)時,控制所述第一事務(wù)處于暫停狀態(tài),并將所述第一事務(wù)所對應(yīng)的線程給其他用戶使用; 第二判斷模塊,判斷所述用戶是否返回工作狀態(tài),并得出第二判斷結(jié)果; 調(diào)用模塊,用于在所述第二判斷結(jié)果為所述用戶返回工作狀態(tài)時,調(diào)用所述第一事務(wù),并在任一空閑線程上執(zhí)行所述第一事務(wù)。
8.如權(quán)利要求7所述的數(shù)據(jù)庫事務(wù)處理裝置,其特征在于,所述第一判斷模塊包括: 構(gòu)造模塊,用于構(gòu)造第一結(jié)構(gòu)體,用于在所述第一結(jié)構(gòu)體中定義所述第一事務(wù)中的全局變量為成員變量; 第三判斷模塊,用于判斷所述第一事務(wù)是否啟動,并得出第三判斷結(jié)果; 保存模塊,用于在所述第三判斷結(jié)果為所述第一事務(wù)啟動時,保存所述第一結(jié)構(gòu)體至一預(yù)設(shè)的全局列表,然后返回一標(biāo)識給所述第一事務(wù),所述標(biāo)識用于從所述全局列表中調(diào)用所述第一事務(wù)。
9.如權(quán)利要求8所述的數(shù)據(jù)庫事務(wù)處理裝置,其特征在于,所述第三判斷模塊包括: 第四判斷模塊,用于判斷第二結(jié)構(gòu)中所述第一事務(wù)的初始狀態(tài)是否發(fā)生了變化,并得到第四判斷結(jié)果; 確認(rèn)模塊,用于在所述第四判斷結(jié)果為所述初始狀態(tài)發(fā)生變化時,確認(rèn)所述第一事務(wù)已啟動; 其中,所述第二結(jié)構(gòu)體為系統(tǒng)啟動的時候構(gòu)造的一個全局默認(rèn)的結(jié)構(gòu)體,用于定義所有事務(wù)啟動時候的初始狀態(tài)。
10.如權(quán)利要求9所述的數(shù)據(jù)庫事務(wù)處理裝置,其特征在于,所述控制模塊包括: 讀取模塊,用于讀取所述第一事務(wù)在所述線程的初始化默認(rèn)值; 設(shè)置模塊,用于設(shè)置第二事務(wù)的初始化值為所述默認(rèn)值,其中,所述第二事務(wù)為在所述第一事務(wù)暫停后使用所述線程的事務(wù)。
【文檔編號】G06F17/30GK104462077SQ201310414935
【公開日】2015年3月25日 申請日期:2013年9月12日 優(yōu)先權(quán)日:2013年9月12日
【發(fā)明者】何奇, 鄭程光, 郭春庭, 王浩, 劉慧娟, 胡選來 申請人:方正信息產(chǎn)業(yè)控股有限公司, 上海方正數(shù)字出版技術(shù)有限公司