本發(fā)明涉及數(shù)據(jù)庫(kù)領(lǐng)域,特別涉及一種數(shù)據(jù)庫(kù)主備復(fù)制方法、裝置、設(shè)備及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
背景技術(shù):
1、mysql數(shù)據(jù)庫(kù)進(jìn)行主備復(fù)制時(shí),同步速度存在差異,mysql主數(shù)據(jù)庫(kù)的存儲(chǔ)速度是多線程支持并發(fā)的,但是備數(shù)據(jù)庫(kù)在同步到主數(shù)據(jù)的binlog(二進(jìn)制日志)后進(jìn)行binlog重放時(shí)是單線程的,因此,速度會(huì)比主數(shù)據(jù)庫(kù)慢,導(dǎo)致會(huì)存在主備復(fù)制延遲,如果主備復(fù)制延遲時(shí)間過長(zhǎng)將嚴(yán)重影響業(yè)務(wù),如數(shù)據(jù)一致性問題、讀寫分離效果降低、數(shù)據(jù)丟失風(fēng)險(xiǎn)高、故障恢復(fù)時(shí)間延長(zhǎng)、數(shù)據(jù)查詢性能下降、復(fù)制鏈路壓力增加等。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的在于提供一種數(shù)據(jù)庫(kù)主備復(fù)制方法、裝置、設(shè)備及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),應(yīng)用于數(shù)據(jù)庫(kù)領(lǐng)域,該方法實(shí)現(xiàn)事務(wù)的多線程分配及運(yùn)行,避免了提升備數(shù)據(jù)庫(kù)的同步效率,減少主備延遲,且通過雙層哈希表保證了協(xié)調(diào)器解析事務(wù)后分配子線程的效率,同時(shí)通過雙層降低了發(fā)生哈希碰撞的概率。
2、為解決上述技術(shù)問題,本發(fā)明提供一種數(shù)據(jù)庫(kù)主備復(fù)制方法,包括:
3、通過協(xié)調(diào)器在備數(shù)據(jù)庫(kù)所在服務(wù)器上創(chuàng)建多個(gè)子線程,為每個(gè)所述子線程構(gòu)建一個(gè)哈希表,將事務(wù)從主數(shù)據(jù)庫(kù)的binlog中同步至所述備數(shù)據(jù)庫(kù)的relay-log中;所述哈希表為雙層哈希表;
4、通過所述協(xié)調(diào)器解析所述relay-log中的事務(wù),確定事務(wù)中的改動(dòng)行及所述改動(dòng)行的行修改次數(shù),構(gòu)建所述改動(dòng)行的行標(biāo)識(shí);
5、確定所述行標(biāo)識(shí)的哈希值;所述行標(biāo)識(shí)的哈希值包括所述行標(biāo)識(shí)經(jīng)第一哈希算法運(yùn)算得到的第一哈希值及所述行標(biāo)識(shí)經(jīng)第二哈希算法運(yùn)算得到的第二哈希值;
6、當(dāng)所述行標(biāo)識(shí)的哈希值存儲(chǔ)在所述哈希表中時(shí),將存儲(chǔ)有所述行標(biāo)識(shí)的哈希值的所述哈希表確定為目標(biāo)哈希表;
7、當(dāng)所述行標(biāo)識(shí)的哈希值未存儲(chǔ)在所述哈希表中時(shí),隨機(jī)從所述哈希表中確定目標(biāo)哈希表,并將所述行標(biāo)識(shí)的哈希值存儲(chǔ)至所述目標(biāo)哈希表;
8、基于所述行修改次數(shù)更新所述目標(biāo)哈希表中對(duì)應(yīng)的value值,將事務(wù)分配至所述目標(biāo)哈希表的目標(biāo)子線程,當(dāng)所述目標(biāo)子線程中所述改動(dòng)行的執(zhí)行語句執(zhí)行完畢后,刪除所述目標(biāo)哈希表中所述行標(biāo)識(shí)的哈希值及對(duì)應(yīng)的value值。
9、可選的,所述當(dāng)所述行標(biāo)識(shí)的哈希值存儲(chǔ)在所述哈希表中時(shí),將存儲(chǔ)有所述行標(biāo)識(shí)的哈希值的所述哈希表確定為目標(biāo)哈希表,包括:
10、當(dāng)全部所述行標(biāo)識(shí)的哈希值存儲(chǔ)在一個(gè)所述哈希表中時(shí),將存儲(chǔ)有全部所述行標(biāo)識(shí)的哈希值的所述哈希表確定為所述目標(biāo)哈希表;
11、當(dāng)部分所述行標(biāo)識(shí)的哈希值存儲(chǔ)在一個(gè)所述哈希表中,且另一部分所述行標(biāo)識(shí)的哈希值未存儲(chǔ)在所述哈希表中時(shí),將存儲(chǔ)有部分所述行標(biāo)識(shí)的哈希值的所述哈希表確定為所述目標(biāo)哈希表;
12、當(dāng)全部所述行標(biāo)識(shí)的哈希值存儲(chǔ)在多個(gè)不同的所述哈希表中時(shí),將事務(wù)放入所述協(xié)調(diào)器中進(jìn)行等待,直至部分所述行標(biāo)識(shí)的哈希值存儲(chǔ)在一個(gè)所述哈希表中,且另一部分所述行標(biāo)識(shí)的哈希值未存儲(chǔ)在所述哈希表中。
13、可選的,所述構(gòu)建所述改動(dòng)行的行標(biāo)識(shí),包括:
14、基于所述改動(dòng)行的庫(kù)名、表名、唯一鍵和所述唯一鍵的值構(gòu)建所述改動(dòng)行的行標(biāo)識(shí);
15、或,基于所述改動(dòng)行的所述庫(kù)名、所述表名、唯一索引和所述唯一索引的值構(gòu)建所述改動(dòng)行的行標(biāo)識(shí)。
16、可選的,所述基于所述行修改次數(shù)更新所述目標(biāo)哈希表中對(duì)應(yīng)的value值,包括:
17、將所述目標(biāo)哈希表中所述行標(biāo)識(shí)的哈希值的value值加上對(duì)應(yīng)的行修改次數(shù)。
18、可選的,所述通過協(xié)調(diào)器在備數(shù)據(jù)庫(kù)所在服務(wù)器上創(chuàng)建多個(gè)子線程,包括:
19、基于服務(wù)器剩余資源通過所述協(xié)調(diào)器在服務(wù)器上創(chuàng)建多個(gè)所述子線程。
20、可選的,所述通過所述協(xié)調(diào)器解析所述relay-log中的事務(wù),包括:
21、基于事務(wù)id從小到大的順序通過所述協(xié)調(diào)器從所述relay-log查找并解析事務(wù)。
22、可選的,所述哈希表為雙層以上哈希表;相應(yīng)的,所述行標(biāo)識(shí)的哈希值包含兩個(gè)及以上哈希算法的運(yùn)算值。
23、為解決上述技術(shù)問題,本發(fā)明提供一種數(shù)據(jù)庫(kù)主備復(fù)制裝置,包括:
24、第一模塊,用于通過協(xié)調(diào)器在備數(shù)據(jù)庫(kù)所在服務(wù)器上創(chuàng)建多個(gè)子線程,為每個(gè)所述子線程構(gòu)建一個(gè)哈希表,將事務(wù)從主數(shù)據(jù)庫(kù)的binlog中同步至所述備數(shù)據(jù)庫(kù)的relay-log中;所述哈希表為雙層哈希表;
25、第二模塊,用于通過所述協(xié)調(diào)器解析所述relay-log中的事務(wù),確定事務(wù)中的改動(dòng)行及所述改動(dòng)行的行修改次數(shù),構(gòu)建所述改動(dòng)行的行標(biāo)識(shí);
26、第三模塊,用于確定所述行標(biāo)識(shí)的哈希值;所述行標(biāo)識(shí)的哈希值包括所述行標(biāo)識(shí)經(jīng)第一哈希算法運(yùn)算得到的第一哈希值及所述行標(biāo)識(shí)經(jīng)第二哈希算法運(yùn)算得到的第二哈希值;
27、第四模塊,用于當(dāng)所述行標(biāo)識(shí)的哈希值存儲(chǔ)在所述哈希表中時(shí),將存儲(chǔ)有所述行標(biāo)識(shí)的哈希值的所述哈希表確定為目標(biāo)哈希表;
28、第五模塊,用于當(dāng)所述行標(biāo)識(shí)的哈希值未存儲(chǔ)在所述哈希表中時(shí),隨機(jī)從所述哈希表中確定目標(biāo)哈希表,并將所述行標(biāo)識(shí)的哈希值存儲(chǔ)至所述目標(biāo)哈希表;
29、第六模塊,用于基于所述行修改次數(shù)更新所述目標(biāo)哈希表中對(duì)應(yīng)的value值,將事務(wù)分配至所述目標(biāo)哈希表的目標(biāo)子線程,當(dāng)所述目標(biāo)子線程中所述改動(dòng)行的執(zhí)行語句執(zhí)行完畢后,刪除所述目標(biāo)哈希表中所述行標(biāo)識(shí)的哈希值及對(duì)應(yīng)的value值。
30、為解決上述技術(shù)問題,本發(fā)明提供一種數(shù)據(jù)庫(kù)主備復(fù)制設(shè)備,包括:
31、存儲(chǔ)器,用于儲(chǔ)存計(jì)算機(jī)程序;
32、處理器,用于執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)所述數(shù)據(jù)庫(kù)主備復(fù)制方法。
33、為解決上述技術(shù)問題,本發(fā)明提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令被處理器執(zhí)行時(shí),實(shí)現(xiàn)所述數(shù)據(jù)庫(kù)主備復(fù)制方法。
34、可見,本發(fā)明方法通過協(xié)調(diào)器在備數(shù)據(jù)庫(kù)所在服務(wù)器上創(chuàng)建多個(gè)子線程,為每個(gè)子線程構(gòu)建一個(gè)哈希表,將事務(wù)從主數(shù)據(jù)庫(kù)的binlog中同步至備數(shù)據(jù)庫(kù)的relay-log中;哈希表為雙層哈希表;通過協(xié)調(diào)器解析relay-log中的事務(wù),確定事務(wù)中的改動(dòng)行及改動(dòng)行的行修改次數(shù),構(gòu)建改動(dòng)行的行標(biāo)識(shí);確定行標(biāo)識(shí)的哈希值;行標(biāo)識(shí)的哈希值包括行標(biāo)識(shí)經(jīng)第一哈希算法運(yùn)算得到的第一哈希值及所述行標(biāo)識(shí)經(jīng)第二哈希算法運(yùn)算得到的第二哈希值;當(dāng)行標(biāo)識(shí)的哈希值存儲(chǔ)在哈希表中時(shí),將存儲(chǔ)有行標(biāo)識(shí)的哈希值的哈希表確定為目標(biāo)哈希表;當(dāng)行標(biāo)識(shí)的哈希值未存儲(chǔ)在哈希表中時(shí),隨機(jī)從哈希表中確定目標(biāo)哈希表,并將行標(biāo)識(shí)的哈希值存儲(chǔ)至目標(biāo)哈希表;基于行修改次數(shù)更新目標(biāo)哈希表中對(duì)應(yīng)的value值,當(dāng)目標(biāo)子線程中改動(dòng)行的執(zhí)行語句執(zhí)行完畢后,刪除目標(biāo)哈希表中行標(biāo)識(shí)的哈希值及對(duì)應(yīng)的value值。
35、本發(fā)明方法通過雙層哈希表實(shí)現(xiàn)事務(wù)的多線程分配及運(yùn)行,提升備數(shù)據(jù)庫(kù)的同步效率,減少主備延遲,且通過雙層哈希表保證了協(xié)調(diào)器解析事務(wù)后分配子線程的效率,同時(shí)降低了發(fā)生哈希碰撞的概率。
1.一種數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述當(dāng)所述行標(biāo)識(shí)的哈希值存儲(chǔ)在所述哈希表中時(shí),將存儲(chǔ)有所述行標(biāo)識(shí)的哈希值的所述哈希表確定為目標(biāo)哈希表,包括:
3.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述構(gòu)建所述改動(dòng)行的行標(biāo)識(shí),包括:
4.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述基于所述行修改次數(shù)更新所述目標(biāo)哈希表中對(duì)應(yīng)的value值,包括:
5.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述通過協(xié)調(diào)器在備數(shù)據(jù)庫(kù)所在服務(wù)器上創(chuàng)建多個(gè)子線程,包括:
6.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述通過所述協(xié)調(diào)器解析所述relay-log中的事務(wù),包括:
7.根據(jù)權(quán)利要求1所述數(shù)據(jù)庫(kù)主備復(fù)制方法,其特征在于,所述哈希表為雙層以上哈希表;相應(yīng)的,所述行標(biāo)識(shí)的哈希值包含兩個(gè)及以上哈希算法的運(yùn)算值。
8.一種數(shù)據(jù)庫(kù)主備復(fù)制裝置,其特征在于,包括:
9.一種數(shù)據(jù)庫(kù)主備復(fù)制設(shè)備,其特征在于,包括:
10.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令,所述計(jì)算機(jī)可執(zhí)行指令被處理器執(zhí)行時(shí),實(shí)現(xiàn)如權(quán)利要求1至7任一項(xiàng)所述數(shù)據(jù)庫(kù)主備復(fù)制方法。