本申請涉及數(shù)據(jù)庫,尤其涉及一種數(shù)據(jù)庫事務(wù)內(nèi)insert?select的并行插入方法和裝置。
背景技術(shù):
1、insert?select語法允許從一個表中選擇數(shù)據(jù),并將其插入到另一個表中,這個功能非常適用于需要從一個表中復(fù)制數(shù)據(jù)到另一個表的情況,或者將查詢結(jié)果存儲到新的表中,insert?select導(dǎo)入通過查詢源表數(shù)據(jù)并逐行插入目標(biāo)表來實現(xiàn),即insert?select采用串行方式插入數(shù)據(jù)。insert?select的導(dǎo)入速率和源表的數(shù)據(jù)量成正比,在源表數(shù)據(jù)量級龐大時,數(shù)據(jù)導(dǎo)入需要耗費大量時間,導(dǎo)致數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)入性能低。
技術(shù)實現(xiàn)思路
1、本申請?zhí)峁┝艘环N數(shù)據(jù)庫事務(wù)內(nèi)insert?select的并行插入方法和裝置,以解決數(shù)據(jù)庫中數(shù)據(jù)導(dǎo)入性能低的問題。
2、第一方面,本申請?zhí)峁┝艘环N數(shù)據(jù)庫中insert?select的并行插入方法,所述方法包括:
3、在接收到終端發(fā)送的insert?select請求時,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間,其中,所述insert?select請求用于將所述源表中的數(shù)據(jù)復(fù)制到目標(biāo)表中;
4、通過所述主線程創(chuàng)建與數(shù)據(jù)區(qū)間的數(shù)量具有相同數(shù)量的子線程,其中,所述主線程也作為一個子線程;
5、將每個所述數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)分配給一個子線程,并控制多個子線程對所述目標(biāo)表并發(fā)執(zhí)行插入操作,其中,每個子線程用于將對應(yīng)數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)串行插入所述目標(biāo)表。
6、可選地,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間之前,所述方法還包括:
7、通過所述數(shù)據(jù)庫的主線程獲取所述源表中的數(shù)據(jù)量和所述數(shù)據(jù)庫的系統(tǒng)資源;
8、根據(jù)所述數(shù)據(jù)量和所述系統(tǒng)資源確定數(shù)據(jù)并行插入的并行度;
9、采用數(shù)據(jù)庫直方圖對所述源表中的數(shù)據(jù)分布進(jìn)行解析,得到多個初始的數(shù)據(jù)區(qū)間;
10、若所述并行度與所述初始的數(shù)據(jù)區(qū)間之間的數(shù)量差值小于設(shè)定差值,則按照所述并行度對所述初始的數(shù)據(jù)區(qū)間進(jìn)行調(diào)整,得到最終的數(shù)據(jù)區(qū)間。
11、可選地,得到多個初始的數(shù)據(jù)區(qū)間之后,所述方法還包括:
12、若所述并行度與所述初始的數(shù)據(jù)區(qū)間之間的數(shù)量差值大于或等于設(shè)定差值,則將所述初始的數(shù)據(jù)區(qū)間作為最終的數(shù)據(jù)區(qū)間。
13、可選地,采用數(shù)據(jù)庫直方圖對所述源表中的數(shù)據(jù)分布進(jìn)行解析,得到多個初始的數(shù)據(jù)區(qū)間的過程中,所述方法還包括:
14、實時檢測所述源表中是否發(fā)生數(shù)據(jù)操作;
15、若檢測到發(fā)生數(shù)據(jù)操作,則重新采用所述數(shù)據(jù)庫直方圖對調(diào)整后的數(shù)據(jù)分布進(jìn)行解析,得到調(diào)整后的數(shù)據(jù)區(qū)間。
16、可選地,所述數(shù)據(jù)庫為分布式數(shù)據(jù)庫,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間包括:
17、若所述源表中未創(chuàng)建數(shù)據(jù)庫直方圖,則查詢所述分布式數(shù)據(jù)庫中全部數(shù)據(jù)節(jié)點;
18、統(tǒng)計所述全部數(shù)據(jù)節(jié)點的總數(shù)據(jù)量;
19、按照所述并行度對所述總數(shù)據(jù)量進(jìn)行等量拆分,并將拆分后的每段數(shù)據(jù)插入一個數(shù)據(jù)區(qū)間中。
20、可選地,控制多個子線程對所述目標(biāo)表并發(fā)執(zhí)行插入操作包括:
21、控制多個子線程將所述源表中對應(yīng)數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)并發(fā)插入到所述目標(biāo)表,其中,所述多個子線程位于一個事務(wù)中,數(shù)據(jù)插入操作能夠撤銷;
22、控制多個子線程進(jìn)行數(shù)據(jù)提交,其中,所述數(shù)據(jù)提交用于將所述源表中的數(shù)據(jù)永久保存到所述目標(biāo)表中。
23、可選地,所述數(shù)據(jù)庫為分布式數(shù)據(jù)庫,控制多個子線程進(jìn)行數(shù)據(jù)提交之前,所述方法還包括:
24、若檢測到對所述源表中設(shè)定數(shù)據(jù)的查詢操作,則確定所述設(shè)定數(shù)據(jù)所在的分布式數(shù)據(jù)庫中設(shè)定事務(wù)的狀態(tài);
25、若所述設(shè)定事務(wù)為活躍狀態(tài),則禁止對所述設(shè)定事務(wù)中的數(shù)據(jù)進(jìn)行查詢,其中,所述活躍狀態(tài)用于指示至少部分子線程提交失?。?/p>
26、若所述設(shè)定事務(wù)為非活躍狀態(tài),則允許對所述設(shè)定事務(wù)中的數(shù)據(jù)進(jìn)行查詢,其中,所述非活躍狀態(tài)用于指示全部子線程提交成功。
27、第二方面,本申請?zhí)峁┝艘环N數(shù)據(jù)庫事務(wù)內(nèi)insert?select的并行插入裝置,所述裝置包括:
28、拆分模塊,用于在接收到終端發(fā)送的insert?select請求時,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間,其中,所述insert?select請求用于將所述源表中的數(shù)據(jù)復(fù)制到目標(biāo)表中;
29、創(chuàng)建模塊,用于通過所述主線程創(chuàng)建與數(shù)據(jù)區(qū)間的數(shù)量具有相同數(shù)量的子線程,其中,所述主線程也作為一個子線程;
30、插入模塊,用于將每個所述數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)分配給一個子線程,并控制多個子線程對所述目標(biāo)表并發(fā)執(zhí)行插入操作,其中,每個子線程用于將對應(yīng)數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)串行插入所述目標(biāo)表。
31、第三方面,本申請?zhí)峁┝艘环N電子設(shè)備,包括:至少一個通信接口;與所述至少一個通信接口相連接的至少一個總線;與所述至少一個總線相連接的至少一個處理器;與所述至少一個總線相連接的至少一個存儲器。
32、第四方面,本申請還提供了一種計算機存儲介質(zhì),存儲有計算機可執(zhí)行指令,所述計算機可執(zhí)行指令用于執(zhí)行本申請上述任一項所述的數(shù)據(jù)庫事務(wù)內(nèi)insert?select的并行插入方法。
33、本申請實施例提供的上述技術(shù)方案與現(xiàn)有技術(shù)相比具有如下優(yōu)點:將源表數(shù)據(jù)拆分到多個數(shù)據(jù)區(qū)間,通過多個子線程對多個數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)執(zhí)行并發(fā)插入操作,實現(xiàn)源表中的數(shù)據(jù)并發(fā)插入到目標(biāo)表中,相對于現(xiàn)有技術(shù)的串行插入,本申請中的并行插入提高數(shù)據(jù)庫中insert?select效率,提高數(shù)據(jù)庫中數(shù)據(jù)的導(dǎo)入性能。
1.一種數(shù)據(jù)庫中insert?select的并行插入方法,其特征在于,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間之前,所述方法還包括:
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,得到多個初始的數(shù)據(jù)區(qū)間之后,所述方法還包括:
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,采用數(shù)據(jù)庫直方圖對所述源表中的數(shù)據(jù)分布進(jìn)行解析,得到多個初始的數(shù)據(jù)區(qū)間的過程中,所述方法還包括:
5.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述數(shù)據(jù)庫為分布式數(shù)據(jù)庫,通過數(shù)據(jù)庫的主線程將源表中的數(shù)據(jù)拆分至不同的數(shù)據(jù)區(qū)間包括:
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,控制多個子線程對所述目標(biāo)表并發(fā)執(zhí)行插入操作包括:
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述數(shù)據(jù)庫為分布式數(shù)據(jù)庫,控制多個子線程進(jìn)行數(shù)據(jù)提交之前,所述方法還包括:
8.一種數(shù)據(jù)庫事務(wù)內(nèi)insert?select的并行插入裝置,其特征在于,所述裝置包括:
9.一種電子設(shè)備,其特征在于,包括處理器、通信接口、存儲器和通信總線,其中,處理器,通信接口,存儲器通過通信總線完成相互間的通信;
10.一種計算機可讀存儲介質(zhì),其特征在于,所述計算機可讀存儲介質(zhì)內(nèi)存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)權(quán)利要求1-7任一所述的方法。