本發(fā)明涉及數(shù)據(jù)庫(kù),具體地涉及一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制方法、裝置、設(shè)備、介質(zhì)。
背景技術(shù):
1、事務(wù)用于執(zhí)行一系列操作,這些操作作為一個(gè)整體被執(zhí)行,以保證數(shù)據(jù)庫(kù)狀態(tài)的完整性和一致性。在數(shù)據(jù)庫(kù)管理中,為了保證事務(wù)可以并發(fā)讀寫數(shù)據(jù)庫(kù),通常通過撤銷日志(undo?log)記錄數(shù)據(jù)在事務(wù)開始之前的狀態(tài),以便在需要回滾(rollback)時(shí)撤銷更改。在事務(wù)a更新某一數(shù)據(jù)時(shí),其他事務(wù)可以通過undo?log獲取事務(wù)a操作之前的數(shù)據(jù)版本。
2、在實(shí)現(xiàn)本發(fā)明的構(gòu)思過程中,相關(guān)技術(shù)中至少存在如下問題,undo?log需要以頁(yè)(page)的形式保存到外存中,以防止數(shù)據(jù)丟失,在其他事務(wù)讀取被事務(wù)a操作的數(shù)據(jù)時(shí),需要將保存有與被操作數(shù)據(jù)對(duì)應(yīng)的undo?log以頁(yè)的形式調(diào)入內(nèi)存,由于所調(diào)入的一個(gè)或多個(gè)頁(yè)中除了事務(wù)讀取所需要的undo?log之外,還包括其他不需要的undo?log,因此,對(duì)所需要的數(shù)據(jù)的讀取會(huì)被放大為對(duì)整頁(yè)數(shù)據(jù)的讀寫,從而產(chǎn)生較大粒度的爭(zhēng)搶,影響事務(wù)的處理效率。
技術(shù)實(shí)現(xiàn)思路
1、鑒于上述問題,本發(fā)明提供了一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制方法、裝置、設(shè)備、介質(zhì)。
2、根據(jù)本發(fā)明的第一個(gè)方面,提供了一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制方法,包括:根據(jù)目標(biāo)數(shù)據(jù)行的第一版本和第二版本,確定上述目標(biāo)數(shù)據(jù)行的差異信息,其中,上述目標(biāo)數(shù)據(jù)行的第二版本是通過第一事務(wù)對(duì)上述第一版本進(jìn)行修改后得到的;將上述差異信息作為最新的行版本信息,寫入與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的未提交版本數(shù)據(jù)鏈,其中,上述未提交版本數(shù)據(jù)鏈包括至少一個(gè)行版本信息,上述至少一個(gè)行版本信息是通過執(zhí)行上述第一事務(wù)得到的;在接收到表征上述第一事務(wù)提交成功的反饋信號(hào)的情況下,根據(jù)上述未提交版本數(shù)據(jù)鏈,生成與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本信息,并將上述已提交行版本信息寫入與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本鏈。
3、根據(jù)本發(fā)明的實(shí)施例,上述根據(jù)上述未提交版本數(shù)據(jù)鏈,生成與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本信息,包括:在上述未提交版本數(shù)據(jù)鏈包括多個(gè)上述行版本信息的情況下,根據(jù)上述多個(gè)上述行版本信息在上述未提交版本數(shù)據(jù)鏈中的寫入順序,合并多個(gè)上述行版本信息;以及基于提交上述第一事務(wù)的第一時(shí)間戳和合并后的行版本信息,生成上述已提交行版本信息。
4、根據(jù)本發(fā)明的實(shí)施例,上述方法還包括:響應(yīng)于接收到的第二事務(wù)讀取目標(biāo)數(shù)據(jù)行的數(shù)據(jù)讀取請(qǐng)求,基于上述第二事務(wù)的第二時(shí)間戳,從上述已提交行版本鏈中確定至少一個(gè)待回滾行版本信息;以及基于上述待回滾行版本信息和上述目標(biāo)數(shù)據(jù)行的第三版本進(jìn)行數(shù)據(jù)回滾,得到目標(biāo)版本的目標(biāo)數(shù)據(jù)行,其中,上述目標(biāo)數(shù)據(jù)行的第三版本是目標(biāo)事務(wù)提交后得到的版本,上述目標(biāo)事務(wù)是針對(duì)上述目標(biāo)數(shù)據(jù)行的多個(gè)提交事務(wù)中最新提交的事務(wù)。
5、根據(jù)本發(fā)明的實(shí)施例,上述基于上述第二事務(wù)的第二時(shí)間戳,從上述已提交行版本鏈中確定至少一個(gè)待回滾行版本信息,包括:基于上述第二時(shí)間戳,從上述已提交行版本鏈中確定目標(biāo)行版本信息,其中,上述目標(biāo)行版本信息為上述已提交行版本鏈中位于上述第二時(shí)間戳前的最新的已提交行版本信息;以及根據(jù)上述目標(biāo)行版本信息,和第一時(shí)間戳大于上述第二時(shí)間戳的上述已提交行版本信息,確定至少一個(gè)上述待回滾行版本信息。
6、根據(jù)本發(fā)明的實(shí)施例,上述將上述已提交行版本信息寫入與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本鏈,包括:在上述已提交行版本鏈中存在至少一個(gè)歷史已提交行版本信息的情況下,將上述已提交行版本鏈的讀指針更新為與上述已提交行版本信息對(duì)應(yīng)的內(nèi)存地址;其中,上述歷史已提交行版本信息為通過至少一個(gè)事務(wù)提交的行版本信息;將與上述歷史已提交行版本信息對(duì)應(yīng)的節(jié)點(diǎn),作為與上述已提交行版本信息對(duì)應(yīng)節(jié)點(diǎn)的后繼節(jié)點(diǎn),以保證上述歷史已提交行版本信息和上述已提交行版本信息的存儲(chǔ)順序。
7、根據(jù)本發(fā)明的實(shí)施例,上述方法還包括:在接收到表征上述第一事務(wù)提交成功的反饋信號(hào)的情況下,獲取每個(gè)活躍事務(wù)的事務(wù)開始時(shí)間戳;基于每個(gè)上述事務(wù)開始時(shí)間戳對(duì)上述已提交行版本鏈進(jìn)行清理。
8、根據(jù)本發(fā)明的實(shí)施例,上述方法還包括:確定通過上述第一事務(wù)對(duì)上述目標(biāo)數(shù)據(jù)行進(jìn)行修改的修改類型;基于上述第一時(shí)間戳、上述修改類型,和合并后的行版本信息,生成上述已提交行版本信息。
9、本發(fā)明的第二方面提供了一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制裝置,上述裝置包括:差異確定模塊,用于根據(jù)目標(biāo)數(shù)據(jù)行的第一版本和第二版本,確定上述目標(biāo)數(shù)據(jù)行的差異信息,其中,上述目標(biāo)數(shù)據(jù)行的第二版本是通過第一事務(wù)對(duì)上述第一版本進(jìn)行修改后得到的;信息寫入模塊,用于將上述差異信息作為最新的行版本信息,寫入與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的未提交版本數(shù)據(jù)鏈,其中,上述未提交版本數(shù)據(jù)鏈包括至少一個(gè)行版本信息,上述至少一個(gè)行版本信息是通過執(zhí)行上述第一事務(wù)得到的;版本寫入模塊,用于在接收到表征上述第一事務(wù)提交成功的反饋信號(hào)的情況下,根據(jù)上述未提交版本數(shù)據(jù)鏈,生成與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本信息,并將上述已提交行版本信息寫入與上述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本鏈。
10、本發(fā)明的第三方面提供了一種電子設(shè)備,包括:一個(gè)或多個(gè)處理器;存儲(chǔ)器,用于存儲(chǔ)一個(gè)或多個(gè)計(jì)算機(jī)程序,其中,上述一個(gè)或多個(gè)處理器執(zhí)行上述一個(gè)或多個(gè)計(jì)算機(jī)程序以實(shí)現(xiàn)上述方法的步驟。
11、本發(fā)明的第四方面還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序或指令,上述計(jì)算機(jī)程序或指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述方法的步驟。
12、根據(jù)本發(fā)明的實(shí)施例,通過未提交版本數(shù)據(jù)鏈記錄第一事務(wù)未提交時(shí),因第一事務(wù)對(duì)目標(biāo)數(shù)據(jù)行修改而產(chǎn)生的差異,便于在第一事務(wù)提交失敗的情況下,基于未提交版本數(shù)據(jù)鏈中的行版本信息進(jìn)行數(shù)據(jù)回滾以保證第一事務(wù)在目標(biāo)數(shù)據(jù)行上的原子性。此外,在第一事務(wù)成功提交的情況下,根據(jù)未提交版本數(shù)據(jù)鏈,生成與目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本信息,并將已提交行版本信息寫入與目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本鏈,以保存目標(biāo)數(shù)據(jù)行的多個(gè)版本。未提交版本數(shù)據(jù)鏈和已提交行版本鏈都存儲(chǔ)在內(nèi)存中,無需借助undolog獲取不同事務(wù)修改前的目標(biāo)數(shù)據(jù)行的數(shù)據(jù),降低了數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)外存的訪問次數(shù),從而提高了事務(wù)的處理效率。
1.一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述未提交版本數(shù)據(jù)鏈,生成與所述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本信息,包括:
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括:
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述基于所述第二事務(wù)的第二時(shí)間戳,從所述已提交行版本鏈中確定至少一個(gè)待回滾行版本信息,包括:
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述已提交行版本信息寫入與所述目標(biāo)數(shù)據(jù)行對(duì)應(yīng)的已提交行版本鏈,包括:
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述方法還包括:
7.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述方法還包括:
8.一種數(shù)據(jù)庫(kù)的多版本并發(fā)控制裝置,其特征在于,所述裝置包括:
9.一種電子設(shè)備,包括:
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序或指令,其特征在于,所述計(jì)算機(jī)程序或指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)根據(jù)權(quán)利要求1~7中任一項(xiàng)所述方法的步驟。