亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

并發(fā)主從同步方法及裝置與流程

文檔序號(hào):12465042閱讀:168來源:國知局
并發(fā)主從同步方法及裝置與流程

本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種并發(fā)主從同步方法及裝置。



背景技術(shù):

分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)就是將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的設(shè)備上,也就是說,針對(duì)一份數(shù)據(jù),存儲(chǔ)至N個(gè)數(shù)據(jù)庫上,一般是存儲(chǔ)至一個(gè)主數(shù)據(jù)庫和多個(gè)從數(shù)據(jù)庫,其中,從數(shù)據(jù)庫中的數(shù)據(jù)是與主數(shù)據(jù)庫進(jìn)行同步獲得的。

現(xiàn)有技術(shù)中主數(shù)據(jù)庫和從數(shù)據(jù)庫之間的數(shù)據(jù)同步過程具體為,主數(shù)據(jù)庫接收到客戶端寫數(shù)據(jù)的請求后,將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將寫數(shù)據(jù)操作記錄到主數(shù)據(jù)庫的日志文件中。隨后,主數(shù)據(jù)庫向從數(shù)據(jù)庫發(fā)送數(shù)據(jù)同步任務(wù),從數(shù)據(jù)庫根據(jù)數(shù)據(jù)同步任務(wù)執(zhí)行將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,以及將寫數(shù)據(jù)操作記錄到從數(shù)據(jù)庫的日志文件中。在該數(shù)據(jù)同步過程中,從數(shù)據(jù)庫只有一個(gè)線程用于處理主數(shù)據(jù)庫發(fā)送的數(shù)據(jù)同步任務(wù)。該線程接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),需要串行執(zhí)行數(shù)據(jù)同步任務(wù)所涉及的寫數(shù)據(jù)操作和寫日志操作。在短時(shí)間內(nèi)數(shù)據(jù)同步任務(wù)過多的情況下,線程無法及時(shí)地處理數(shù)據(jù)同步任務(wù),造成從數(shù)據(jù)庫同步效率低下的問題,導(dǎo)致出現(xiàn)主數(shù)據(jù)庫和從數(shù)據(jù)庫的數(shù)據(jù)不一致的情況。



技術(shù)實(shí)現(xiàn)要素:

鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的并發(fā)主從同步方法和相應(yīng)的并發(fā)主從同步裝置。

根據(jù)本發(fā)明的一個(gè)方面,提供了一種并發(fā)主從同步方法,其包括:

接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;

在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

根據(jù)本發(fā)明的另一方面,提供了一種并發(fā)主從同步裝置,其包括:

接收模塊,適于接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;

分發(fā)模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊執(zhí)行;

串行處理模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作;

多個(gè)并行處理模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

根據(jù)本發(fā)明提供的方案,接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。上述方案可以利用從數(shù)據(jù)庫的多個(gè)第一線程執(zhí)行數(shù)據(jù)同步任務(wù),提高了數(shù)據(jù)同步速度,克服了從數(shù)據(jù)庫單線程執(zhí)行數(shù)據(jù)同步任務(wù)造成的主數(shù)據(jù)庫與從數(shù)據(jù)庫中數(shù)據(jù)顯著不同步問題,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作,保證了在日志文件按照接收數(shù)據(jù)同步任務(wù)的順序記錄數(shù)據(jù)操作,從而在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù)。

上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。

附圖說明

通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:

圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并發(fā)主從同步方法的流程示意圖;

圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的并發(fā)主從同步方法的流程示意圖;

圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并發(fā)主從同步裝置的結(jié)構(gòu)示意圖;

圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的并發(fā)主從同步裝置的結(jié)構(gòu)示意圖。

具體實(shí)施方式

下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。

圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并發(fā)主從同步方法的流程示意圖。如圖1所示,該方法包括以下步驟:

步驟S100,接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作。

數(shù)據(jù)寫入主數(shù)據(jù)庫后,主數(shù)據(jù)庫需要將寫入的數(shù)據(jù)同步給從數(shù)據(jù)庫,因此,主數(shù)據(jù)庫向從數(shù)據(jù)庫發(fā)送數(shù)據(jù)同步任務(wù),而從數(shù)據(jù)庫接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù)。

數(shù)據(jù)同步任務(wù)是根據(jù)寫入主數(shù)據(jù)庫的數(shù)據(jù)而生成的,也就是說針對(duì)寫入主數(shù)據(jù)庫的任一數(shù)據(jù)都將生成相應(yīng)的數(shù)據(jù)同步任務(wù)。其中,可并行執(zhí)行的第一操作為用于將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,需串行執(zhí)行的第二操作為用于將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作。

