專(zhuān)利名稱(chēng):共享數(shù)據(jù)更新裝置和共享數(shù)據(jù)更新方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體而言,涉及ー種共享數(shù)據(jù)更新裝置和一種共享數(shù)據(jù)更新方法。
背景技術(shù):
在業(yè)務(wù)系統(tǒng)中,很多共享數(shù)據(jù)面臨高并發(fā)的用戶訪問(wèn),而共享數(shù)據(jù)往往是系統(tǒng)核心業(yè)務(wù)模型,因此,共享數(shù)據(jù)正確性必須得到保障。如果要保證數(shù)據(jù)的正確性,那必然會(huì)涉及事務(wù)更新共享數(shù)據(jù)時(shí)的競(jìng)爭(zhēng)及等待,如圖1所示,用戶I正在更新數(shù)據(jù)表記錄增加數(shù)量20,同時(shí),用戶2通過(guò)操作需要將同一條記錄的數(shù)量減少40,而可能此時(shí)仍然存在其他用戶正在更新同一條記錄。如何支持用戶并發(fā)訪問(wèn)并最大限度提升系統(tǒng)支持的并發(fā)度是必須解決的問(wèn)題。為了保證業(yè)務(wù)數(shù)據(jù)的準(zhǔn)確性,絕大部分業(yè)務(wù)系統(tǒng)會(huì)采用兩種如下方法方法一首先對(duì)操作的數(shù)據(jù)進(jìn)行鎖定,然后更新數(shù)據(jù),最后校驗(yàn)數(shù)據(jù),事務(wù)結(jié)束后釋放鎖 ,方法ニ :首先更新數(shù)據(jù),然后鎖定數(shù)據(jù),最后校驗(yàn)數(shù)據(jù),事務(wù)結(jié)束釋放鎖。以上兩種方法都會(huì)至少涉及到兩次業(yè)務(wù)數(shù)據(jù)加鎖,一次為了保證數(shù)據(jù)的正確性,在校驗(yàn)數(shù)據(jù)時(shí)對(duì)數(shù)據(jù)加鎖。另外一次在數(shù)據(jù)持久化時(shí),需要數(shù)據(jù)庫(kù)級(jí)別進(jìn)行加鎖。而系統(tǒng)在高并發(fā)的情況下,對(duì)數(shù)據(jù)進(jìn)行頻繁加鎖,會(huì)導(dǎo)致事務(wù)出現(xiàn)大量等待,從而出現(xiàn)系統(tǒng)性能瓶頸,導(dǎo)致系統(tǒng)支持并發(fā)能力下降。一般的系統(tǒng)處理業(yè)務(wù)數(shù)據(jù)更新流程如圖2所示??梢悦黠@看出,一次用戶操作導(dǎo)致的更新事務(wù),可能導(dǎo)致兩次鎖等待。在高并發(fā)的情況下,導(dǎo)致系統(tǒng)支持并發(fā)能力下降。因此,需要ー種共享數(shù)據(jù)更新技木,能夠在保證數(shù)據(jù)更新正確性的前提下,消除數(shù)據(jù)更新及校驗(yàn)過(guò)程的加鎖處理,從而提高系統(tǒng)支持的并發(fā)度。
發(fā)明內(nèi)容
本發(fā)明正是基于上述問(wèn)題,提出了ー種共享數(shù)據(jù)更新技術(shù),能夠在保證數(shù)據(jù)更新 正確性的前提下,消除數(shù)據(jù)更新及校驗(yàn)過(guò)程的加鎖處理,從而提高系統(tǒng)支持的并發(fā)度。有鑒于此,根據(jù)本發(fā)明的ー個(gè)方面,提供了ー種共享數(shù)據(jù)更新裝置,包括存儲(chǔ)單元,用于保存基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表,所述基本數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的匯總數(shù)據(jù),所述緩存數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的差異數(shù)據(jù);差異數(shù)據(jù)計(jì)算單元,計(jì)算本次更新操作引起所述共享數(shù)據(jù)的差異數(shù)據(jù);數(shù)據(jù)持久化単元,采用獨(dú)立事務(wù)將所述差異數(shù)據(jù)插入至所述緩存數(shù)據(jù)庫(kù)表中;數(shù)據(jù)校驗(yàn)単元,查詢所述基本數(shù)據(jù)庫(kù)表和所述緩存數(shù)據(jù)庫(kù)表校驗(yàn)所述差異數(shù)據(jù),根據(jù)校驗(yàn)結(jié)果確定是否提交所述獨(dú)立事務(wù)。上述技術(shù)方案采用新增差異記錄的方式持久化,避免了數(shù)據(jù)庫(kù)級(jí)別的加鎖過(guò)程。差異數(shù)據(jù)采用獨(dú)立事務(wù)直接提交至緩存表,并基于緩存表序列機(jī)制進(jìn)行數(shù)據(jù)校驗(yàn),使得數(shù)據(jù)校驗(yàn)過(guò)程無(wú)需對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行鎖定,可以在保證數(shù)據(jù)正確性的基礎(chǔ)上,消除數(shù)據(jù)校驗(yàn)的加鎖過(guò)程。由于加鎖在基于緩存表序列的數(shù)據(jù)更新過(guò)程中完全消除,可以明顯提高系統(tǒng)的支持的并發(fā)度,優(yōu)化系統(tǒng)并發(fā)性能。在上述技術(shù)方案中,優(yōu)選的,數(shù)據(jù)持久化単元包括序列生成子単元,為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。在上述技術(shù)方案中,優(yōu)選的,所述數(shù)據(jù)校驗(yàn)單元還用于在校驗(yàn)所述差異數(shù)據(jù)時(shí),首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。緩存表的序列按事務(wù)發(fā)生時(shí)間遞增,在數(shù)據(jù)校驗(yàn)查詢時(shí),只查詢序列小于等于當(dāng)前事務(wù)序列的記錄。因此,對(duì)于用戶并發(fā)更新數(shù)據(jù)導(dǎo)致共享數(shù)據(jù)資源爭(zhēng)用的情形下,采用了先到先得的排隊(duì)策略進(jìn)行共享數(shù)據(jù)資源的分配。在上述技術(shù)方案中,優(yōu)選的,所述數(shù)據(jù)校驗(yàn)單元還用于在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述獨(dú)立事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述獨(dú)立事務(wù)。在上述任一技術(shù)方案中,優(yōu)選的,還包括數(shù)據(jù)查詢単元,用于對(duì)所述緩存數(shù)據(jù)庫(kù)表和所述基本數(shù)據(jù)庫(kù)表進(jìn)行查詢并定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表。根據(jù)本發(fā)明的另一方面,還提供了ー種共享數(shù)據(jù)更新方法,包括以下步驟步驟402,將所述共享數(shù)據(jù)的匯總數(shù)據(jù)保存于基本數(shù)據(jù)庫(kù)表中,以及將所述共享數(shù)據(jù)的差異數(shù)據(jù)保存于緩存數(shù)據(jù)庫(kù)表中;步驟404,計(jì)算本次更新操作引起所述共享數(shù)據(jù)的差異數(shù)據(jù)并采用獨(dú)立事務(wù)將所述差異數(shù)據(jù)插入至所述緩存數(shù)據(jù)庫(kù)表中;步驟406,查詢所述基本數(shù)據(jù)庫(kù)表和所述緩存數(shù)據(jù)庫(kù)表校驗(yàn)所述差異數(shù)據(jù);步驟408,根據(jù)校驗(yàn)結(jié)果確定是否提交所述獨(dú)立事務(wù)。上述技術(shù)方案采用新增差異記錄的方式持久化,避免了數(shù)據(jù)庫(kù)級(jí)別的加鎖過(guò)程。差異數(shù)據(jù)采用獨(dú)立事務(wù)直接提交至緩存表,并基于緩存表序列機(jī)制進(jìn)行數(shù)據(jù)校驗(yàn),使得數(shù)據(jù)校驗(yàn)過(guò)程無(wú)需對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行鎖定,可以在保證數(shù)據(jù)正確性的基礎(chǔ)上,消除數(shù)據(jù)校驗(yàn)的加鎖過(guò)程。由于加鎖在基于緩存表序列的數(shù)據(jù)更新過(guò)程中完全消除,可以明顯提高系統(tǒng)的支持的并發(fā)度,優(yōu)化系統(tǒng)并發(fā)性能。在上述技術(shù)方案中,優(yōu)選的,所述步驟404還包括為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。在上述技術(shù)方案中,優(yōu)選的,所述步驟406還可以包括在校驗(yàn)所述差異數(shù)據(jù)吋,首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。緩存表的序列按事務(wù)發(fā)生時(shí)間遞增,在數(shù)據(jù)校驗(yàn)查詢時(shí),只查詢序列小于等于當(dāng)前事務(wù)序列的記錄。因此,對(duì)于用戶并發(fā)更新數(shù)據(jù)導(dǎo)致共享數(shù)據(jù)資源爭(zhēng)用的情形下,采用了先到先得的排隊(duì)策略進(jìn)行共享數(shù)據(jù)資源的分配。在上述技術(shù)方案中,優(yōu)選的,在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述獨(dú)立事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述獨(dú)立事務(wù)。如果數(shù)據(jù)校驗(yàn)通過(guò),則先提交差異數(shù)據(jù)新增事務(wù)(即所述獨(dú)立事務(wù)),然后提交用戶數(shù)據(jù)更新事務(wù)。如果數(shù)據(jù)校驗(yàn)不通過(guò),則先回滾差異數(shù)據(jù)新增事務(wù)(即所述獨(dú)立事務(wù)),保證緩存表數(shù)據(jù)記錄的合法性,然后回滾用戶數(shù)據(jù)更新事務(wù)。
在上述任一技術(shù)方案中,優(yōu)選的,所述步驟408還可以包括,定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表。數(shù)據(jù)的持久化操作采用在緩存表中新增差異數(shù)據(jù)記錄的方式,減少了數(shù)據(jù)庫(kù)級(jí)別的鎖等待,解決了不同事務(wù)對(duì)同一行共享數(shù)據(jù)更新的資源競(jìng)爭(zhēng)。采用獨(dú)立事務(wù)并引入序列機(jī)制進(jìn)行數(shù)據(jù)正確性驗(yàn)證,避免了數(shù)據(jù)加鎖校驗(yàn)。而且對(duì)于數(shù)據(jù)的查詢操作分?jǐn)傊羶蓮埍恚商嵘龜?shù)據(jù)的訪問(wèn)性能。因此,共享數(shù)據(jù)訪問(wèn)系統(tǒng)通過(guò)消除數(shù)據(jù)更新中的兩次加鎖,減少系統(tǒng)性能瓶頸,保證系統(tǒng)能夠支持高并發(fā)數(shù)據(jù)訪問(wèn)。
圖1示出了在實(shí)際應(yīng)用場(chǎng)景中并發(fā)訪問(wèn)示意圖;圖2示出了相關(guān)技術(shù)中的共享數(shù)據(jù)更新流程圖;圖3示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新裝置的框圖;圖4示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新方法的流程圖;圖5示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)存儲(chǔ)表結(jié)構(gòu)示意圖;圖6示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新方法的流程圖;圖7示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新裝置的示意圖。
具體實(shí)施例方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明進(jìn)行進(jìn)一歩的詳細(xì)描述。在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明并不限于下面公開(kāi)的具體實(shí)施例的限制。圖3示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新裝置的框圖。如圖3所示,根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新裝置300包括存儲(chǔ)單元302,用于保存基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表,所述基本數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的匯總數(shù)據(jù),所述緩存數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的差異數(shù)據(jù);差異數(shù)據(jù)計(jì)算單元304,計(jì)算本次更新操作引起所述共享數(shù)據(jù)的差異數(shù)據(jù);數(shù)據(jù)持久化単元306,采用獨(dú)立事務(wù)將所述差異數(shù)據(jù)插入至所述緩存數(shù)據(jù)庫(kù)表中;數(shù)據(jù)校驗(yàn)単元308,查詢所述基本數(shù)據(jù)庫(kù)表和所述緩存數(shù)據(jù)庫(kù)表校驗(yàn)所述差異數(shù)據(jù),根據(jù)校驗(yàn)結(jié)果確定是否提交所述獨(dú)立事務(wù)。上述技術(shù)方案采用新增差異記錄的方式持久化,避免了數(shù)據(jù)庫(kù)級(jí)別的加鎖過(guò)程。差異數(shù)據(jù)采用獨(dú)立事務(wù)直接提交至緩存表,并基于緩存表序列機(jī)制進(jìn)行數(shù)據(jù)校驗(yàn),使得數(shù)據(jù)校驗(yàn)過(guò)程無(wú)需對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行鎖定,可以在保證數(shù)據(jù)正確性的基礎(chǔ)上,消除數(shù)據(jù)校驗(yàn)的加鎖過(guò)程。由于加鎖在基于緩存表序列的數(shù)據(jù)更新過(guò)程中完全消除,可以明顯提高系統(tǒng)的支持的并發(fā)度,優(yōu)化系統(tǒng)并發(fā)性能。在上述技術(shù)方案中,優(yōu)選的,數(shù)據(jù)持久化単元306包括序列生成子単元,為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。
在上述技術(shù)方案中,優(yōu)選的,所述數(shù)據(jù)校驗(yàn)單元還用于在校驗(yàn)所述差異數(shù)據(jù)時(shí),首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。緩存表的序列按事務(wù)發(fā)生時(shí)間遞增,在數(shù)據(jù)校驗(yàn)查詢時(shí),只查詢序列小于等于當(dāng)前事務(wù)序列的記錄。因此,對(duì)于用戶并發(fā)更新數(shù)據(jù)導(dǎo)致共享數(shù)據(jù)資源爭(zhēng)用的情形下,采用了先到先得的排隊(duì)策略進(jìn)行共享數(shù)據(jù)資源的分配。在上述技術(shù)方案中,優(yōu)選的,所述數(shù)據(jù)校驗(yàn)單元308還用于在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述獨(dú)立事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述獨(dú)立事務(wù)。在上述任一技術(shù)方案中,優(yōu)選的,還包括數(shù)據(jù)查詢単元310,用于對(duì)所述緩存數(shù)據(jù)庫(kù)表和所述基本數(shù)據(jù)庫(kù)表進(jìn)行查詢并定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表。圖4示出了根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新方法的流程圖。如圖4所示,根據(jù)本發(fā)明的實(shí)施例的共享數(shù)據(jù)更新方法,包括步驟402,將共享數(shù)據(jù)的匯總數(shù)據(jù)保存于基本數(shù)據(jù)庫(kù)表中,以及將共享數(shù)據(jù)的差異數(shù)據(jù)保存于緩存數(shù)據(jù)庫(kù)表中;步驟404,計(jì)算本次更新操作引起共享數(shù)據(jù)的差異數(shù)據(jù)并采用獨(dú)立事務(wù)將差異數(shù)據(jù)插入至緩存數(shù)據(jù)庫(kù)表中;步驟406,查詢基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表校驗(yàn)差異數(shù)據(jù);步驟408,根據(jù)校驗(yàn)結(jié)果確定是否提交獨(dú)立事務(wù)。上述技術(shù)方案采用新增差異記錄的方式持久化,避免了數(shù)據(jù)庫(kù)級(jí)別的加鎖過(guò)程。差異數(shù)據(jù)采用獨(dú)立事務(wù)直接提交至緩存表,并基于緩存表序列機(jī)制進(jìn)行數(shù)據(jù)校驗(yàn),使得數(shù)據(jù)校驗(yàn)過(guò)程無(wú)需對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行鎖定,可以在保證數(shù)據(jù)正確性的基礎(chǔ)上,消除數(shù)據(jù)校驗(yàn)的加鎖過(guò)程。由于加鎖在基于緩存表序列的數(shù)據(jù)更新過(guò)程中完全消除,可以明顯提高系統(tǒng)的支持的并發(fā)度,優(yōu)化系統(tǒng)并發(fā)性能。在上述技術(shù)方案中,優(yōu)選的,所述步驟404還包括為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。在上述技術(shù)方案中,優(yōu)選的,所述步驟406還可以包括在校驗(yàn)所述差異數(shù)據(jù)吋,首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。緩存表的序列按事務(wù)發(fā)生時(shí)間遞增,在數(shù)據(jù)校驗(yàn)查詢時(shí),只查詢序列小于等于當(dāng)前事務(wù)序列的記錄。因此,對(duì)于用戶并發(fā)更新數(shù)據(jù)導(dǎo)致共享數(shù)據(jù)資源爭(zhēng)用的情形下,采用了先到先得的排隊(duì)策略進(jìn)行共享數(shù)據(jù)資源的分配。在上述技術(shù)方案中,優(yōu)選的,在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述數(shù)據(jù)更新事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述數(shù)據(jù)更新事務(wù)。如果數(shù)據(jù)校驗(yàn)通過(guò),則先提交差異數(shù)據(jù)新增事務(wù)(即所述獨(dú)立事務(wù)),然后提交用戶數(shù)據(jù)更新事務(wù)。如果數(shù)據(jù)校驗(yàn)不通過(guò),則先回滾差異數(shù)據(jù)新增事務(wù)(即所述獨(dú)立事務(wù)),保證緩存表數(shù)據(jù)記錄的合法性,然后回滾用戶數(shù)據(jù)更新事務(wù)。在上述任一技術(shù)方案中,優(yōu)選的,所述步驟408還可以包括,定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表。由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表?;诰彺姹硇蛄械牟l(fā)度優(yōu)化原理如下1)將共享數(shù)據(jù)記錄的持久化方式,由傳統(tǒng)的每次更新數(shù)據(jù)記錄改為每次首先計(jì)算本次更新差異值,然后將采用獨(dú)立事務(wù)將差異值新增插入至緩存表,可以減少在數(shù)據(jù)更新及刪除時(shí)加鎖,避免了數(shù)據(jù)庫(kù)鎖等待。由于采用獨(dú)立事務(wù)持久化數(shù)據(jù),可以查詢未提交用戶事務(wù)的差異明細(xì),以便后續(xù)數(shù)據(jù)校驗(yàn)。2)緩存表引入序列機(jī)制,校驗(yàn)時(shí)通過(guò)序列過(guò)濾相同業(yè)務(wù)維度的緩存表數(shù)據(jù),消除數(shù)據(jù)校驗(yàn)加鎖。數(shù)據(jù)校驗(yàn)過(guò)程同時(shí)查詢基本表及緩存表,能夠有效保證數(shù)據(jù)正確性。3)由于緩存表采用差異插入方式持久化數(shù)據(jù),差異明細(xì)的數(shù)據(jù)量較大,因此需要定期對(duì)緩存表數(shù)據(jù)按業(yè)務(wù)維度匯總至基本表。采用緩存表序列的數(shù)據(jù)存儲(chǔ)模型如圖5所示。其中共享數(shù)據(jù)在存儲(chǔ)上被拆分至兩張基本同構(gòu)的數(shù)據(jù)庫(kù)表。基本表(即基本數(shù)據(jù)庫(kù)表)存儲(chǔ)共享數(shù)據(jù)按業(yè)務(wù)維度的匯總值。緩存表(即緩存數(shù)據(jù)庫(kù)表)存儲(chǔ)共享數(shù)據(jù)的差異流水明細(xì)。其中,緩存表添加遞增序列,作為數(shù)據(jù)校驗(yàn)的篩選條件。差異明細(xì)持久化至緩存表時(shí)生成唯一遞增序列,因此,每個(gè)用戶事務(wù)可以得到唯一序列,且用戶事務(wù)發(fā)生時(shí)間決定序列值大小,發(fā)生時(shí)間較早的事務(wù)對(duì)應(yīng)的序列值小于發(fā)生時(shí)間較晚的事務(wù)。數(shù)據(jù)校驗(yàn)時(shí),只需關(guān)注序列小于等于當(dāng)前事務(wù)序列的緩存表數(shù)據(jù)記錄。緩存表的數(shù)據(jù)定期匯總至基本表。一般在實(shí)踐中,選擇系統(tǒng)空閑時(shí)進(jìn)行數(shù)據(jù)的匯總?;趦?yōu)化模型的系統(tǒng)處理流程如圖6所示。針對(duì)用戶的數(shù)據(jù)更新事務(wù),首先計(jì)算本次更新導(dǎo)致的差異數(shù)據(jù)。然后,在用戶事務(wù)中啟動(dòng)差異數(shù)據(jù)新增事務(wù),采用新啟動(dòng)事務(wù)完成數(shù)據(jù)的持久化,在新增差異記錄過(guò)程中,生成緩存表數(shù)據(jù)記錄的序列。最后,差異數(shù)據(jù)持久化后,進(jìn)行數(shù)據(jù)業(yè)務(wù)正確性校驗(yàn)。如果數(shù)據(jù)校驗(yàn)通過(guò),則先提交差異數(shù)據(jù)新增事務(wù),然后提交用戶數(shù)據(jù)更新事務(wù)。如果數(shù)據(jù)校驗(yàn)不同過(guò),則先回滾差異數(shù)據(jù)新增事務(wù),保證緩存表數(shù)據(jù)記錄的合法性,然后回滾用戶數(shù)據(jù)更新事務(wù)。由于存儲(chǔ)模型的改變導(dǎo)致業(yè)務(wù)數(shù)據(jù)分布在基本表及緩存表中。其中,實(shí)時(shí)發(fā)生的業(yè)務(wù)數(shù)據(jù)分布在緩存表,而匯總數(shù)據(jù)分布在基本表。因此,為保證查詢?nèi)繑?shù)據(jù)進(jìn)行業(yè)務(wù)規(guī)則校驗(yàn),數(shù)據(jù)校驗(yàn)過(guò)程需同時(shí)查詢緩存表及基本表數(shù)據(jù)。由于緩存表采用獨(dú)立事務(wù)進(jìn)行數(shù)據(jù)持久化,因此,數(shù)據(jù)校驗(yàn)時(shí)可以查詢到未提交的用戶事務(wù)對(duì)共享數(shù)據(jù)的更新差異,從而避免由于事務(wù)的隔離機(jī)制必須進(jìn)行數(shù)據(jù)校驗(yàn)加鎖,實(shí)現(xiàn)用戶事務(wù)對(duì)共享數(shù)據(jù)資源的實(shí)時(shí)占用。如前文所述,緩存表的序列按事務(wù)發(fā)生時(shí)間遞增,在數(shù)據(jù)校驗(yàn)查詢時(shí),只查詢序列小于等于當(dāng)前事務(wù)序列的記錄。因此,對(duì)于用戶并發(fā)更新數(shù)據(jù)導(dǎo)致共享數(shù)據(jù)資源爭(zhēng)用的情形下,采用了先到先得的排隊(duì)策略進(jìn)行共享數(shù)據(jù)資源的分配。需要強(qiáng)調(diào)的是,所有的數(shù)據(jù)校驗(yàn)過(guò)程必須發(fā)生在差異數(shù)據(jù)新增事務(wù)內(nèi)部,以便數(shù)據(jù)校驗(yàn)失敗時(shí),通過(guò)差異數(shù)據(jù)新增事務(wù)的回滾,撤銷(xiāo)緩存表數(shù)據(jù)持久化。通過(guò)圖2與圖6的比較,相比以往的共享數(shù)據(jù)更新過(guò)程,可以看出基于緩存表序列的數(shù)據(jù)更新完全消除了加鎖過(guò)程。圖2中,用戶更新事務(wù)開(kāi)始,為了保證數(shù)據(jù)校驗(yàn)正確性,就對(duì)操作數(shù)據(jù)進(jìn)行加鎖,在事務(wù)提交吋,才會(huì)釋放數(shù)據(jù)校驗(yàn)鎖。在數(shù)據(jù)持久化時(shí),采用更新記錄方式,使得在數(shù)據(jù)庫(kù)級(jí)別上又増加一次加鎖過(guò)程。圖6中,用戶數(shù)據(jù)采用新增差異記錄的方式持久化,避免了數(shù)據(jù)庫(kù)級(jí)別的加鎖過(guò)程。差異數(shù)據(jù)采用獨(dú)立事務(wù)直接提交至緩存表,并基于緩存表序列機(jī)制進(jìn)行數(shù)據(jù)校驗(yàn),使得數(shù)據(jù)校驗(yàn)過(guò)程無(wú)需對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行鎖定,可以在保證數(shù)據(jù)正確性的基礎(chǔ)上,消除數(shù)據(jù)校驗(yàn)的加鎖過(guò)程。由于加鎖在基于緩存表序列的數(shù)據(jù)更新過(guò)程中完全消除,可以明顯提高系統(tǒng)的支持的并發(fā)度,優(yōu)化系統(tǒng)并發(fā)性能。基于以上并發(fā)優(yōu)化方法設(shè)計(jì)的共享數(shù)據(jù)訪問(wèn)系統(tǒng)結(jié)構(gòu)如圖7所示。共享數(shù)據(jù)訪問(wèn)系統(tǒng)主要包含以下兩個(gè)模塊1)數(shù)據(jù)更新模塊702,處理用戶更新事務(wù),完成數(shù)據(jù)的新増、修改、刪除。其可以包含四個(gè)部分用戶更新服務(wù)接ロ、差異數(shù)據(jù)計(jì)算單元、數(shù)據(jù)持久化單元、數(shù)據(jù)校驗(yàn)単元。差異數(shù)據(jù)計(jì)算單元計(jì)算用戶操作引起的差異數(shù)據(jù)明細(xì)。數(shù)據(jù)持久化單元負(fù)責(zé)緩存表序列的生成及緩存表數(shù)據(jù)的插入。數(shù)據(jù)校驗(yàn)単元查詢基本表和緩存表,根據(jù)業(yè)務(wù)規(guī)則進(jìn)行數(shù)據(jù)校驗(yàn)。2)數(shù)據(jù)查詢模塊704,處理用戶查詢事務(wù),包含用戶查詢服務(wù)接ロ和數(shù)據(jù)查詢単元兩個(gè)部分。數(shù)據(jù)查詢単元完成對(duì)基本表及緩存表數(shù)據(jù)的查詢及合井。從圖7中可看出,對(duì)于共享數(shù)據(jù)的訪問(wèn)被分?jǐn)傊羶蓮埍?,?duì)于數(shù)據(jù)持久化操作只在緩存表完成,基本表只提供數(shù)據(jù)的查詢服務(wù)?;诖私Y(jié)構(gòu)的系統(tǒng),數(shù)據(jù)的持久化操作由于采用在緩存表中新增差異數(shù)據(jù)記錄的方式,因而減少了數(shù)據(jù)庫(kù)級(jí)別的鎖等待,解決了不同事務(wù)對(duì)同一行共享數(shù)據(jù)更新的資源競(jìng)爭(zhēng)。在數(shù)據(jù)校驗(yàn)單元采用獨(dú)立事務(wù)并引入序列機(jī)制進(jìn)行數(shù)據(jù)正確性驗(yàn)證,避免了數(shù)據(jù)加鎖校驗(yàn)。而且對(duì)于數(shù)據(jù)的查詢操作分?jǐn)傊羶蓮埍恚商嵘龜?shù)據(jù)的訪問(wèn)性能。因此,共享數(shù)據(jù)訪問(wèn)系統(tǒng)通過(guò)消除數(shù)據(jù)更新中的兩次加鎖,減少系統(tǒng)性能瓶頸,保證系統(tǒng)能夠支持高并發(fā)數(shù)據(jù)訪問(wèn)。下面結(jié)合實(shí)際應(yīng)用舉例說(shuō)明。對(duì)于ERP系統(tǒng)的核心業(yè)務(wù)需求物料可用量管理。可用量記錄物料在一定時(shí)間的預(yù)計(jì)可用庫(kù)存量??捎昧孔鳛镋RP系統(tǒng)的核心共享數(shù)據(jù),其業(yè)務(wù)場(chǎng)景較多,大量操作單據(jù)事務(wù)會(huì)導(dǎo)致系統(tǒng)可用量更新。例如銷(xiāo)售訂單、生產(chǎn)訂單、采購(gòu)訂單、出入庫(kù)單據(jù)在保存吋,都會(huì)更新系統(tǒng)的可用量。ERP系統(tǒng)的可用量需要支持高并發(fā)的事務(wù)更新,否則,會(huì)成為ERP系統(tǒng)的性能瓶頸,影響主要單據(jù)的用戶日常操作。采用上述緩存表優(yōu)化可用量更新的ERP系統(tǒng)處理如下I)建立與現(xiàn)有可用量表同構(gòu)的緩存表,并且在緩存表新增序列字段。2)計(jì)算單據(jù)操作對(duì)可用量影響的差異明細(xì),并持久化。舉例如下1.物料1,截至2012-9-7日累計(jì)預(yù)計(jì)入庫(kù)量30。得到如下表所示的基本表和緩存表。可用量基本表可用量緩存表
權(quán)利要求
1.一種共享數(shù)據(jù)更新裝置,其特征在于,包括 存儲(chǔ)單元,用于保存基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表,所述基本數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的匯總數(shù)據(jù),所述緩存數(shù)據(jù)庫(kù)表用于保存所述共享數(shù)據(jù)的差異數(shù)據(jù); 差異數(shù)據(jù)計(jì)算單元,計(jì)算本次更新操作引起所述共享數(shù)據(jù)的差異數(shù)據(jù); 數(shù)據(jù)持久化單元,采用獨(dú)立事務(wù)將所述差異數(shù)據(jù)插入至所述緩存數(shù)據(jù)庫(kù)表中; 數(shù)據(jù)校驗(yàn)單元,查詢所述基本數(shù)據(jù)庫(kù)表和所述緩存數(shù)據(jù)庫(kù)表校驗(yàn)所述差異數(shù)據(jù),根據(jù)校驗(yàn)結(jié)果確定是否提交所述獨(dú)立事務(wù)。
2.根據(jù)權(quán)利要求1所述的共享數(shù)據(jù)更新裝置,其特征在于,數(shù)據(jù)持久化單元包括序列生成子單元,為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。
3.根據(jù)權(quán)利要求2所述的共享數(shù)據(jù)更新裝置,其特征在于,所述數(shù)據(jù)校驗(yàn)單元還用于在校驗(yàn)所述差異數(shù)據(jù)時(shí),首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的共享數(shù)據(jù)更新裝置,其特征在于,所述數(shù)據(jù)校驗(yàn)單元還用于在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述獨(dú)立事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述獨(dú)立事務(wù)。
5.根據(jù)權(quán)利要求1至4中任一項(xiàng)所述的共享數(shù)據(jù)更新裝置,其特征在于,還包括數(shù)據(jù)查詢單元,用于對(duì)所述緩存數(shù)據(jù)庫(kù)表和所述基本數(shù)據(jù)庫(kù)表進(jìn)行查詢并定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。
6.一種共享數(shù)據(jù)更新方法,其特征在于,包括以下步驟 步驟402,將所述共享數(shù)據(jù)的匯總數(shù)據(jù)保存于基本數(shù)據(jù)庫(kù)表中,以及將所述共享數(shù)據(jù)的差異數(shù)據(jù)保存于緩存數(shù)據(jù)庫(kù)表中; 步驟404,計(jì)算本次更新操作引起所述共享數(shù)據(jù)的差異數(shù)據(jù)并采用獨(dú)立事務(wù)將所述差異數(shù)據(jù)插入至所述緩存數(shù)據(jù)庫(kù)表中; 步驟406,查詢所述基本數(shù)據(jù)庫(kù)表和所述緩存數(shù)據(jù)庫(kù)表校驗(yàn)所述差異數(shù)據(jù); 步驟408,根據(jù)校驗(yàn)結(jié)果確定是否提交所述獨(dú)立事務(wù)。
7.根據(jù)權(quán)利要求6所述的共享數(shù)據(jù)更新方法,其特征在于,所述步驟404還包括為所述本次更新操作引起的所述差異數(shù)據(jù)生成唯一緩存表遞增序列,根據(jù)所述獨(dú)立事務(wù)的發(fā)生時(shí)間確定所述唯一緩存表遞增序列的大小。
8.根據(jù)權(quán)利要求7所述的共享數(shù)據(jù)更新方法,其特征在于,所述步驟406還包括在校驗(yàn)所述差異數(shù)據(jù)時(shí),首先校驗(yàn)所述唯一緩存表遞增序列小于等于當(dāng)前序列值的差異數(shù)據(jù)。
9.根據(jù)權(quán)利要求6所述的共享數(shù)據(jù)更新方法,其特征在于,在所述校驗(yàn)結(jié)果為通過(guò)時(shí),提交所述獨(dú)立事務(wù),在所述校驗(yàn)結(jié)果為未通過(guò)時(shí),回滾所述獨(dú)立事務(wù)。
10.根據(jù)權(quán)利要求6至9中任一項(xiàng)所述的共享數(shù)據(jù)更新方法,其特征在于,所述步驟408還包括,定期將所述緩存數(shù)據(jù)庫(kù)表的數(shù)據(jù)匯總至所述基本數(shù)據(jù)庫(kù)表。
全文摘要
本發(fā)明提供了一種共享數(shù)據(jù)更新裝置,包括存儲(chǔ)單元,用于保存基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表,基本數(shù)據(jù)庫(kù)表用于保存共享數(shù)據(jù)的匯總數(shù)據(jù),緩存數(shù)據(jù)庫(kù)表用于保存共享數(shù)據(jù)的差異數(shù)據(jù);差異數(shù)據(jù)計(jì)算單元,計(jì)算本次更新操作引起共享數(shù)據(jù)的差異數(shù)據(jù);數(shù)據(jù)持久化單元,采用獨(dú)立事務(wù)將差異數(shù)據(jù)插入至緩存數(shù)據(jù)庫(kù)表中;數(shù)據(jù)校驗(yàn)單元,查詢基本數(shù)據(jù)庫(kù)表和緩存數(shù)據(jù)庫(kù)表校驗(yàn)差異數(shù)據(jù),根據(jù)校驗(yàn)結(jié)果確定是否提交獨(dú)立事務(wù)。本發(fā)明還提供了一種共享數(shù)據(jù)更新方法。根據(jù)本發(fā)明的技術(shù)方案,能夠在保證數(shù)據(jù)更新正確性的前提下,消除數(shù)據(jù)更新及校驗(yàn)過(guò)程的加鎖處理,從而提高系統(tǒng)支持的并發(fā)度。
文檔編號(hào)G06F17/30GK103020149SQ201210479818
公開(kāi)日2013年4月3日 申請(qǐng)日期2012年11月22日 優(yōu)先權(quán)日2012年11月22日
發(fā)明者陳倪娜 申請(qǐng)人:用友軟件股份有限公司