本發(fā)明屬于數(shù)據(jù)庫應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種基于讀寫分離的數(shù)據(jù)庫操作方法及裝置。
背景技術(shù):
在數(shù)據(jù)庫應(yīng)用場景中,應(yīng)用系統(tǒng)(如web應(yīng)用系統(tǒng)等)的訪問量/請求數(shù)不斷增大,為應(yīng)對不斷增大的訪問量/請求數(shù),提升系統(tǒng)的最大并發(fā)數(shù)以及降低系統(tǒng)的單次請求響應(yīng)時(shí)間的需求日益凸顯。
應(yīng)用系統(tǒng)通過操作(讀和/或?qū)?其后臺的數(shù)據(jù)庫,來為用戶請求提供所需的數(shù)據(jù)支持,基于此,應(yīng)用系統(tǒng)的最大并發(fā)數(shù)以及單次請求響應(yīng)時(shí)間與數(shù)據(jù)庫操作性能具有密不可分的關(guān)系,數(shù)據(jù)庫已成為限制系統(tǒng)提升最大并發(fā)數(shù)及降低單次請求響應(yīng)時(shí)間的瓶頸。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種基于讀寫分離的數(shù)據(jù)庫操作方法及裝置,旨在解決現(xiàn)有技術(shù)存在的上述問題,為提升應(yīng)用系統(tǒng)的最大并發(fā)數(shù)及降低應(yīng)用系統(tǒng)的單次請求響應(yīng)時(shí)間提供支持。
為此,本發(fā)明公開如下技術(shù)方案:
一種基于讀寫分離的數(shù)據(jù)庫操作方法,包括:
獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求;
確定所述操作請求的請求類型,所述請求類型為讀請求或?qū)懻埱笾械娜我庖环N;
若所述操作請求的請求類型為寫請求,則將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對所述主數(shù)據(jù)庫進(jìn)行寫操作;
若所述操作請求的請求類型為讀請求,則將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對從數(shù)據(jù)庫進(jìn)行讀操作;其中,所述目標(biāo)數(shù)據(jù)庫對應(yīng)至少一個(gè)主數(shù)據(jù)庫及至少一個(gè)從數(shù)據(jù)庫,當(dāng)所述主數(shù)據(jù)庫的數(shù)據(jù)更新時(shí),基于數(shù)據(jù)庫復(fù)制技術(shù)對所述從數(shù)據(jù)庫進(jìn)行同步的數(shù)據(jù)更新,以使得所述從數(shù)據(jù)庫的數(shù)據(jù)與所述主數(shù)據(jù)庫的數(shù)據(jù)保持一致。
上述方法,優(yōu)選的,所述確定所述操作請求的請求類型,包括:
解析所述操作請求;
基于解析結(jié)果,確定所述操作請求的請求類型。
上述方法,優(yōu)選的,所述若所述操作請求的請求類型為寫請求,則所述將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理,包括:
從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與寫請求類型相對應(yīng)的第一連接池,所述第一連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫的多個(gè)連接;
從所述第一連接池中選擇出一空閑的第一連接;
利用所述空閑的第一連接,將所述操作請求路由至所述主數(shù)據(jù)庫。
上述方法,優(yōu)選的,所述若所述操作請求的請求類型為讀請求,則將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理,包括:
從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與讀請求類型相對應(yīng)的第二連接池,所述第二連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫的多個(gè)連接;
從所述第二連接池中選擇出一空閑的第二連接;
利用所述空閑的第二連接,將所述操作請求路由至所述從數(shù)據(jù)庫。
上述方法,優(yōu)選的,還包括:
當(dāng)所述第一連接池和/或所述第二連接池中的任意一連接的空閑時(shí)長達(dá)到預(yù)定閾值時(shí),釋放空閑時(shí)長達(dá)到所述預(yù)定閾值的所述連接。
一種基于讀寫分離的數(shù)據(jù)庫操作裝置,包括:
獲取單元,用于獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求;
確定單元,用于確定所述操作請求的請求類型,所述請求類型為讀請求或?qū)懻埱笾械娜我庖环N;
第一操作處理單元,用于在所述操作請求的請求類型為寫請求時(shí),將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對所述主數(shù)據(jù)庫進(jìn)行寫操作;
第二操作處理單元,用于在所述操作請求的請求類型為讀請求時(shí),將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對從數(shù)據(jù)庫進(jìn)行讀操作;其中,所述目標(biāo)數(shù)據(jù)庫對應(yīng)至少一個(gè)主數(shù)據(jù)庫及至少一個(gè)從數(shù)據(jù)庫,當(dāng)所述主數(shù)據(jù)庫的數(shù)據(jù)更新時(shí),基于數(shù)據(jù)庫復(fù)制技術(shù)對所述從數(shù)據(jù)庫進(jìn)行同步的數(shù)據(jù)更新,以使得所述從數(shù)據(jù)庫的數(shù)據(jù)與所述主數(shù)據(jù)庫的數(shù)據(jù)保持一致。
上述裝置,優(yōu)選的,所述確定單元,進(jìn)一步用于:
解析所述操作請求;基于解析結(jié)果,確定所述操作請求的請求類型。
上述裝置,優(yōu)選的,所述第一操作處理單元,進(jìn)一步用于:
從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與寫請求類型相對應(yīng)的第一連接池,所述第一連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫的多個(gè)連接;從所述第一連接池中選擇出一空閑的第一連接;利用所述空閑的第一連接,將所述操作請求路由至所述主數(shù)據(jù)庫。
上述裝置,優(yōu)選的,所述第二操作處理單元,進(jìn)一步用于:
從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與讀請求類型相對應(yīng)的第二連接池,所述第二連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫的多個(gè)連接;從所述第二連接池中選擇出一空閑的第二連接;利用所述空閑的第二連接,將所述操作請求路由至所述從數(shù)據(jù)庫。
上述裝置,優(yōu)選的,還包括:
釋放單元,用于在所述第一連接池和/或所述第二連接池中的任意一連接的空閑時(shí)長達(dá)到預(yù)定閾值時(shí),釋放空閑時(shí)長達(dá)到所述預(yù)定閾值的所述連接。
由以上方案可知,本發(fā)明公開的基于讀寫分離的數(shù)據(jù)庫操作方法,通過將后臺的數(shù)據(jù)庫劃分為主、從兩種類型的數(shù)據(jù)庫,并約定在主數(shù)據(jù)庫處理寫請求,在從數(shù)據(jù)庫處理讀請求,其中,從數(shù)據(jù)庫依賴于主數(shù)據(jù)庫,基于數(shù)據(jù)庫復(fù)制技術(shù)與主數(shù)據(jù)庫的數(shù)據(jù)保持一致。在此基礎(chǔ)上,當(dāng)前端系統(tǒng)存在對后臺的數(shù)據(jù)庫的操作請求時(shí),依據(jù)該請求所屬的寫請求類型或讀請求類型,相應(yīng)地將其分配至主數(shù)據(jù)庫或從數(shù)據(jù)庫處理??梢姡景l(fā)明方案通過分別在主、從數(shù)據(jù)庫中的不同數(shù)據(jù)庫進(jìn)行相應(yīng)的一種操作(讀或?qū)?,實(shí)現(xiàn)了對數(shù)據(jù)庫的讀、寫分離,與現(xiàn)有技術(shù)在同一數(shù)據(jù)庫揉雜式地處理所有讀寫請求相比,本發(fā)明降低了同一數(shù)據(jù)庫處理所有讀寫請求的處理壓力,可明顯提高對數(shù)據(jù)庫進(jìn)行操作時(shí)的操作性能,從而為提升應(yīng)用系統(tǒng)的最大并發(fā)數(shù)及降低應(yīng)用系統(tǒng)的單次請求響應(yīng)時(shí)間提供了支持。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例一提供的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖;
圖2是本發(fā)明實(shí)施例二提供的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖;
圖3是本發(fā)明實(shí)施例三提供的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖;
圖4是本發(fā)明實(shí)施例四提供的基于讀寫分離的數(shù)據(jù)庫操作裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了引用和清楚起見,下文中使用的技術(shù)名詞、簡寫或縮寫總結(jié)解釋如下:
數(shù)據(jù)庫連接池:負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫連接,而不是再重新建立一個(gè)。
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一
本發(fā)明實(shí)施例一公開一種基于讀寫分離的數(shù)據(jù)庫操作方法,可應(yīng)用于數(shù)據(jù)庫應(yīng)用場景中,旨在提升前端系統(tǒng),如前端的web應(yīng)用系統(tǒng)等操作后臺數(shù)據(jù)庫時(shí)的操作性能。
本發(fā)明的主要思想是:通過將后臺的數(shù)據(jù)庫劃分為主、從兩種類型的數(shù)據(jù)庫,并約定在主數(shù)據(jù)庫處理寫請求,在從數(shù)據(jù)庫處理讀請求,其中,從數(shù)據(jù)庫依賴于主數(shù)據(jù)庫,當(dāng)主數(shù)據(jù)庫的數(shù)據(jù)更新時(shí),從數(shù)據(jù)庫基于數(shù)據(jù)庫復(fù)制技術(shù)與主數(shù)據(jù)庫的數(shù)據(jù)保持一致。在此基礎(chǔ)上,當(dāng)前端系統(tǒng)存在對后臺的數(shù)據(jù)庫的操作請求時(shí),依據(jù)該請求所屬的寫請求類型或讀請求類型,相應(yīng)地將其分配至主數(shù)據(jù)庫或從數(shù)據(jù)庫處理。以此降低現(xiàn)有技術(shù)在同一數(shù)據(jù)庫處理所有讀寫請求時(shí)的處理壓力,進(jìn)而提升操作數(shù)據(jù)庫時(shí)的操作性能。
參考圖1示出的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖,所述方法可以包括以下步驟:
步驟101、獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求。
其中,所述前端系統(tǒng)可以是數(shù)據(jù)庫應(yīng)用場景中處于數(shù)據(jù)庫前端的各種應(yīng)用系統(tǒng),如具體可以是web應(yīng)用系統(tǒng)等。
所述操作請求可以是用戶在操作所述前端系統(tǒng)時(shí),前端系統(tǒng)基于用戶操作所產(chǎn)生并發(fā)出的用于操作后臺目標(biāo)數(shù)據(jù)庫的請求,以實(shí)現(xiàn)為響應(yīng)用戶操作提供支持,如前端系統(tǒng)通過查詢后臺數(shù)據(jù)庫來響應(yīng)用戶的獲取相關(guān)數(shù)據(jù)的操作等。
本步驟101可采用攔截方式獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求,即當(dāng)前端系統(tǒng)基于用戶操作生成并發(fā)出對后臺目標(biāo)數(shù)據(jù)庫的操作請求時(shí),本步驟攔截該操作請求,并繼續(xù)依據(jù)接下來的各步驟對其進(jìn)行后續(xù)處理。其中,所攔截的請求具體可以是SQL形式的操作請求。
步驟102、確定所述操作請求的請求類型,所述請求類型為讀請求或?qū)懻埱笾械娜我庖环N。
本發(fā)明旨在實(shí)現(xiàn)對數(shù)據(jù)庫進(jìn)行操作時(shí)的讀、寫分離,基于此,在獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求后,需確定該操作請求的請求類型具體為讀類型還是寫類型,以方便按其所屬的讀/寫類型對其進(jìn)行相應(yīng)處理。
本步驟可通過解析所述操作請求,并在解析的基礎(chǔ)上,依據(jù)解析結(jié)果來確定所述操作請求的請求類型。其中,對于SQL形式的操作請求而言,具體可采用一SQL解析器對攔截的SQL操作請求進(jìn)行解析,通過SQL解析來獲知該操作請求的讀或?qū)戭愋汀?/p>
步驟103、若所述操作請求的請求類型為寫請求,則將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對所述主數(shù)據(jù)庫進(jìn)行寫操作。
本發(fā)明預(yù)先將后臺的數(shù)據(jù)庫劃分為具有主、從關(guān)系的一套數(shù)據(jù)庫,其中,設(shè)定主數(shù)據(jù)庫專門用于負(fù)責(zé)寫操作類型(簡稱寫類型)的SQL請求處理,從數(shù)據(jù)庫專門用于負(fù)責(zé)讀操作類型(簡稱寫類型)的SQL請求處理,從數(shù)據(jù)庫依賴于主數(shù)據(jù)庫,當(dāng)主數(shù)據(jù)因處理寫操作類型的SQL請求而發(fā)生數(shù)據(jù)變動(dòng)(增/刪/改數(shù)據(jù))時(shí),從數(shù)據(jù)庫基于數(shù)據(jù)庫復(fù)制技術(shù)與主數(shù)據(jù)庫的數(shù)據(jù)保持一致。主、從數(shù)據(jù)庫均可以根據(jù)實(shí)際需求,如根據(jù)前端系統(tǒng)的訪問量、所需的最大并發(fā)數(shù)等設(shè)置為相應(yīng)的一個(gè)或多個(gè)。
通常情況下系統(tǒng)請求中讀操作的數(shù)量遠(yuǎn)遠(yuǎn)大于寫操作的數(shù)量,基于此,實(shí)際應(yīng)用場景中,可將主數(shù)據(jù)庫的數(shù)量設(shè)定為一個(gè),而從數(shù)據(jù)庫的數(shù)量設(shè)置為1-2個(gè),當(dāng)主數(shù)據(jù)庫的數(shù)量設(shè)定為一個(gè)時(shí),所述主數(shù)據(jù)庫即可以為待劃分的原數(shù)據(jù)庫本身,所述相應(yīng)數(shù)量的從數(shù)據(jù)庫在初始時(shí)則為依據(jù)數(shù)據(jù)庫復(fù)制技術(shù)所復(fù)制的與主數(shù)據(jù)庫具有相同內(nèi)容的數(shù)據(jù)庫,后續(xù),由于從數(shù)據(jù)庫專門負(fù)責(zé)處理讀操作類型的SQL請求,從而從數(shù)據(jù)庫本身不會因處理SQL請求而使得其數(shù)據(jù)發(fā)生變動(dòng),僅當(dāng)主數(shù)據(jù)庫因處理寫請求而發(fā)生數(shù)據(jù)變動(dòng)時(shí),才依據(jù)數(shù)據(jù)庫復(fù)制技術(shù)同步修改從數(shù)據(jù)庫的數(shù)據(jù),使其與主數(shù)據(jù)庫內(nèi)容保持一致。
基于此,當(dāng)解析并確定出所攔截的操作請求的類型后,可進(jìn)一步依據(jù)該操作請求所屬的讀或?qū)戭愋?,確定需將其分配至主數(shù)據(jù)庫還是從數(shù)據(jù)庫。其中,如果所述操作請求的請求類型為寫請求,則將其分配至目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理。具體地,可通過建立與主數(shù)據(jù)庫間的連接,來利用該連接將所述操作請求路由至目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫,從而最終可實(shí)現(xiàn)對主數(shù)據(jù)庫進(jìn)行寫操作。
步驟104、若所述操作請求的請求類型為讀請求,則將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對從數(shù)據(jù)庫進(jìn)行讀操作;其中,所述目標(biāo)數(shù)據(jù)庫對應(yīng)至少一個(gè)主數(shù)據(jù)庫及至少一個(gè)從數(shù)據(jù)庫,當(dāng)所述主數(shù)據(jù)庫的數(shù)據(jù)更新時(shí),基于數(shù)據(jù)庫復(fù)制技術(shù)對所述從數(shù)據(jù)庫進(jìn)行同步的數(shù)據(jù)更新,以使得所述從數(shù)據(jù)庫的數(shù)據(jù)與所述主數(shù)據(jù)庫的數(shù)據(jù)保持一致。
反之,如果所述操作請求的請求類型為讀請求,則將其分配至目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理。具體地,可通過建立與從數(shù)據(jù)庫間的連接,來利用該連接將所述操作請求路由至目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫,最終可實(shí)現(xiàn)對從數(shù)據(jù)庫進(jìn)行讀操作。
需要說明的是,應(yīng)用本申請方法對前端系統(tǒng)的操作請求所進(jìn)行的讀、寫分離處理過程,于前端系統(tǒng)而言是屏蔽的,即對于前端系統(tǒng)而言,當(dāng)其存在對后臺目標(biāo)數(shù)據(jù)庫的讀/寫操作需求時(shí),僅需依據(jù)實(shí)際需求,生成并發(fā)出針對目標(biāo)數(shù)據(jù)庫(例如數(shù)據(jù)庫A)的讀/寫操作請求即可,而不必對讀、寫類型的操作請求作任何分離處理,后端處理部分在接收到該請求后,才依據(jù)解析、識別出的該請求的寫或讀類型,相應(yīng)地,將其路由至目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫或從數(shù)據(jù)庫進(jìn)行處理,如假設(shè)前端系統(tǒng)發(fā)出對數(shù)據(jù)庫A的寫操作請求,則最終可將該請求路由至數(shù)據(jù)庫A的主數(shù)據(jù)庫(可以為數(shù)據(jù)庫A本身)處理,反之,如果前端系統(tǒng)發(fā)出對數(shù)據(jù)庫A的讀操作請求,則相應(yīng)地將其路由至數(shù)據(jù)庫A的從數(shù)據(jù)庫,如數(shù)據(jù)庫B進(jìn)行處理,以此實(shí)現(xiàn)了對數(shù)據(jù)庫進(jìn)行操作時(shí)的讀、寫操作分離,相對于在同一數(shù)據(jù)庫進(jìn)行所有讀/寫操作而言,可大大降低數(shù)據(jù)庫的處理壓力,提升操作數(shù)據(jù)庫時(shí)的操作性能。
由以上方案可知,本發(fā)明公開的基于讀寫分離的數(shù)據(jù)庫操作方法,通過分別在主、從數(shù)據(jù)庫中的不同數(shù)據(jù)庫進(jìn)行相應(yīng)的一種操作(讀或?qū)?,實(shí)現(xiàn)了對數(shù)據(jù)庫的讀、寫分離,與現(xiàn)有技術(shù)在同一數(shù)據(jù)庫揉雜式地處理所有讀寫請求相比,本發(fā)明降低了同一數(shù)據(jù)庫處理所有讀寫請求的處理壓力,可明顯提高對數(shù)據(jù)庫進(jìn)行操作時(shí)的操作性能,從而為提升應(yīng)用系統(tǒng)的最大并發(fā)數(shù)及降低應(yīng)用系統(tǒng)的單次請求響應(yīng)時(shí)間提供了支持。
實(shí)施例二
本實(shí)施例二具體提供所述步驟103及步驟104的一種較優(yōu)的實(shí)現(xiàn)方式,參考圖2示出的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖,本實(shí)施例中,所述步驟103具體可以通過以下步驟實(shí)現(xiàn):
步驟1031、若所述操作請求的請求類型為寫請求,從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與寫請求類型相對應(yīng)的第一連接池,所述第一連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫的多個(gè)連接;
步驟1032、從所述第一連接池中選擇出一空閑的第一連接;
步驟1033、利用所述空閑的第一連接,將所述操作請求路由至所述主數(shù)據(jù)庫。
本實(shí)施例通過預(yù)先創(chuàng)建連接池,并利用連接池中已建立的數(shù)據(jù)庫連接,實(shí)現(xiàn)將所解析、識別的操作請求路由至相應(yīng)的主數(shù)據(jù)庫或從數(shù)據(jù)庫。
具體地,在數(shù)據(jù)庫應(yīng)用系統(tǒng)啟動(dòng)進(jìn)行初始化時(shí)創(chuàng)建兩個(gè)連接池:第一連接池、第二連接池,其中,第一連接池,負(fù)責(zé)寫類型的操作請求的路由處理,第二連接池負(fù)責(zé)讀類型的操作請求的路由處理。兩個(gè)連接池中均包含多個(gè)連接,系統(tǒng)啟動(dòng)并初始化完成后,兩個(gè)連接池的各個(gè)連接均建立生效,從而完成與相應(yīng)數(shù)據(jù)庫間的連接。
在此基礎(chǔ)上,當(dāng)解析并確定出前端系統(tǒng)的操作請求所屬的類型后,可基于該操作請求的請求類型確定需將其路由至哪個(gè)數(shù)據(jù)庫,如具體需將其路由至主數(shù)據(jù)庫還是從數(shù)據(jù)庫,并進(jìn)一步確定出需基于哪個(gè)連接池中的連接將其路由至所需的數(shù)據(jù)庫。
其中,如果所述操作請求的請求類型為寫請求,則具體從負(fù)責(zé)對寫請求進(jìn)行路由處理的第一連接池中選擇出一空閑的第一連接,并利用該第一連接將所述寫類型的操作請求路由至主數(shù)據(jù)庫,以完成對主數(shù)據(jù)庫進(jìn)行寫操作。
相應(yīng)地,所述步驟104可以通過以下步驟實(shí)現(xiàn):
步驟1041、若所述操作請求的請求類型為讀請求,從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與讀請求類型相對應(yīng)的第二連接池,所述第二連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫的多個(gè)連接;
步驟1042、從所述第二連接池中選擇出一空閑的第二連接;
步驟1043、利用所述空閑的第二連接,將所述操作請求路由至所述從數(shù)據(jù)庫。
具體地,如果所述操作請求的請求類型為讀請求,則需從負(fù)責(zé)對讀請求進(jìn)行路由處理的第二連接池中選擇出一空閑的第二連接,并利用該第二連接將所述讀類型的操作請求路由至從數(shù)據(jù)庫,以完成對從數(shù)據(jù)庫進(jìn)行讀操作。
采用本發(fā)明實(shí)施例的方案,當(dāng)需要將相應(yīng)的寫/讀操作請求分配至相應(yīng)的主/從數(shù)據(jù)庫進(jìn)行處理時(shí),可利用預(yù)先創(chuàng)建的用于負(fù)責(zé)對寫/讀操作請求進(jìn)行路由處理的第一/第二連接池中的已有空閑連接直接將所述寫/讀操作請求路由至所需的主/從數(shù)據(jù)庫,而不必臨時(shí)新建連接,實(shí)現(xiàn)了對已有數(shù)據(jù)庫連接的重復(fù)使用,可有效提升對操作請求進(jìn)行路由時(shí)的路由效率,進(jìn)一步改善了操作數(shù)據(jù)庫的操作性能。
實(shí)施例三
本發(fā)明實(shí)施例三中,參考圖3示出的基于讀寫分離的數(shù)據(jù)庫操作方法流程圖,該方法還可以包括以下步驟:
步驟105:當(dāng)所述第一連接池和/或所述第二連接池中的任意一連接的空閑時(shí)長達(dá)到預(yù)定閾值時(shí),釋放空閑時(shí)長達(dá)到所述預(yù)定閾值的所述連接。
考慮到數(shù)據(jù)庫一般都會存在一個(gè)并發(fā)連接數(shù)上限,基于此,本實(shí)施例中,設(shè)定一個(gè)最大空閑時(shí)長,其中,該步驟105中所述預(yù)定閾值既可以是所述最大空閑時(shí)長對應(yīng)的時(shí)長值,當(dāng)?shù)谝贿B接池和/或第二連接池中的任意一個(gè)連接的空閑時(shí)長達(dá)到所述最大空閑時(shí)長時(shí),則在相應(yīng)的第一連接池或第二連接池中釋放該連接,以避免空閑時(shí)間太長的閑置連接繼續(xù)占用數(shù)據(jù)庫資源,進(jìn)而避免資源浪費(fèi),同時(shí),及時(shí)釋放空閑時(shí)間過長的閑置連接還可為其他應(yīng)用系統(tǒng)并發(fā)連接至數(shù)據(jù)庫提供更多的連接機(jī)會。
實(shí)施例四
本實(shí)施例四公開一種基于讀寫分離的數(shù)據(jù)庫操作裝置,參考圖4示出的該裝置的結(jié)構(gòu)示意圖,其可以包括:
獲取單元41,用于獲得前端系統(tǒng)對后臺的目標(biāo)數(shù)據(jù)庫的操作請求;確定單元42,用于確定所述操作請求的請求類型,所述請求類型為讀請求或?qū)懻埱笾械娜我庖环N;第一操作處理單元43,用于在所述操作請求的請求類型為寫請求時(shí),將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對所述主數(shù)據(jù)庫進(jìn)行寫操作;第二操作處理單元44,用于在所述操作請求的請求類型為讀請求時(shí),將所述操作請求分配至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫進(jìn)行處理,以實(shí)現(xiàn)對從數(shù)據(jù)庫進(jìn)行讀操作;其中,所述目標(biāo)數(shù)據(jù)庫對應(yīng)至少一個(gè)主數(shù)據(jù)庫及至少一個(gè)從數(shù)據(jù)庫,當(dāng)所述主數(shù)據(jù)庫的數(shù)據(jù)更新時(shí),基于數(shù)據(jù)庫復(fù)制技術(shù)對所述從數(shù)據(jù)庫進(jìn)行同步的數(shù)據(jù)更新,以使得所述從數(shù)據(jù)庫的數(shù)據(jù)與所述主數(shù)據(jù)庫的數(shù)據(jù)保持一致。
在本發(fā)明實(shí)施例的一實(shí)施方式中,所述確定單元,進(jìn)一步用于:解析所述操作請求;基于解析結(jié)果,確定所述操作請求的請求類型。
在本發(fā)明實(shí)施例的一實(shí)施方式中,所述第一操作處理單元,進(jìn)一步用于:從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與寫請求類型相對應(yīng)的第一連接池,所述第一連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的主數(shù)據(jù)庫的多個(gè)連接;從所述第一連接池中選擇出一空閑的第一連接;利用所述空閑的第一連接,將所述操作請求路由至所述主數(shù)據(jù)庫。
在本發(fā)明實(shí)施例的一實(shí)施方式中,所述第二操作處理單元,進(jìn)一步用于:從預(yù)先創(chuàng)建的兩個(gè)連接池中確定出與讀請求類型相對應(yīng)的第二連接池,所述第二連接池中包括已創(chuàng)建的能夠連接至所述目標(biāo)數(shù)據(jù)庫的從數(shù)據(jù)庫的多個(gè)連接;從所述第二連接池中選擇出一空閑的第二連接;利用所述空閑的第二連接,將所述操作請求路由至所述從數(shù)據(jù)庫。
在本發(fā)明實(shí)施例的一實(shí)施方式中,所述裝置,還包括:釋放單元,用于在所述第一連接池和/或所述第二連接池中的任意一連接的空閑時(shí)長達(dá)到預(yù)定閾值時(shí),釋放空閑時(shí)長達(dá)到所述預(yù)定閾值的所述連接。
此處,需要說明的是,本實(shí)施例涉及的基于讀寫分離的數(shù)據(jù)庫操作裝置的描述,與上文方法的描述是類似的,且同方法的有益效果描述,對于本發(fā)明的基于讀寫分離的數(shù)據(jù)庫操作裝置在本實(shí)施例中未披露的技術(shù)細(xì)節(jié),請參照本發(fā)明方法實(shí)施例的說明,本實(shí)施對此不再作贅述。
需要說明的是,本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。
為了描述的方便,描述以上系統(tǒng)或裝置時(shí)以功能分為各種模塊或單元分別描述。當(dāng)然,在實(shí)施本申請時(shí)可以把各單元的功能在同一個(gè)或多個(gè)軟件和/或硬件中實(shí)現(xiàn)。
通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn)?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
最后,還需要說明的是,在本文中,諸如第一、第二、第三和第四等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。