步驟S101,在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

其中,第一狀態(tài)可以為只讀狀態(tài),從數(shù)據(jù)庫處于只讀狀態(tài)下時(shí),只允許客戶端讀取從數(shù)據(jù)庫的數(shù)據(jù),而不允許客戶端直接向從數(shù)據(jù)庫寫數(shù)據(jù),此時(shí),可以將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

根據(jù)本發(fā)明上述實(shí)施例提供的方法,接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。上述方案可以利用從數(shù)據(jù)庫的多個(gè)第一線程執(zhí)行數(shù)據(jù)同步任務(wù),提高了數(shù)據(jù)同步速度,克服了從數(shù)據(jù)庫單線程執(zhí)行數(shù)據(jù)同步任務(wù)造成的主數(shù)據(jù)庫與從數(shù)據(jù)庫中數(shù)據(jù)顯著不同步問題,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作,保證了在日志文件按照接收數(shù)據(jù)同步任務(wù)的順序記錄數(shù)據(jù)操作,從而在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù)。

圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的并發(fā)主從同步方法的流程示意圖。如圖2所示,該方法包括以下步驟:

步驟S200,接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作。

數(shù)據(jù)寫入主數(shù)據(jù)庫后,主數(shù)據(jù)庫需要將寫入的數(shù)據(jù)同步給從數(shù)據(jù)庫,因此,主數(shù)據(jù)庫向從數(shù)據(jù)庫發(fā)送數(shù)據(jù)同步任務(wù),而從數(shù)據(jù)庫接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù)。

數(shù)據(jù)同步任務(wù)是根據(jù)寫入主數(shù)據(jù)庫的數(shù)據(jù)而生成的,也就是說針對(duì)寫入主數(shù)據(jù)庫的任一數(shù)據(jù)都將生成相應(yīng)的數(shù)據(jù)同步任務(wù)。其中,可并行執(zhí)行的第一操作為用于將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,需串行執(zhí)行的第二操作為用于將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作。其中,日志文件用于記錄數(shù)據(jù)寫操作記錄,以在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù)。因此,要求記錄到日志文件中的寫數(shù)據(jù)操作記錄是按照接收數(shù)據(jù)同步任務(wù)的順序執(zhí)行的。

步驟S201,在從數(shù)據(jù)庫處于第一狀態(tài)下,依據(jù)負(fù)載均衡策略,從多個(gè)第一線程選擇一個(gè)第一線程。

第一狀態(tài)可以為只讀狀態(tài),從數(shù)據(jù)庫處于只讀狀態(tài)下時(shí),只允許客戶端讀取從數(shù)據(jù)庫的數(shù)據(jù),而不允許客戶端直接向從數(shù)據(jù)庫寫數(shù)據(jù),在從數(shù)據(jù)庫處于只讀狀態(tài)下時(shí),依據(jù)負(fù)載均衡策略,從多個(gè)第一線程選擇一個(gè)第一線程,其中,負(fù)載均衡策略指多個(gè)第一線程的業(yè)務(wù)負(fù)載壓力均衡,而不會(huì)出現(xiàn)有些第一線程的業(yè)務(wù)負(fù)載壓力很大,而有些第一線程的業(yè)務(wù)負(fù)載壓力很小的情況。

具體地,在接收到來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù)后,從數(shù)據(jù)庫處于第一狀態(tài)下時(shí),需要從多個(gè)第一線程中選擇一個(gè)合適的第一線程來執(zhí)行第一操作,選擇第一線程的依據(jù)是負(fù)載均衡策略,目的是為了平衡各個(gè)第一線程之間的業(yè)務(wù)負(fù)載壓力,使得各個(gè)第一線程的業(yè)務(wù)負(fù)載壓力基本均衡。

步驟S202,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給所選擇的第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

在依據(jù)負(fù)載均衡策略從多個(gè)第一線程選擇了一個(gè)第一線程后,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給所選擇的第一線程執(zhí)行,數(shù)據(jù)同步任務(wù)中的第二操作由第二線程執(zhí)行。

從數(shù)據(jù)庫接收的數(shù)據(jù)同步任務(wù)可以是多個(gè),也就是說,可以依據(jù)負(fù)載均衡策略選擇多個(gè)第一線程執(zhí)行數(shù)據(jù)同步任務(wù)的第一操作,但是多個(gè)數(shù)據(jù)同步任務(wù)的第二操作還只由第二線程執(zhí)行。

