數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng)的制作方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例提供一種數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng)。該方法包括:客戶(hù)端與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接;客戶(hù)端根據(jù)輸入的操作事務(wù),確定操作事務(wù)所包含的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型;對(duì)于操作事務(wù)包含的各操作請(qǐng)求,根據(jù)當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,分配主數(shù)據(jù)庫(kù)或目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至與主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中。本方案能夠降低由主數(shù)據(jù)庫(kù)和候選從數(shù)據(jù)庫(kù)構(gòu)成的數(shù)據(jù)庫(kù)系統(tǒng)的復(fù)雜性,并減少主數(shù)據(jù)庫(kù)的并發(fā)壓力,提高數(shù)據(jù)庫(kù)系統(tǒng)的性能;還能保證主數(shù)據(jù)庫(kù)以及候選從數(shù)據(jù)庫(kù)之間數(shù)據(jù)的一致性。
【專(zhuān)利說(shuō)明】數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明實(shí)施例涉及信息【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng)。
【背景技術(shù)】
[0002] 隨著信息時(shí)代的發(fā)展,信息更新速度不斷加快,信息種類(lèi)也紛繁復(fù)雜,業(yè)務(wù)數(shù)據(jù)量 規(guī)模日益增長(zhǎng),數(shù)據(jù)庫(kù)系統(tǒng)如何滿(mǎn)足數(shù)據(jù)的高并發(fā)讀寫(xiě),是一個(gè)巨大的挑戰(zhàn)。傳統(tǒng)的數(shù)據(jù)庫(kù) 系統(tǒng)都是使用一個(gè)數(shù)據(jù)庫(kù)進(jìn)行讀寫(xiě)操作,在高并發(fā)量時(shí),數(shù)據(jù)庫(kù)的并發(fā)性能可能成為整個(gè) 應(yīng)用系統(tǒng)的瓶頸。為了解決這個(gè)問(wèn)題,讀寫(xiě)分離的數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)運(yùn)而生。讀寫(xiě)分離數(shù)據(jù)庫(kù) 系統(tǒng)一般包含一個(gè)主數(shù)據(jù)庫(kù)以及若干從數(shù)據(jù)庫(kù),主數(shù)據(jù)庫(kù)上執(zhí)行寫(xiě)操作,從數(shù)據(jù)庫(kù)用來(lái)分 流執(zhí)行讀操作。
[0003] 現(xiàn)有的數(shù)據(jù)庫(kù)讀寫(xiě)分離技術(shù),主要是通過(guò)應(yīng)用服務(wù)器或代理層對(duì)用戶(hù)提交的數(shù)據(jù) 庫(kù)訪(fǎng)問(wèn)請(qǐng)求進(jìn)行讀寫(xiě)分類(lèi),從而達(dá)到數(shù)據(jù)庫(kù)讀寫(xiě)分離的目的;或者通過(guò)在操作請(qǐng)求中攜帶 注釋?zhuān)⑼ㄟ^(guò)解析注釋得到操作請(qǐng)求的讀寫(xiě)類(lèi)型,從而達(dá)到數(shù)據(jù)庫(kù)讀寫(xiě)分離的目的。
[0004] 上述數(shù)據(jù)庫(kù)讀寫(xiě)分離技術(shù)存在以下缺陷:由于需要在數(shù)據(jù)庫(kù)的上層部署應(yīng)用服務(wù) 器或代理層,增加了復(fù)雜性,且會(huì)產(chǎn)生相應(yīng)的性能損耗,此外,還存在主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù) 的數(shù)據(jù)不一致的問(wèn)題。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng),以在不增加數(shù)據(jù)庫(kù)系統(tǒng)復(fù)雜 性的情況下,實(shí)現(xiàn)操作事務(wù)所包含的操作請(qǐng)求的分離,并實(shí)現(xiàn)主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間數(shù) 據(jù)保持一致。
[0006] 第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫(kù)操作分離方法,包括:
[0007] 客戶(hù)端與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接,其中,所述目 標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接 的候選從數(shù)據(jù)庫(kù)中確定;
[0008] 客戶(hù)端根據(jù)輸入的操作事務(wù),確定所述操作事務(wù)所包含的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi) 型;
[0009] 對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,所述客戶(hù)端根據(jù)當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操 作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基于所述第二連 接分配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0010] 所述主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所 述候選從數(shù)據(jù)庫(kù)中。
[0011] 第二方面,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)庫(kù)操作分離系統(tǒng),包括客戶(hù)端、主數(shù)據(jù) 庫(kù)和與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù);
[0012] 所述客戶(hù)端包括:
[0013] 連接建立模塊,用于與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接, 其中,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述 主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定;
[0014] 操作類(lèi)型確定模塊,用于根據(jù)輸入的操作事務(wù),確定所述操作事務(wù)所包含的操作 請(qǐng)求對(duì)應(yīng)的操作類(lèi)型;
[0015] 操作請(qǐng)求分配模塊,用于對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,根據(jù)當(dāng)前操作 請(qǐng)求對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基 于所述第二連接分配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0016] 所述主數(shù)據(jù)庫(kù)包括:操作數(shù)據(jù)同步模塊,用于基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主 數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中。
[0017] 本發(fā)明實(shí)施例提供的數(shù)據(jù)庫(kù)操作分離方法和系統(tǒng),通過(guò)客戶(hù)端確定操作事務(wù)所包 含的操作請(qǐng)求的操作類(lèi)型,并將不同操作類(lèi)型的操作請(qǐng)求分配至主數(shù)據(jù)庫(kù)或從與所述主數(shù) 據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行,由于無(wú)需通過(guò)部署額外的 應(yīng)用服務(wù)器或代理層,因此降低了由主數(shù)據(jù)庫(kù)和與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)構(gòu)成 的數(shù)據(jù)庫(kù)系統(tǒng)的復(fù)雜性,并減少了主數(shù)據(jù)庫(kù)的并發(fā)壓力,提高了數(shù)據(jù)庫(kù)系統(tǒng)的性能;在主數(shù) 據(jù)庫(kù)和目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行不同類(lèi)型的操作請(qǐng)求之后,通過(guò)將主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至 所述候選從數(shù)據(jù)庫(kù)中,保證了主數(shù)據(jù)庫(kù)以及與主數(shù)據(jù)連接的所有候選從數(shù)據(jù)庫(kù)之間數(shù)據(jù)的 一致性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0018] 為了更清楚地說(shuō)明本發(fā)明,下面將對(duì)本發(fā)明中所需要使用的附圖做一簡(jiǎn)單地介 紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái) 講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0019] 圖1為本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖;
[0020] 圖2為本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖;
[0021] 圖3為本發(fā)明實(shí)施例三提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖;
[0022] 圖4為本發(fā)明實(shí)施例四提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖。
【具體實(shí)施方式】
[0023] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施例 中的技術(shù)方案作進(jìn)一步詳細(xì)描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全 部的實(shí)施例。可以理解的是,此處所描述的具體實(shí)施例僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的 限定,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得 的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。另外還需要說(shuō)明的是,為了便于描述,附圖 中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。
[0024] 實(shí)施例一
[0025] 請(qǐng)參閱圖1,為本發(fā)明實(shí)施例一提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖。本發(fā)明 實(shí)施例的方法適用于數(shù)據(jù)庫(kù)操作分離系統(tǒng),該系統(tǒng)包括客戶(hù)端、主數(shù)據(jù)庫(kù)和與所述主數(shù)據(jù) 庫(kù)連接的候選從數(shù)據(jù)庫(kù)。
[0026] 該方法包括:
[0027] 步驟110、客戶(hù)端與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接;
[0028] 其中,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)客戶(hù)端發(fā)送的操作分離連接請(qǐng)求, 從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定。
[0029] 步驟120、客戶(hù)端根據(jù)輸入的操作事務(wù),確定所述操作事務(wù)所包含的操作請(qǐng)求對(duì)應(yīng) 的操作類(lèi)型;
[0030] 本步驟具體是確定操作事務(wù)中包含的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型。
[0031] 在本步驟中,所述輸入的操作事務(wù)一般是由用戶(hù)輸入到客戶(hù)端中,然后由客戶(hù)端 進(jìn)行操作類(lèi)型確認(rèn)。
[0032] 步驟130、對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,所述客戶(hù)端根據(jù)當(dāng)前操作請(qǐng)求 對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基于所 述第二連接分配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0033] 本步驟具體是對(duì)于各操作請(qǐng)求,客戶(hù)端根據(jù)每個(gè)操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型,將操 作請(qǐng)求分配至主數(shù)據(jù)庫(kù)或所述目標(biāo)從數(shù)據(jù)庫(kù)中進(jìn)行執(zhí)行。
[0034] 通常,對(duì)于大部分?jǐn)?shù)據(jù)庫(kù)分析型的操作事務(wù),操作類(lèi)型為讀操作的操作請(qǐng)求所占 比例較大,本步驟可以將所占比例較大的讀操作對(duì)應(yīng)的操作請(qǐng)求發(fā)送至目標(biāo)從數(shù)據(jù)庫(kù)進(jìn)行 執(zhí)行,而將所占比例較小的寫(xiě)操作對(duì)應(yīng)的操作請(qǐng)求發(fā)送至主數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行,避免了只采 用一個(gè)數(shù)據(jù)庫(kù)的并發(fā)讀寫(xiě)壓力,通過(guò)目標(biāo)從數(shù)據(jù)庫(kù)分流了操作事務(wù)中的部分操作,從而減 少了主數(shù)據(jù)庫(kù)的并發(fā)壓力,提高了數(shù)據(jù)庫(kù)系統(tǒng)的性能。
[0035] 步驟140、所述主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù) 同步至所述候選從數(shù)據(jù)庫(kù)中。
[0036] 本步驟具體是在主數(shù)據(jù)庫(kù)以及與主數(shù)據(jù)連接的候選從數(shù)據(jù)庫(kù)之間執(zhí)行操作數(shù)據(jù) 同步,從而保證主數(shù)據(jù)庫(kù)與所述候選從數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性。
[0037] 具體地,雖然目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行操作類(lèi)型為讀操作的操作請(qǐng)求不會(huì)改變目標(biāo)從數(shù) 據(jù)庫(kù)中的數(shù)據(jù),但是由于主數(shù)據(jù)執(zhí)行操作類(lèi)型為寫(xiě)操作的操作請(qǐng)求會(huì)改變主數(shù)據(jù)庫(kù)中的數(shù) 據(jù),既可以是在主數(shù)據(jù)庫(kù)的原始數(shù)據(jù)的基礎(chǔ)上增加數(shù)據(jù),也可以是修改或者替換原始數(shù)據(jù), 還可以是刪除原始數(shù)據(jù),從而導(dǎo)致主數(shù)據(jù)庫(kù)與候選從數(shù)據(jù)庫(kù)之間數(shù)據(jù)的不一致,通過(guò)將主 數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至候選從數(shù)據(jù)庫(kù),能夠保證主數(shù)據(jù)庫(kù)與所述候選從數(shù)據(jù)庫(kù)的數(shù)據(jù) 一致性。
[0038] 需要說(shuō)明的是,當(dāng)與主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)的數(shù)量為1時(shí),所述目標(biāo)從數(shù) 據(jù)庫(kù)為該候選從數(shù)據(jù)庫(kù),通過(guò)本操作能夠保證主數(shù)據(jù)庫(kù)與目標(biāo)從數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性;當(dāng) 與主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)的數(shù)量為至少2個(gè)時(shí),需在多個(gè)候選從數(shù)據(jù)庫(kù)中確定其中 的一個(gè)候選從數(shù)據(jù)庫(kù)作為所述目標(biāo)從數(shù)據(jù)庫(kù),此時(shí),將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至 所述候選從數(shù)據(jù)庫(kù)中,不僅包括將所述操作數(shù)據(jù)同步至該目標(biāo)從數(shù)據(jù)庫(kù),還包括將所述操 作數(shù)據(jù)同步至除該目標(biāo)從數(shù)據(jù)庫(kù)之外的其余候選從數(shù)據(jù)庫(kù)。
[0039] 本實(shí)施例的技術(shù)方案,通過(guò)客戶(hù)端確定操作事務(wù)所包含的操作請(qǐng)求的操作類(lèi)型, 并將不同操作類(lèi)型的操作請(qǐng)求分配至主數(shù)據(jù)庫(kù)或從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù) 中確定的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行,由于無(wú)需通過(guò)部署額外的應(yīng)用服務(wù)器或代理層,因 此降低了由主數(shù)據(jù)庫(kù)和與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)構(gòu)成的數(shù)據(jù)庫(kù)系統(tǒng)的復(fù)雜性, 并減少了主數(shù)據(jù)庫(kù)的并發(fā)壓力,提高了數(shù)據(jù)庫(kù)系統(tǒng)的性能;在主數(shù)據(jù)庫(kù)和目標(biāo)從數(shù)據(jù)庫(kù)執(zhí) 行不同類(lèi)型的操作請(qǐng)求之后,通過(guò)將主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中, 保證了主數(shù)據(jù)庫(kù)以及與主數(shù)據(jù)連接的所有候選從數(shù)據(jù)庫(kù)之間數(shù)據(jù)的一致性。
[0040] 實(shí)施例二
[0041] 請(qǐng)參閱圖2,為本發(fā)明實(shí)施例二提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖。本實(shí)施 例在上述實(shí)施例的基礎(chǔ)上,提供了客戶(hù)端根據(jù)當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操 作請(qǐng)求分配策略,分配主數(shù)據(jù)庫(kù)或從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定的一個(gè)目 標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求的優(yōu)選方案。
[0042] 在本實(shí)施例中,所述操作類(lèi)型可以包括:讀操作、寫(xiě)操作、提交操作以及回滾操作。
[0043] 該優(yōu)選方法包括:
[0044] 步驟210、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù)中,當(dāng) 前操作請(qǐng)求之前的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型均為讀操作,則客戶(hù)端基于所述第二連接將當(dāng) 前操作請(qǐng)求發(fā)送至所述目標(biāo)從數(shù)據(jù)庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0045] 本步驟具體是客戶(hù)端確定當(dāng)前操作請(qǐng)求的操作類(lèi)型為讀操作后,進(jìn)一步檢測(cè)在所 述操作事務(wù)中當(dāng)前操作請(qǐng)求之前的操作請(qǐng)求,若當(dāng)前操作請(qǐng)求之前的操作請(qǐng)求的類(lèi)型均為 讀操作,也即不涉及主數(shù)據(jù)庫(kù)或目標(biāo)從數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變,則分配目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng) 前操作。
[0046] 步驟220、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且當(dāng)前操作請(qǐng)求為所述操 作事務(wù)中的第一個(gè)操作請(qǐng)求,則客戶(hù)端基于所述第二連接將當(dāng)前操作請(qǐng)求發(fā)送至所述目標(biāo) 從數(shù)據(jù)庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0047] 本步驟具體是客戶(hù)端確定當(dāng)前操作請(qǐng)求的操作類(lèi)型為讀操作后,進(jìn)一步檢測(cè)在所 述操作事務(wù)中當(dāng)前操作請(qǐng)求之前的操作請(qǐng)求,若當(dāng)前操作請(qǐng)求之前沒(méi)有其他操作請(qǐng)求,也 即不涉及主數(shù)據(jù)庫(kù)或目標(biāo)從數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變,則分配目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作。
[0048] 例如,在一個(gè)操作事務(wù)中,如果當(dāng)前操作請(qǐng)求為查詢(xún)操作,該查詢(xún)操作的操作類(lèi)型 為讀操作,且該查詢(xún)操作為該操作事務(wù)中的第一個(gè)操作請(qǐng)求,則客戶(hù)端將該查詢(xún)操作發(fā)送 至目標(biāo)從數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的查詢(xún)。
[0049] 步驟230、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù)中,在 當(dāng)前操作請(qǐng)求之前存在操作類(lèi)型為寫(xiě)操作的操作請(qǐng)求,則客戶(hù)端基于所述第一連接將當(dāng)前 操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0050] 本步驟具體是客戶(hù)端確定當(dāng)前操作請(qǐng)求的操作類(lèi)型為讀操作,進(jìn)一步檢測(cè)在所述 操作事務(wù)中,在當(dāng)前操作請(qǐng)求之前是否存在寫(xiě)操作,若是,則客戶(hù)端將當(dāng)前操作請(qǐng)求發(fā)送至 主數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行。
[0051] 若否,則對(duì)應(yīng)步驟210或者步驟220,此處不再贅述。
[0052] 需要說(shuō)明的是,如果在當(dāng)前讀操作之前存在寫(xiě)操作,而寫(xiě)操作由主數(shù)據(jù)庫(kù)執(zhí)行,相 應(yīng)地,會(huì)改變主數(shù)據(jù)庫(kù)中的原始數(shù)據(jù),也即,由主數(shù)據(jù)庫(kù)執(zhí)行寫(xiě)操作之后,主數(shù)據(jù)庫(kù)中的數(shù) 據(jù)與目標(biāo)從數(shù)據(jù)庫(kù)中的數(shù)據(jù)通常不一致,因此客戶(hù)端將當(dāng)前讀操作發(fā)送至主數(shù)據(jù)庫(kù),由于 主數(shù)據(jù)庫(kù)中的數(shù)據(jù)及時(shí)更新,因此能滿(mǎn)足操作請(qǐng)求;如果客戶(hù)端將當(dāng)前讀操作發(fā)送至目標(biāo) 從數(shù)據(jù)庫(kù),由于從數(shù)據(jù)庫(kù)中的數(shù)據(jù)與主數(shù)據(jù)庫(kù)中的及時(shí)更新后的數(shù)據(jù)并不一致,可能導(dǎo)致 無(wú)法執(zhí)行當(dāng)前讀操作請(qǐng)求,或者導(dǎo)致執(zhí)行出錯(cuò)。
[0053] 步驟240、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為寫(xiě)操作,則客戶(hù)端基于所述第一連 接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0054] 本步驟具體是客戶(hù)端確定當(dāng)前操作請(qǐng)求的操作類(lèi)型為寫(xiě)操作,則客戶(hù)端將當(dāng)前操 作請(qǐng)求發(fā)送至主數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行。
[0055] 需要說(shuō)明的是,對(duì)于大部分?jǐn)?shù)據(jù)庫(kù)分析型的操作事務(wù),操作類(lèi)型為讀操作的操作 請(qǐng)求所占比例較大,因此,通過(guò)將所占比例較小的寫(xiě)操作對(duì)應(yīng)的操作請(qǐng)求發(fā)送至主數(shù)據(jù)庫(kù) 進(jìn)行執(zhí)行,避免了只采用一個(gè)數(shù)據(jù)庫(kù)的并發(fā)讀寫(xiě)壓力,通過(guò)目標(biāo)從數(shù)據(jù)庫(kù)分流了操作事務(wù) 中的大部分操作,從而減少了主數(shù)據(jù)庫(kù)的并發(fā)壓力,提高了數(shù)據(jù)庫(kù)系統(tǒng)的性能。
[0056] 需要說(shuō)明的是,主數(shù)據(jù)庫(kù)執(zhí)行寫(xiě)操作,既可以是在主數(shù)據(jù)庫(kù)的原始數(shù)據(jù)的基礎(chǔ)上 增加數(shù)據(jù),也可以是修改或者替換原始數(shù)據(jù),還可以是刪除原始數(shù)據(jù)。
[0057] 步驟250、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為提交操作,則客戶(hù)端基于所述第一 連接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求;
[0058] 步驟260、如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為回滾操作,則客戶(hù)端基于所述第一 連接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求。
[0059] 本實(shí)施例的技術(shù)方案,在客戶(hù)端確定操作事務(wù)所包含的操作請(qǐng)求的操作類(lèi)型之 后,如果當(dāng)前操作類(lèi)型為寫(xiě)操作、提交操作或回滾操作,則由主數(shù)據(jù)庫(kù)執(zhí)行;如果當(dāng)前操作 類(lèi)型為讀操作,則進(jìn)一步檢測(cè)在操作事務(wù)中,當(dāng)前操作請(qǐng)求與當(dāng)前操作請(qǐng)求之前的操作請(qǐng) 求的關(guān)聯(lián)關(guān)系,并根據(jù)關(guān)聯(lián)關(guān)系,分配主數(shù)據(jù)庫(kù)或從數(shù)據(jù)庫(kù)執(zhí)行,能夠?qū)崿F(xiàn)不同操作類(lèi)型的 操作請(qǐng)求的細(xì)分,避免了無(wú)法執(zhí)行當(dāng)前讀操作請(qǐng)求,或者導(dǎo)致執(zhí)行出錯(cuò),從而得到需要的執(zhí) 行結(jié)果。
[0060] 需要說(shuō)明的是,在本實(shí)施例中,步驟210-步驟260是相互獨(dú)立的,都是根據(jù)當(dāng)前操 作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,分配主數(shù)據(jù)庫(kù)或從與所述主數(shù)據(jù)庫(kù) 連接的候選從數(shù)據(jù)庫(kù)中確定的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求的優(yōu)選實(shí)施方式,即可 以執(zhí)行步驟210-步驟260中的至少一項(xiàng),且執(zhí)行順序不限。
[0061] 實(shí)施例三
[0062] 請(qǐng)參閱圖3,為本發(fā)明實(shí)施例三提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖。本實(shí)施 例在上述各實(shí)施例的基礎(chǔ)上,提供了主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù) 中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中的優(yōu)選方案。
[0063] 該優(yōu)選方法包括:
[0064] 步驟310、如果所述主數(shù)據(jù)庫(kù)獲取到所述客戶(hù)端發(fā)送的提交操作,則所述主數(shù)據(jù)庫(kù) 將所述主數(shù)據(jù)的日志緩沖區(qū)包含的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù) 根據(jù)該日志進(jìn)行相應(yīng)重做;
[0065] 本步驟中,具體是主數(shù)據(jù)庫(kù)在接收到客戶(hù)端發(fā)送的提交操作之后,通過(guò)將所述主 數(shù)據(jù)的日志緩沖區(qū)包含的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該日 志進(jìn)行相應(yīng)重做,從而使主數(shù)據(jù)庫(kù)與各候選從數(shù)據(jù)庫(kù)中的數(shù)據(jù)保持一致。
[0066] 主數(shù)據(jù)庫(kù)執(zhí)行操作請(qǐng)求時(shí),除了會(huì)對(duì)主數(shù)據(jù)庫(kù)中的數(shù)據(jù)產(chǎn)生影響,還會(huì)在日志緩 沖區(qū)中寫(xiě)入與執(zhí)行的操作請(qǐng)求對(duì)應(yīng)的信息,在事務(wù)提交時(shí),無(wú)論此時(shí)日志緩沖區(qū)是否被寫(xiě) 滿(mǎn),將此時(shí)日志緩沖區(qū)包含的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),使各候選從數(shù)據(jù)庫(kù)根據(jù)該日 志進(jìn)行相應(yīng)重做,即可保證主數(shù)據(jù)庫(kù)與各候選從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)一致性。
[0067] 例如,如果此時(shí)日志緩沖區(qū)的日志中包含有寫(xiě)操作,各候選從數(shù)據(jù)庫(kù)則可以根據(jù) 該日志中的寫(xiě)操作進(jìn)行相應(yīng)操作,從而使主數(shù)據(jù)庫(kù)與各候選從數(shù)據(jù)庫(kù)中的數(shù)據(jù)保持一致。 [0068] 步驟320、如果所述主數(shù)據(jù)庫(kù)的日志緩沖區(qū)被寫(xiě)滿(mǎn),則所述主數(shù)據(jù)庫(kù)將所述日志緩 沖區(qū)寫(xiě)滿(mǎn)時(shí)形成的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該日志進(jìn)行 相應(yīng)重做;
[0069] 本步驟中,主數(shù)據(jù)庫(kù)執(zhí)行操作請(qǐng)求時(shí),除了會(huì)主數(shù)據(jù)庫(kù)中的數(shù)據(jù)產(chǎn)生影響,還會(huì)在 日志緩沖區(qū)中寫(xiě)入與執(zhí)行的操作請(qǐng)求對(duì)應(yīng)的信息,所述寫(xiě)入的與執(zhí)行的操作請(qǐng)求對(duì)應(yīng)的信 息的容量受主數(shù)據(jù)庫(kù)的日志緩沖區(qū)的容量限制,在日志緩沖區(qū)被寫(xiě)滿(mǎn)時(shí),與執(zhí)行的操作請(qǐng) 求對(duì)應(yīng)的信息的集合即構(gòu)成本步驟中的日志。
[0070] 如果操作事務(wù)太大或者主數(shù)據(jù)庫(kù)同時(shí)執(zhí)行多個(gè)用戶(hù)的多個(gè)操作事務(wù)時(shí),可能在操 作事務(wù)還沒(méi)提交時(shí)日志緩沖區(qū)就被寫(xiě)滿(mǎn),在寫(xiě)滿(mǎn)時(shí),主數(shù)據(jù)庫(kù)將日志發(fā)送給各候選從數(shù)據(jù) 庫(kù)進(jìn)行重做,從而主數(shù)據(jù)庫(kù)與各候選從數(shù)據(jù)庫(kù)中的數(shù)據(jù)保持一致。
[0071] 對(duì)于步驟310和步驟320,在各候選從數(shù)據(jù)庫(kù)收到日志進(jìn)行相應(yīng)重做后,會(huì)分別返 回重做完成消息至所述主數(shù)據(jù)庫(kù)。
[0072] 優(yōu)選是,主數(shù)據(jù)庫(kù)收到各候選從數(shù)據(jù)庫(kù)重做日志完成的消息后,繼續(xù)對(duì)外提供服 務(wù)。通過(guò)各候選從數(shù)據(jù)庫(kù)的重做日志完成的消息,可以進(jìn)一步保證主數(shù)據(jù)庫(kù)與各候選從數(shù) 據(jù)庫(kù)之間數(shù)據(jù)的一致性。
[0073] 需要說(shuō)明的是,由于數(shù)據(jù)同步針對(duì)的是各候選從數(shù)據(jù)庫(kù),其中包括目標(biāo)從數(shù)據(jù)庫(kù), 從而使得在接收到新的操作事務(wù)時(shí),從各候選數(shù)據(jù)庫(kù)中確定的新目標(biāo)從數(shù)據(jù)庫(kù)具備執(zhí)行相 應(yīng)的新操作事務(wù)中讀操作的能力。
[0074] 步驟330、如果所述主數(shù)據(jù)庫(kù)獲取所述主數(shù)據(jù)庫(kù)與所述目標(biāo)從數(shù)據(jù)庫(kù)之間的連接 故障信息,則所述主數(shù)據(jù)庫(kù)斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的故障連接,并回滾未提交的 操作事務(wù),以及返回出錯(cuò)信息至連接了該目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端,以使連接了該故障目標(biāo) 從數(shù)據(jù)庫(kù)的客戶(hù)端斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的連接,并返回與新的目標(biāo)從數(shù)據(jù)庫(kù)建 立第二連接的操作,其中,新的目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)連接了故障目標(biāo)從數(shù)據(jù) 庫(kù)的客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的剩余候選從數(shù)據(jù)庫(kù)中確 定。
[0075] 在本步驟中,如果主數(shù)據(jù)庫(kù)獲取到所述主數(shù)據(jù)庫(kù)與所述目標(biāo)從數(shù)據(jù)庫(kù)之間的連接 故障信息,則斷開(kāi)該故障連接,此時(shí)如果主數(shù)據(jù)庫(kù)在連接出現(xiàn)故障之前,執(zhí)行了寫(xiě)操作或其 他改變主數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作,則會(huì)導(dǎo)致主數(shù)據(jù)庫(kù)與目標(biāo)從數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致,因此 主數(shù)據(jù)庫(kù)通過(guò)回滾未提交的操作事務(wù),以及返回出錯(cuò)信息至連接了該故障目標(biāo)從數(shù)據(jù)庫(kù)的 客戶(hù)端,以使連接了該故障目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的連 接,對(duì)于后續(xù)的各操作請(qǐng)求,返回與新的目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接的操作,也即從主數(shù)據(jù) 庫(kù)獲取連接的其余候選從數(shù)據(jù)庫(kù)中確定的一個(gè)新目標(biāo)從數(shù)據(jù)庫(kù)信息,連接了該故障目標(biāo)從 數(shù)據(jù)庫(kù)的客戶(hù)端建立與新目標(biāo)從數(shù)據(jù)庫(kù)的第二連接,后續(xù)的各操作請(qǐng)求就可依據(jù)預(yù)設(shè)等操 作請(qǐng)求分配策略,分配主數(shù)據(jù)庫(kù)或新目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行。之后,繼續(xù)進(jìn)行所述主數(shù)據(jù)庫(kù)基 于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中這一步 驟,不僅實(shí)現(xiàn)了未提交的操作事務(wù)的讀寫(xiě)分離,而且保證了主數(shù)據(jù)庫(kù)與仍處于正常狀態(tài)的 其余候選從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)一致性。
[0076] 需要說(shuō)明的是,在本實(shí)施例中,步驟310-步驟330是相互獨(dú)立的,且執(zhí)行順序不 限。
[0077] 實(shí)施例四
[0078] 請(qǐng)參閱圖4,為本發(fā)明實(shí)施例四提供的一種數(shù)據(jù)庫(kù)操作分離方法的流程圖。本實(shí)施 例的方法可以由數(shù)據(jù)庫(kù)操作分離系統(tǒng)來(lái)執(zhí)行。本實(shí)施例在上述各實(shí)施例的基礎(chǔ)上,提供了 客戶(hù)端與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接的優(yōu)選方案。
[0079] 該優(yōu)選方法包括:
[0080] 步驟410、客戶(hù)端基于第一連接,將用戶(hù)建立的操作分離連接請(qǐng)求發(fā)送至所述主數(shù) 據(jù)庫(kù);
[0081] 步驟420、所述客戶(hù)端接收所述主數(shù)據(jù)庫(kù)發(fā)送的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)的連接屬性信 息,其中,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)所述操作分離連接請(qǐng)求,從與所述主數(shù)據(jù) 庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定;
[0082] 步驟430、所述客戶(hù)端根據(jù)所述連接屬性信息,與所述目標(biāo)從數(shù)據(jù)庫(kù)建立第二連 接。
[0083] 需要注意的是,所述第一連接和第二連接均為普通連接,其中,所述第二連接優(yōu)選 基于所述第一連接和客戶(hù)端發(fā)送的操作分離連接請(qǐng)求建立。其中操作分離連接請(qǐng)求可用于 使主數(shù)據(jù)庫(kù)從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定一個(gè)目標(biāo)從數(shù)據(jù)庫(kù),并向客戶(hù)端 返回所述目標(biāo)從數(shù)據(jù)庫(kù)的連接屬性信息,例如,IP地址或端口信息等,從而能夠使所述客戶(hù) 端與所述目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接。
[0084] 在本實(shí)施例中,較佳地,所述目標(biāo)從數(shù)據(jù)庫(kù)的確定具體可以由所述主數(shù)據(jù)庫(kù)根據(jù) 所述操作分離連接請(qǐng)求,以及根據(jù)所述主數(shù)據(jù)庫(kù)中預(yù)置的與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù) 據(jù)庫(kù)對(duì)應(yīng)的即時(shí)歸檔信息,并基于循環(huán)選擇策略,從所述候選從數(shù)據(jù)庫(kù)中確定。
[0085] 例如,當(dāng)前與主數(shù)據(jù)庫(kù)連接的客戶(hù)端有3個(gè),其中第一客戶(hù)端發(fā)送第一操作事務(wù), 第二客戶(hù)端發(fā)送第二操作事務(wù),第三客戶(hù)端發(fā)送第三操作事務(wù),而與主數(shù)據(jù)庫(kù)連接的候選 從數(shù)據(jù)庫(kù)的數(shù)量為2,所述主數(shù)據(jù)庫(kù)根據(jù)候選從數(shù)據(jù)庫(kù)對(duì)應(yīng)的即時(shí)歸檔信息,如果判斷到上 次操作事務(wù)的操作請(qǐng)求分離是由所述主數(shù)據(jù)庫(kù)與第一候選從數(shù)據(jù)庫(kù)執(zhí)行的,則從2個(gè)候選 從數(shù)據(jù)中,選擇第二候選從數(shù)據(jù)庫(kù)作為對(duì)應(yīng)于第一操作事務(wù)的目標(biāo)從數(shù)據(jù)庫(kù),選擇第一候 選從數(shù)據(jù)庫(kù)作為對(duì)應(yīng)于第二操作事務(wù)的目標(biāo)從數(shù)據(jù)庫(kù),選擇第二候選從數(shù)據(jù)庫(kù)作為對(duì)應(yīng)于 第三操作事務(wù)的目標(biāo)從數(shù)據(jù)庫(kù),以實(shí)現(xiàn)將3個(gè)客戶(hù)端分別發(fā)送的操作事務(wù)均勻分配到2個(gè) 候選從數(shù)據(jù)庫(kù),從而使這2個(gè)候選從數(shù)據(jù)庫(kù)的負(fù)載均衡,提高數(shù)據(jù)庫(kù)系統(tǒng)的整體性能。
[0086] 下面通過(guò)實(shí)例進(jìn)行說(shuō)明數(shù)據(jù)庫(kù)系統(tǒng)性能的提升,其中,數(shù)據(jù)庫(kù)系統(tǒng)由一個(gè)主數(shù)據(jù) 庫(kù)和兩個(gè)候選從數(shù)據(jù)庫(kù)組成。
[0087] 選取某市辦公系統(tǒng)的典型模塊(數(shù)據(jù)量接近10G)作為測(cè)試場(chǎng)景,對(duì)采用本發(fā)明實(shí) 施例的技術(shù)方案與采用單機(jī)數(shù)據(jù)庫(kù)系統(tǒng)分別得到的性能進(jìn)行對(duì)比測(cè)試,其中主數(shù)據(jù)庫(kù)與候 選從數(shù)據(jù)庫(kù)之間采用千兆局域網(wǎng)連接。
[0088] 在操作事務(wù)中讀寫(xiě)操作比例不同的情況下,采用本發(fā)明實(shí)施例的技術(shù)方案在性能 方面的表現(xiàn)如下表所示:
[0089]
【權(quán)利要求】
1. 一種數(shù)據(jù)庫(kù)操作分離方法,其特征在于,包括: 客戶(hù)端與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接,其中,所述目標(biāo)從 數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的候 選從數(shù)據(jù)庫(kù)中確定; 客戶(hù)端根據(jù)輸入的操作事務(wù),確定所述操作事務(wù)所包含的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型; 對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,所述客戶(hù)端根據(jù)當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi) 型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基于所述第二連接分 配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 所述主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所述候 選從數(shù)據(jù)庫(kù)中。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述操作類(lèi)型包括:讀操作、寫(xiě)操作、提交 操作以及回滾操作; 對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,所述客戶(hù)端根據(jù)當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi) 型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基于所述第二連接分 配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求,包括下述至少一項(xiàng): 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù)中,當(dāng)前操作請(qǐng)求之 前的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型均為讀操作,則所述客戶(hù)端基于所述第二連接將當(dāng)前操作請(qǐng) 求發(fā)送至所述目標(biāo)從數(shù)據(jù)庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且當(dāng)前操作請(qǐng)求為所述操作事務(wù)中的 第一個(gè)操作請(qǐng)求,則所述客戶(hù)端基于所述第二連接將當(dāng)前操作請(qǐng)求發(fā)送至所述目標(biāo)從數(shù)據(jù) 庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù)中,在當(dāng)前操作請(qǐng)求 之前存在操作類(lèi)型為寫(xiě)操作的操作請(qǐng)求,則所述客戶(hù)端基于所述第一連接將當(dāng)前操作請(qǐng)求 發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為寫(xiě)操作,則所述客戶(hù)端基于所述第一連接將當(dāng)前 操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為提交操作,則所述客戶(hù)端基于所述第一連接將當(dāng) 前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為回滾操作,則所述客戶(hù)端基于所述第一連接將當(dāng) 前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述主數(shù)據(jù)庫(kù)基于預(yù)設(shè)數(shù)據(jù)一致性策 略,將所述主數(shù)據(jù)庫(kù)中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中,包括下述至少一項(xiàng): 如果所述主數(shù)據(jù)庫(kù)獲取到所述客戶(hù)端發(fā)送的提交操作,則所述主數(shù)據(jù)庫(kù)將所述主數(shù)據(jù) 的日志緩沖區(qū)包含的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該日志進(jìn) 行相應(yīng)重做; 如果所述主數(shù)據(jù)庫(kù)的日志緩沖區(qū)被寫(xiě)滿(mǎn),則所述主數(shù)據(jù)庫(kù)將所述日志緩沖區(qū)寫(xiě)滿(mǎn)時(shí)形 成的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該日志進(jìn)行相應(yīng)重做; 如果所述主數(shù)據(jù)庫(kù)獲取所述主數(shù)據(jù)庫(kù)與所述目標(biāo)從數(shù)據(jù)庫(kù)之間的連接故障信息,則所 述主數(shù)據(jù)庫(kù)斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的故障連接,并回滾未提交的操作事務(wù),以及 返回出錯(cuò)信息至連接了該目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端,以使連接了該故障目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù) 端斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的連接,并返回與新的目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接的操 作,其中,新的目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)連接了故障目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端發(fā)送 的操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的剩余候選從數(shù)據(jù)庫(kù)中確定。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述客戶(hù)端與所述目標(biāo)從數(shù)據(jù)庫(kù)建立第 二連接,包括: 所述客戶(hù)端基于所述第一連接,將用戶(hù)建立的操作分離連接請(qǐng)求發(fā)送至所述主數(shù)據(jù) 庫(kù); 所述客戶(hù)端接收所述主數(shù)據(jù)庫(kù)發(fā)送的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)的連接屬性信息,其中,所述 目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)所述操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的候選 從數(shù)據(jù)庫(kù)中確定; 所述客戶(hù)端根據(jù)所述連接屬性信息,與所述目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù) 所述操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定,包括: 所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)所述操作分離連接請(qǐng)求,以及根據(jù)所述主數(shù)據(jù) 庫(kù)中預(yù)置的與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)對(duì)應(yīng)的即時(shí)歸檔信息,并基于循環(huán)選擇策 略,從所述候選從數(shù)據(jù)庫(kù)中確定。
6. -種數(shù)據(jù)庫(kù)操作分離系統(tǒng),包括客戶(hù)端、主數(shù)據(jù)庫(kù)和與所述主數(shù)據(jù)庫(kù)連接的候選從 數(shù)據(jù)庫(kù); 其特征在于,所述客戶(hù)端包括: 連接建立模塊,用于與主數(shù)據(jù)庫(kù)建立第一連接,并與目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接,其 中,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述主 數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定; 操作類(lèi)型確定模塊,用于根據(jù)輸入的操作事務(wù),確定所述操作事務(wù)所包含的操作請(qǐng)求 對(duì)應(yīng)的操作類(lèi)型; 操作請(qǐng)求分配模塊,用于對(duì)于所述操作事務(wù)所包含的各操作請(qǐng)求,根據(jù)當(dāng)前操作請(qǐng)求 對(duì)應(yīng)的操作類(lèi)型,基于預(yù)設(shè)操作請(qǐng)求分配策略,基于所述第一連接分配主數(shù)據(jù)庫(kù)或基于所 述第二連接分配所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 所述主數(shù)據(jù)庫(kù)包括:操作數(shù)據(jù)同步模塊,用于基于預(yù)設(shè)數(shù)據(jù)一致性策略,將所述主數(shù)據(jù) 庫(kù)中的操作數(shù)據(jù)同步至所述候選從數(shù)據(jù)庫(kù)中。
7. 根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述操作類(lèi)型包括:讀操作、寫(xiě)操作、提交 操作以及回滾操作; 操作請(qǐng)求分配模塊包括下述至少一項(xiàng): 第一分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù) 中,當(dāng)前操作請(qǐng)求之前的操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型均為讀操作,則基于所述第二連接將當(dāng) 前操作請(qǐng)求發(fā)送至所述目標(biāo)從數(shù)據(jù)庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 第二分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且當(dāng)前操作請(qǐng)求為 所述操作事務(wù)中的第一個(gè)操作請(qǐng)求,則基于所述第二連接將當(dāng)前操作請(qǐng)求發(fā)送至所述目標(biāo) 從數(shù)據(jù)庫(kù),以使所述目標(biāo)從數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 第三分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為讀操作,且在所述操作事務(wù) 中,在當(dāng)前操作請(qǐng)求之前存在操作類(lèi)型為寫(xiě)操作的操作請(qǐng)求,則基于所述第一連接將當(dāng)前 操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 第四分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為寫(xiě)操作,則基于所述第一連 接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 第五分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為提交操作,則基于所述第一 連接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求; 第六分配單元,用于如果當(dāng)前操作請(qǐng)求對(duì)應(yīng)的操作類(lèi)型為回滾操作,則基于所述第一 連接將當(dāng)前操作請(qǐng)求發(fā)送至所述主數(shù)據(jù)庫(kù),以使所述主數(shù)據(jù)庫(kù)執(zhí)行當(dāng)前操作請(qǐng)求。
8. 根據(jù)權(quán)利要求6或7所述的系統(tǒng),其特征在于,操作數(shù)據(jù)同步模塊包括下述至少一 項(xiàng): 第一同步單元,用于如果所述主數(shù)據(jù)庫(kù)獲取到所述客戶(hù)端發(fā)送的提交操作,則將所述 主數(shù)據(jù)的日志緩沖區(qū)包含的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該 日志進(jìn)行相應(yīng)重做; 第二同步單元,用于如果所述主數(shù)據(jù)庫(kù)的日志緩沖區(qū)被寫(xiě)滿(mǎn),則將所述日志緩沖區(qū)寫(xiě) 滿(mǎn)時(shí)形成的日志發(fā)送至所述候選從數(shù)據(jù)庫(kù),以使所述候選從數(shù)據(jù)庫(kù)根據(jù)該日志進(jìn)行相應(yīng)重 做; 第三同步單元,用于如果所述主數(shù)據(jù)庫(kù)獲取所述主數(shù)據(jù)庫(kù)與所述目標(biāo)從數(shù)據(jù)庫(kù)之間的 連接故障信息,則所述主數(shù)據(jù)庫(kù)斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的故障連接,并回滾未提 交的操作事務(wù),以及返回出錯(cuò)信息至連接了該目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端,以使連接了該故障 目標(biāo)從數(shù)據(jù)庫(kù)的客戶(hù)端斷開(kāi)與該故障目標(biāo)從數(shù)據(jù)庫(kù)之間的連接,并返回與新的目標(biāo)從數(shù)據(jù) 庫(kù)建立第二連接的操作,其中,新的目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)連接了故障目標(biāo)從 數(shù)據(jù)庫(kù)的客戶(hù)端發(fā)送的操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的剩余候選從數(shù)據(jù)庫(kù)中 確定。
9. 根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,連接建立模塊包括: 第一連接建立單元,用于與所述主數(shù)據(jù)庫(kù)建立第一連接; 第二連接建立單元,用于基于所述第一連接,將用戶(hù)建立的操作分離連接請(qǐng)求發(fā)送至 所述主數(shù)據(jù)庫(kù);接收所述主數(shù)據(jù)庫(kù)發(fā)送的一個(gè)目標(biāo)從數(shù)據(jù)庫(kù)的連接屬性信息,其中,所述目 標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)所述操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的候選從 數(shù)據(jù)庫(kù)中確定;根據(jù)所述連接屬性信息,與所述目標(biāo)從數(shù)據(jù)庫(kù)建立第二連接。
10. 根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù) 所述操作分離連接請(qǐng)求,從與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)中確定,包括: 所述目標(biāo)從數(shù)據(jù)庫(kù)由所述主數(shù)據(jù)庫(kù)根據(jù)所述操作分離連接請(qǐng)求,以及根據(jù)所述主數(shù)據(jù) 庫(kù)中預(yù)置的與所述主數(shù)據(jù)庫(kù)連接的候選從數(shù)據(jù)庫(kù)對(duì)應(yīng)的即時(shí)歸檔信息,并基于循環(huán)選擇策 略,從所述候選從數(shù)據(jù)庫(kù)中確定。
【文檔編號(hào)】G06F17/30GK104391873SQ201410593688
【公開(kāi)日】2015年3月4日 申請(qǐng)日期:2014年10月29日 優(yōu)先權(quán)日:2014年10月29日
【發(fā)明者】郭振崗, 王海龍, 沈?qū)? 趙侃 申請(qǐng)人:上海達(dá)夢(mèng)數(shù)據(jù)庫(kù)有限公司