在本發(fā)明實(shí)施例中,可以有一用于接收數(shù)據(jù)同步任務(wù)的線程,由該線程將數(shù)據(jù)任務(wù)中的第一操作分發(fā)給第一線程,由第一線程執(zhí)行第一操作,將數(shù)據(jù)任務(wù)中的第二操作分發(fā)給第二線程,由第二線程執(zhí)行第二操作;當(dāng)然,用于接收數(shù)據(jù)同步任務(wù)的線程也可以是第二線程,由第二線程接收數(shù)據(jù)同步任務(wù),然后,第二線程將數(shù)據(jù)任務(wù)中的第一操作分發(fā)給第一線程,由第一線程執(zhí)行第一操作,第二線程本身執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。這里不做具體限定,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需要進(jìn)行設(shè)定。

此外,在從數(shù)據(jù)庫處于第一狀態(tài)下,針對(duì)不同數(shù)據(jù),各個(gè)第一線程可以并行執(zhí)行將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,而不會(huì)對(duì)寫入從數(shù)據(jù)庫的數(shù)據(jù)造成任何影響,然而,針對(duì)同一數(shù)據(jù)的將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作還需要分發(fā)給同一個(gè)第一線程,也就是說,針對(duì)同一數(shù)據(jù),將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作也應(yīng)該是由第一線程串行執(zhí)行的,目的是防止分發(fā)給不同的第一線程處理,導(dǎo)致從數(shù)據(jù)庫的數(shù)據(jù)與主數(shù)據(jù)庫的數(shù)據(jù)不一致的情況出現(xiàn)。

步驟S203,在從數(shù)據(jù)庫處于第二狀態(tài)下,按照接收數(shù)據(jù)同步任務(wù)的順序,為數(shù)據(jù)同步任務(wù)設(shè)置令牌。

第二狀態(tài)為非只讀狀態(tài),從數(shù)據(jù)庫處于非只讀狀態(tài)下時(shí),不僅允許客戶端讀取從數(shù)據(jù)庫的數(shù)據(jù),還允許客戶端直接向從數(shù)據(jù)庫寫數(shù)據(jù),在從數(shù)據(jù)庫處于非只讀狀態(tài)下時(shí),按照接收數(shù)據(jù)同步任務(wù)的順序,為數(shù)據(jù)同步任務(wù)設(shè)置令牌。

具體地,令牌標(biāo)示了數(shù)據(jù)同步任務(wù)的執(zhí)行順序,只有排序在前的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)被執(zhí)行后,才可以執(zhí)行排序在后的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)。

主數(shù)據(jù)庫可以實(shí)時(shí)將數(shù)據(jù)同步任務(wù)發(fā)送給從數(shù)據(jù)庫,也就是說,從數(shù)據(jù)庫可以不斷地接收到主數(shù)據(jù)庫發(fā)送的數(shù)據(jù)同步任務(wù),主數(shù)據(jù)庫是按照數(shù)據(jù)寫入主數(shù)據(jù)庫的順序向從數(shù)據(jù)庫發(fā)送數(shù)據(jù)同步任務(wù),因此,在為數(shù)據(jù)同步任務(wù)設(shè)置令牌時(shí),也需要按照接收數(shù)據(jù)同步任務(wù)的順序來設(shè)置令牌。舉例說明,主數(shù)據(jù)庫順序向從數(shù)據(jù)庫發(fā)送了4個(gè)數(shù)據(jù)同步任務(wù),分別為:Set a=1;Set b=2;Set c=1;Set a=4,那么,從數(shù)據(jù)庫接收到的數(shù)據(jù)同步任務(wù)順序?yàn)椋篠et a=1;Set b=2;Set c=1;Set a=4,這樣,從數(shù)據(jù)庫可以按照接收數(shù)據(jù)同步任務(wù)的順序,為數(shù)據(jù)同步任務(wù)設(shè)置令牌,例如,分別設(shè)置4個(gè)數(shù)據(jù)同步任務(wù)的令牌為1、2、3、4。

這樣,只有在令牌1對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)被執(zhí)行完成后,才可以執(zhí)行令牌2對(duì)應(yīng)的數(shù)據(jù)同步任務(wù),若令牌1對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)還未被執(zhí)行,則不能執(zhí)行令牌2對(duì)應(yīng)的數(shù)據(jù)同步任務(wù),同理,以此類推,執(zhí)行令牌3和4對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)。在本發(fā)明實(shí)施例中,為數(shù)據(jù)同步任務(wù)設(shè)置令牌,保證了在數(shù)據(jù)同步過程中不會(huì)出現(xiàn)同步至從數(shù)據(jù)庫的數(shù)據(jù)與寫入到主數(shù)據(jù)庫的數(shù)據(jù)不一致的缺陷。

步驟S204,將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給多個(gè)第一線程中一個(gè)第一線程。

具體地,可以依據(jù)負(fù)載均衡策略,從多個(gè)第一線程選擇一個(gè)第一線程,將設(shè)置于令牌的數(shù)據(jù)同步任務(wù)分發(fā)給所選擇的第一線程,由該第一線程來執(zhí)行數(shù)據(jù)同步任務(wù)。

在從數(shù)據(jù)庫處于第二狀態(tài)下,各個(gè)第一線程之間執(zhí)行的第一操作為并行操作;各個(gè)第一線程之間執(zhí)行的第二操作為串行操作。針對(duì)不同數(shù)據(jù),各個(gè)第一線程可以并行執(zhí)行將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,而不會(huì)對(duì)寫入從數(shù)據(jù)庫的數(shù)據(jù)造成任何影響,各個(gè)第一線程在執(zhí)行將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作時(shí),需要串行執(zhí)行。

此外,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)分發(fā)給同一第一線程,也就是說,針對(duì)同一數(shù)據(jù),將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作也應(yīng)該是由線程串行執(zhí)行的,目的是防止分發(fā)給不同的線程處理,導(dǎo)致從數(shù)據(jù)庫的數(shù)據(jù)與主數(shù)據(jù)的數(shù)據(jù)不一致的情況出現(xiàn)。

其中,每個(gè)第一線程分別定義了可以執(zhí)行并行操作和串行操作的函數(shù),舉例說明,執(zhí)行并行操作的函數(shù)為function1,執(zhí)行串行操作的函數(shù)為function2,也就是說,將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作可以由function1執(zhí)行、將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作可以由function2執(zhí)行,第一線程在接收到數(shù)據(jù)同步任務(wù)后,將會(huì)由會(huì)function1、function2來執(zhí)行數(shù)據(jù)同步任務(wù)。

步驟S205,由該第一線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

具體地,第一線程中定義的函數(shù)function1,將執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

舉例說明,針對(duì)于數(shù)據(jù)同步任務(wù):Set a=1;Set b=2;Set c=1;Set a=4,可以依據(jù)負(fù)載均衡策略將數(shù)據(jù)同步任務(wù)Set a=1;Set a=4分發(fā)給第一線程1,數(shù)據(jù)同步任務(wù)Set b=2分發(fā)給第一線程2,數(shù)據(jù)同步任務(wù)Set c=1分發(fā)給第一線程3,其中,對(duì)于數(shù)據(jù)同步任務(wù)中的將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,第一線程1、2、3可以并行執(zhí)行,而將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作則需要第一線程1、2、3串行執(zhí)行。線程1、2、3在執(zhí)行將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作時(shí),需要根據(jù)令牌來執(zhí)行,具體地,可以采用如下方法步驟來執(zhí)行將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作。

步驟S206,判斷順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成,若是,則執(zhí)行步驟S207;若否,則執(zhí)行步驟S208。

其中,令牌的排列順序與接收數(shù)據(jù)同步任務(wù)的順序一致。

具體地,function2在執(zhí)行將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作之前,還需要判斷順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成,函數(shù)function2的代碼能夠?qū)崿F(xiàn)判斷功能,這里判斷順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成主要是為了保證寫日志操作是按照接收數(shù)據(jù)同步任務(wù)的順序執(zhí)行的,保證在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù)。

舉例說明,從數(shù)據(jù)庫為數(shù)據(jù)同步任務(wù):Set a=1;Set b=2;Set c=1;Set a=4,分別設(shè)置令牌為1、2、3、4。第一線程2在執(zhí)行將Set b=2記錄到日志文件中時(shí),需要判斷令牌1對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成,同理,第一線程3在執(zhí)行將Set c=1記錄到日志文件中時(shí),需要判斷令牌1、2對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成,同樣地,第一線程1在執(zhí)行將Set a=4記錄到日志文件中時(shí),需要判斷令牌1、2、3對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成。

步驟S207,由該第一線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

若判斷出順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成,則該第一線程可以執(zhí)行用于將寫數(shù)據(jù)操作記錄到日志文件中的寫日志操作。

步驟S208,繼續(xù)等待,直至順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成。

若判斷出順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作未執(zhí)行完成,則需要繼續(xù)等待,等待順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成后,才執(zhí)行該令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作。

在本發(fā)明實(shí)施例中,可以切換從數(shù)據(jù)庫的狀態(tài),例如將從數(shù)據(jù)庫的狀態(tài)由第一狀態(tài)切換為第二狀態(tài),或者由第二狀態(tài)切換為第一狀態(tài),從數(shù)據(jù)庫的狀態(tài)決定著主從同步的方案,因此,需要對(duì)從數(shù)據(jù)庫的狀態(tài)進(jìn)行判斷:

具體地,判斷從數(shù)據(jù)庫是否為從第二狀態(tài)切換為第一狀態(tài),若是,判斷已設(shè)置令牌的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成,若否,則等待已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成,若是,則執(zhí)行步驟S201。

判斷從數(shù)據(jù)庫是否為從第二狀態(tài)切換為第一狀態(tài),就是判斷從數(shù)據(jù)庫是否為從非只讀狀態(tài)切換為只讀狀態(tài),從數(shù)據(jù)庫狀態(tài)的變化,影響到執(zhí)行數(shù)據(jù)同步任務(wù)的線程。

若判斷出從數(shù)據(jù)庫從第二狀態(tài)切換為第一狀態(tài),還需要判斷一下已設(shè)置令牌的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成,主要是為了判斷由第一線程執(zhí)行第二操作時(shí),第一線程是否已執(zhí)行完成分發(fā)的第二操作。

若判斷出已設(shè)置令牌的數(shù)據(jù)同步任務(wù)未執(zhí)行完成,則需要等待已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成,在已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成后,可以執(zhí)行步驟S201。

另外,還可以判斷從數(shù)據(jù)庫是否為從第一狀態(tài)切換為第二狀態(tài),若是,則判斷第二線程是否執(zhí)行完所有第二操作,若否,則等待第二線程執(zhí)行完所有第二操作,若是,則執(zhí)行步驟S203。

判斷從數(shù)據(jù)庫是否為從第一狀態(tài)切換為第二狀態(tài),就是判斷從數(shù)據(jù)庫是否為從只讀狀態(tài)切換為非只讀狀態(tài),從數(shù)據(jù)庫狀態(tài)的變化,影響到執(zhí)行數(shù)據(jù)同步任務(wù)的線程。

若判斷出從數(shù)據(jù)庫從第一狀態(tài)切換為第二狀態(tài),還需要判斷第二線程是否執(zhí)行完所有第二操作,只有在第二線程執(zhí)行完所有的第二操作后,才可以切換到由第一線程執(zhí)行第二操作。

若判斷出第二線程未執(zhí)行完所有第二操作,則需要等待第二線程執(zhí)行完所有第二操作,在第二線程執(zhí)行完所有第二操作后,可以執(zhí)行步驟S203。

根據(jù)本發(fā)明上述實(shí)施例提供的方法,在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,提高了數(shù)據(jù)同步速度,克服了從數(shù)據(jù)庫單線程執(zhí)行數(shù)據(jù)同步任務(wù)造成的主數(shù)據(jù)庫與從數(shù)據(jù)庫中數(shù)據(jù)顯著不同步問題,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作,保證了在日志文件按照接收數(shù)據(jù)同步任務(wù)的順序記錄數(shù)據(jù)操作,從而在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù);在從數(shù)據(jù)庫處于第二狀態(tài)下,通過設(shè)置令牌來限定數(shù)據(jù)同步任務(wù)的執(zhí)行順序,并依據(jù)令牌串行執(zhí)行數(shù)據(jù)同步任務(wù),保證與主數(shù)據(jù)庫的數(shù)據(jù)一致。

圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的并發(fā)主從同步裝置的結(jié)構(gòu)示意圖。如圖3所示,該裝置包括:接收模塊300、分發(fā)模塊301、串行處理模塊302和多個(gè)并行處理模塊303。

接收模塊300,適于接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作。

分發(fā)模塊301,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊執(zhí)行。

串行處理模塊302,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

多個(gè)并行處理模塊303,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

根據(jù)本發(fā)明上述實(shí)施例提供的裝置,接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。上述方案可以利用從數(shù)據(jù)庫的多個(gè)第一線程執(zhí)行數(shù)據(jù)同步任務(wù),提高了數(shù)據(jù)同步速度,克服了從數(shù)據(jù)庫單線程執(zhí)行數(shù)據(jù)同步任務(wù)造成的主數(shù)據(jù)庫與從數(shù)據(jù)庫中數(shù)據(jù)顯著不同步問題,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作,保證了在日志文件按照接收數(shù)據(jù)同步任務(wù)的順序記錄數(shù)據(jù)操作,從而在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù)。

圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的并發(fā)主從同步裝置的結(jié)構(gòu)示意圖。如圖4所示,該裝置包括:接收模塊400、分發(fā)模塊401、串行處理模塊402和多個(gè)并行處理模塊403。

接收模塊400,適于接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作。

其中,第一操作為用于將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,第二操作為用于將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作。

分發(fā)模塊401,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,依據(jù)負(fù)載均衡策略,從多個(gè)并行處理模塊選擇一個(gè)并行處理模塊;將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給所選擇的并行處理模塊執(zhí)行。其中,第一狀態(tài)為只讀狀態(tài)。

在本發(fā)明實(shí)施例中,分發(fā)模塊401進(jìn)一步適于:在從數(shù)據(jù)庫處于第一狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給同一第一線程。

串行處理模塊402,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作;

多個(gè)并行處理模塊403,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

此外,該并發(fā)主從同步裝置還包括:設(shè)置模塊404,適于在從數(shù)據(jù)庫處于第二狀態(tài)下,按照接收數(shù)據(jù)同步任務(wù)的順序,為數(shù)據(jù)同步任務(wù)設(shè)置令牌。其中,第二狀態(tài)為非只讀狀態(tài)。

分發(fā)模塊401還適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊。

更具體地,分發(fā)模塊401進(jìn)一步適于:依據(jù)負(fù)載均衡策略,從多個(gè)并行處理模塊選擇一個(gè)并行處理模塊;將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給所選擇的并行處理模塊。

在本發(fā)明實(shí)施例中,分發(fā)模塊401進(jìn)一步適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)分發(fā)給同一第一線程。

并行處理模塊403還適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作和第二操作。

其中,在從數(shù)據(jù)庫處于第二狀態(tài)下,各個(gè)并行處理模塊之間執(zhí)行的第一操作為并行操作;各個(gè)并行處理模塊之間執(zhí)行的第二操作為串行操作。

另外,并發(fā)主從同步裝置還包括:第一判斷模塊405,適于判斷順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成;其中,令牌的排列順序與接收數(shù)據(jù)同步任務(wù)的順序一致;若否,則繼續(xù)等待,直至順序排在令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成。

該并發(fā)主從同步裝置還包括:第二判斷模塊,適于判斷從數(shù)據(jù)庫是否為從第二狀態(tài)切換為第一狀態(tài);若是,判斷已設(shè)置令牌的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成;

分發(fā)模塊進(jìn)一步適于:若已設(shè)置令牌的數(shù)據(jù)同步任務(wù)未執(zhí)行完成,在將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊執(zhí)行之前,等待已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成。

該并發(fā)主從同步裝置還包括:第三判斷模塊,適于判斷從數(shù)據(jù)庫是否為從第一狀態(tài)切換為第二狀態(tài);若是,則判斷第二線程是否執(zhí)行完所有第二操作;

設(shè)置模塊進(jìn)一步適于:若第二線程未執(zhí)行完所有第二操作,在按照接收數(shù)據(jù)同步任務(wù)的順序,為數(shù)據(jù)同步任務(wù)設(shè)置令牌之前,等待串行處理模塊執(zhí)行完所有第二操作。

根據(jù)本發(fā)明上述實(shí)施例提供的裝置,在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,提高了數(shù)據(jù)同步速度,克服了從數(shù)據(jù)庫單線程執(zhí)行數(shù)據(jù)同步任務(wù)造成的主數(shù)據(jù)庫與從數(shù)據(jù)庫中數(shù)據(jù)顯著不同步問題,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作,保證了在日志文件按照接收數(shù)據(jù)同步任務(wù)的順序記錄數(shù)據(jù)操作,從而在從數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)丟失等問題時(shí),能夠方便地根據(jù)日志文件中的寫數(shù)據(jù)操作記錄恢復(fù)從數(shù)據(jù)庫的數(shù)據(jù);在從數(shù)據(jù)庫處于第二狀態(tài)下,通過設(shè)置令牌來限定數(shù)據(jù)同步任務(wù)的執(zhí)行順序,并依據(jù)令牌串行執(zhí)行數(shù)據(jù)同步任務(wù),保證與主數(shù)據(jù)庫的數(shù)據(jù)一致。

在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。

在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。

類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。

本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。

此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。

本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的并發(fā)主從同步設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。

應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。

本發(fā)明公開了:

A1、一種并發(fā)主從同步方法,其包括:

接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),所述數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;

在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作。

A2、根據(jù)A1所述的并發(fā)主從同步方法,其中,所述方法還包括:

在從數(shù)據(jù)庫處于第二狀態(tài)下,按照接收數(shù)據(jù)同步任務(wù)的順序,為所述數(shù)據(jù)同步任務(wù)設(shè)置令牌;

將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給多個(gè)第一線程中一個(gè)第一線程,由該第一線程執(zhí)行所述數(shù)據(jù)同步任務(wù)中的第一操作和第二操作。

A3、根據(jù)A1所述的并發(fā)主從同步方法,其中,所述將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行進(jìn)一步包括:

依據(jù)負(fù)載均衡策略,從多個(gè)第一線程選擇一個(gè)第一線程;

將所述數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給所選擇的第一線程執(zhí)行。

A4、根據(jù)A2所述的并發(fā)主從同步方法,其中,所述將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給多個(gè)第一線程中一個(gè)第一線程進(jìn)一步包括:

依據(jù)負(fù)載均衡策略,從多個(gè)第一線程選擇一個(gè)第一線程;

將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給所選擇的第一線程。

A5、根據(jù)A2所述的并發(fā)主從同步方法,其中,在從數(shù)據(jù)庫處于第二狀態(tài)下,各個(gè)第一線程之間執(zhí)行的所述第一操作為并行操作;各個(gè)第一線程之間執(zhí)行的所述第二操作為串行操作。

A6、根據(jù)A2所述的并發(fā)主從同步方法,其中,在由該第一線程執(zhí)行所述數(shù)據(jù)同步任務(wù)中的第二操作之前,所述方法還包括:

判斷順序排在所述令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成;其中,所述令牌的排列順序與接收數(shù)據(jù)同步任務(wù)的順序一致;

若否,則繼續(xù)等待,直至順序排在所述令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成。

A7、根據(jù)A2所述的并發(fā)主從同步方法,其中,所述方法進(jìn)一步包括:

判斷所述從數(shù)據(jù)庫是否為從第二狀態(tài)切換為第一狀態(tài);

若是,判斷已設(shè)置令牌的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成;

若已設(shè)置令牌的數(shù)據(jù)同步任務(wù)未執(zhí)行完成,則在所述將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)第一線程中一個(gè)第一線程執(zhí)行,由第二線程執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作之前,所述方法還包括:等待已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成。

A8、根據(jù)A2所述的并發(fā)主從同步方法,其中,所述方法進(jìn)一步包括:

判斷所述從數(shù)據(jù)庫是否為從第一狀態(tài)切換為第二狀態(tài);

若是,則判斷第二線程是否執(zhí)行完所有第二操作;

若第二線程未執(zhí)行完所有第二操作,則在所述按照接收數(shù)據(jù)同步任務(wù)的順序,為所述數(shù)據(jù)同步任務(wù)設(shè)置令牌之前,所述方法還包括:等待第二線程執(zhí)行完所有第二操作。

A9、根據(jù)A1-A8中任一項(xiàng)所述的并發(fā)主從同步方法,其中,所述第一操作為用于將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,所述第二操作為用于將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作。

A10、根據(jù)A1所述的并發(fā)主從同步方法,其中,在從數(shù)據(jù)庫處于第一狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給同一第一線程。

A11、根據(jù)A2所述的并發(fā)主從同步方法,其中,在從數(shù)據(jù)庫處于第二狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)分發(fā)給同一第一線程。

A12、根據(jù)A1-11中任一項(xiàng)所述的并發(fā)主從同步方法,其中,所述第一狀態(tài)為只讀狀態(tài),所述第二狀態(tài)為非只讀狀態(tài)。

B13、一種并發(fā)主從同步裝置,其包括:

接收模塊,適于接收來自主數(shù)據(jù)庫的數(shù)據(jù)同步任務(wù),所述數(shù)據(jù)同步任務(wù)包括可并行執(zhí)行的第一操作和需串行執(zhí)行的第二操作;

分發(fā)模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊執(zhí)行;

串行處理模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第二操作;

多個(gè)并行處理模塊,適于在從數(shù)據(jù)庫處于第一狀態(tài)下,執(zhí)行數(shù)據(jù)同步任務(wù)中的第一操作。

B14、根據(jù)B13所述的并發(fā)主從同步裝置,其中,還包括:

設(shè)置模塊,適于在從數(shù)據(jù)庫處于第二狀態(tài)下,按照接收數(shù)據(jù)同步任務(wù)的順序,為所述數(shù)據(jù)同步任務(wù)設(shè)置令牌;

所述分發(fā)模塊還適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊;

所述并行處理模塊還適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,執(zhí)行所述數(shù)據(jù)同步任務(wù)中的第一操作和第二操作。

B15、根據(jù)B13所述的并發(fā)主從同步裝置,其中,所述分發(fā)模塊進(jìn)一步適于:依據(jù)負(fù)載均衡策略,從多個(gè)并行處理模塊選擇一個(gè)并行處理模塊;將所述數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給所選擇的并行處理模塊執(zhí)行。

B16、根據(jù)B14所述的并發(fā)主從同步裝置,其中,所述分發(fā)模塊進(jìn)一步適于:依據(jù)負(fù)載均衡策略,從多個(gè)并行處理模塊選擇一個(gè)并行處理模塊;將設(shè)置有令牌的數(shù)據(jù)同步任務(wù)分發(fā)給所選擇的并行處理模塊。

B17、根據(jù)B14所述的并發(fā)主從同步裝置,其中,在從數(shù)據(jù)庫處于第二狀態(tài)下,各個(gè)并行處理模塊之間執(zhí)行的所述第一操作為并行操作;各個(gè)并行處理模塊之間執(zhí)行的所述第二操作為串行操作。

B18、根據(jù)B14所述的并發(fā)主從同步裝置,其中,所述裝置還包括:

第一判斷模塊,適于判斷順序排在所述令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作是否執(zhí)行完成;其中,所述令牌的排列順序與接收數(shù)據(jù)同步任務(wù)的順序一致;若否,則繼續(xù)等待,直至順序排在所述令牌前一位的令牌對(duì)應(yīng)的數(shù)據(jù)同步任務(wù)的第二操作執(zhí)行完成。

B19、根據(jù)B14所述的并發(fā)主從同步裝置,其中,還包括:

第二判斷模塊,適于判斷所述從數(shù)據(jù)庫是否為從第二狀態(tài)切換為第一狀態(tài);若是,判斷已設(shè)置令牌的數(shù)據(jù)同步任務(wù)是否執(zhí)行完成;

所述分發(fā)模塊進(jìn)一步適于:若已設(shè)置令牌的數(shù)據(jù)同步任務(wù)未執(zhí)行完成,在所述將數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給多個(gè)并行處理模塊中一個(gè)并行處理模塊執(zhí)行之前,等待已設(shè)置令牌的數(shù)據(jù)同步任務(wù)執(zhí)行完成。

B20、根據(jù)B14所述的并發(fā)主從同步裝置,其中,還包括:

第三判斷模塊,適于判斷所述從數(shù)據(jù)庫是否為從第一狀態(tài)切換為第二狀態(tài);若是,則判斷第二線程是否執(zhí)行完所有第二操作;

所述設(shè)置模塊進(jìn)一步適于:若第二線程未執(zhí)行完所有第二操作,在所述按照接收數(shù)據(jù)同步任務(wù)的順序,為所述數(shù)據(jù)同步任務(wù)設(shè)置令牌之前,等待串行處理模塊執(zhí)行完所有第二操作。

B21、根據(jù)B13-B20中任一項(xiàng)所述的并發(fā)主從同步裝置,其中,所述第一操作為用于將數(shù)據(jù)寫入從數(shù)據(jù)庫的寫數(shù)據(jù)操作,所述第二操作為用于將寫數(shù)據(jù)操作記錄到從庫日志文件中的寫日志操作。

B22、根據(jù)B13所述的并發(fā)主從同步裝置,其中,所述分發(fā)模塊進(jìn)一步適于:在從數(shù)據(jù)庫處于第一狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)中的第一操作分發(fā)給同一第一線程。

B23、根據(jù)B14所述的并發(fā)主從同步裝置,其中,所述分發(fā)模塊進(jìn)一步適于:在從數(shù)據(jù)庫處于第二狀態(tài)下,針對(duì)同一數(shù)據(jù)的數(shù)據(jù)同步任務(wù)分發(fā)給同一第一線程。

B24、根據(jù)B13-B23中任一項(xiàng)所述的并發(fā)主從同步裝置,其中,所述第一狀態(tài)為只讀狀態(tài),所述第二狀態(tài)為非只讀狀態(tài)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1