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

數(shù)據(jù)庫訪問方法、裝置和數(shù)據(jù)庫系統(tǒng)與流程

文檔序號:12596179閱讀:245來源:國知局
數(shù)據(jù)庫訪問方法、裝置和數(shù)據(jù)庫系統(tǒng)與流程

本發(fā)明實施例涉及數(shù)據(jù)庫技術(shù),尤其涉及一種數(shù)據(jù)庫訪問方法、裝置和數(shù)據(jù)庫系統(tǒng)。



背景技術(shù):

在信息日益膨脹的今天,存儲系統(tǒng)變的越來越重要,存儲系統(tǒng)主要分為關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,在傳統(tǒng)企業(yè)中主要使用了關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)庫主要通過中間件實現(xiàn)的數(shù)據(jù)庫讀寫分離和橫向擴(kuò)展(Scale horizontally,簡稱Scale-Out),但這類方案無法兼顧性能和強(qiáng)一致性,需要應(yīng)用層自身考慮應(yīng)用讀寫一致性,對于傳統(tǒng)企業(yè)類用戶就要修改應(yīng)用來適配這種新架構(gòu)。

這類中間件主要在互聯(lián)網(wǎng)應(yīng)用中興起,為了提高并發(fā)性能,很多互聯(lián)網(wǎng)場景一般選擇最終一致性的讀寫分離,因為寫庫到讀庫之間使用同步復(fù)制會制約寫性能,所以一般使用異步復(fù)制,寫庫和讀庫的數(shù)據(jù)是最終一致性的,在性能和一致性兩者間做了取舍,但當(dāng)應(yīng)用要求讀寫強(qiáng)一致性時,就要要求應(yīng)用來選擇訪問哪個庫,互聯(lián)網(wǎng)應(yīng)用場景大多沒有考慮實現(xiàn)讀寫強(qiáng)一致性的場景,無法同時滿足讀寫分離和讀寫強(qiáng)一致性要求。



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

本發(fā)明實施例提供一種數(shù)據(jù)庫訪問方法、裝置和數(shù)據(jù)庫系統(tǒng),能夠保證數(shù)據(jù)的讀寫強(qiáng)一致性。

本發(fā)明第一方面提供一種數(shù)據(jù)庫訪問方法,中間件首先接收來自客戶端的數(shù)據(jù)訪問請求,然后,根據(jù)數(shù)據(jù)訪問請求中攜帶的待訪問的數(shù)據(jù)的鍵值確定待訪問的數(shù)據(jù)對應(yīng)的路由表項,最后,將數(shù)據(jù)訪問請求發(fā)送至該路由表項所指示的目標(biāo)數(shù)據(jù)庫,其中,路由表項中包含鍵值和待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫。中間件還接收來自目標(biāo)數(shù)據(jù)庫返回的結(jié) 果,將結(jié)果返回給客戶端。所述方法通過為中間件增加路由功能,使得中間件根據(jù)路由表項確定要訪問的目標(biāo)數(shù)據(jù)庫,對待訪問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,如果目標(biāo)數(shù)據(jù)庫為只讀庫,且數(shù)據(jù)庫包含至少兩個只讀庫,那么中間件根據(jù)至少兩個只讀庫的負(fù)載大小,從至少兩個只讀庫中確定一個目標(biāo)只讀庫,并將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)只讀庫,實現(xiàn)數(shù)據(jù)庫之間的負(fù)載均衡。

在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,中間件接收數(shù)據(jù)訪問請求之前,還需要將待訪問的數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)庫,具體的中間件接收來自客戶端的數(shù)據(jù)寫入請求,數(shù)據(jù)寫入請求中攜帶待寫入的數(shù)據(jù),待寫入的數(shù)據(jù)中包含該鍵值,然后,為待寫入的數(shù)據(jù)創(chuàng)建路由表項,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,最后將數(shù)據(jù)寫入請求發(fā)送至讀寫庫,以將待寫入的數(shù)據(jù)寫入讀寫庫,讀寫庫還要將待寫入的數(shù)據(jù)同步到只讀庫,保持讀寫庫和制度庫的數(shù)據(jù)的一致性。相應(yīng)的,中間件將數(shù)據(jù)寫入請求發(fā)送至讀寫庫之后,在確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀庫時,將該路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫,后續(xù)就可以從只讀庫中訪問待寫入的數(shù)據(jù)。

在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,如果接收到來自客戶端發(fā)送的數(shù)據(jù)更新請求,則根據(jù)數(shù)據(jù)更新請求中攜帶的待更新的數(shù)據(jù)的鍵值確定待更新的數(shù)據(jù)對應(yīng)的該路由表項,由于數(shù)據(jù)更新請求需要修改數(shù)據(jù),因此中間件將該路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,將數(shù)據(jù)更新請求發(fā)送至讀寫庫;并在確定讀寫庫將待更新的數(shù)據(jù)同步到只讀庫后,將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,如果中間件確定只讀庫發(fā)生故障,那么將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,以保證數(shù)據(jù)庫的強(qiáng)一致性。

在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,當(dāng)中間件接收到來自客戶端的數(shù)據(jù)刪除指令時,根據(jù)數(shù)據(jù)刪除指令中攜帶的待刪除的數(shù)據(jù)的該鍵值確定待刪除的數(shù)據(jù)對應(yīng)的該路由表項,刪除路由表項,并將數(shù)據(jù)刪除指令發(fā)送至讀寫庫,以刪除讀寫庫中的待刪除的數(shù)據(jù)。

本發(fā)明第二方面提供一種數(shù)據(jù)庫訪問方法,中間件首先接收來自客戶端 的數(shù)據(jù)寫入請求,然后,根據(jù)數(shù)據(jù)寫入請求中包括的待寫入的數(shù)據(jù),為待寫入的數(shù)據(jù)創(chuàng)建路由表項,路由表項中包含鍵值和待寫入數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫最后,最后將數(shù)據(jù)寫入請求發(fā)送至讀寫庫,以將待寫入的數(shù)據(jù)寫入讀寫庫,并在確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀庫是,將該路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫,后續(xù)就可以從只讀數(shù)據(jù)庫訪問待寫入的數(shù)據(jù)。所述方法通過為待寫入的數(shù)據(jù)創(chuàng)建路由表項,根據(jù)路由表項能夠獲取要訪問目標(biāo)數(shù)據(jù)庫,對待訪問數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

在本發(fā)明第二方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,當(dāng)接收到來自客戶端發(fā)送的數(shù)據(jù)訪問請求時,根據(jù)數(shù)據(jù)訪問請求中攜帶的待訪問的數(shù)據(jù)的鍵值確定待訪問的數(shù)據(jù)對應(yīng)的該路由表項,其中,路由表項中包含該鍵值和待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,最后將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)數(shù)據(jù)庫,以獲取待訪問的數(shù)據(jù),該目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫。

本發(fā)明第三方面提供一種數(shù)據(jù)庫訪問裝置,該數(shù)據(jù)庫訪問裝置包括:接收模塊、第一確定模塊和發(fā)送模塊。接收模塊用于接收來自客戶端的數(shù)據(jù)訪問請求,第一確定模塊用于根據(jù)數(shù)據(jù)訪問請求中的攜帶待訪問的數(shù)據(jù)的鍵值確定待訪問的數(shù)據(jù)對應(yīng)的路由表項,路由表項中包含鍵值和待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫,發(fā)送模塊用于將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)數(shù)據(jù)庫,從目標(biāo)數(shù)據(jù)庫獲取待訪問的數(shù)據(jù)。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,如果目標(biāo)數(shù)據(jù)庫為只讀庫,且數(shù)據(jù)庫包含至少兩個只讀庫,則發(fā)送模塊根據(jù)至少兩個只讀庫的負(fù)載大小,從至少兩個只讀庫中確定一個目標(biāo)只讀庫,將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)只讀庫。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自客戶端的數(shù)據(jù)寫入請求,相應(yīng)的,數(shù)據(jù)庫訪問裝置還包括創(chuàng)建模塊,創(chuàng)建模塊用于根據(jù)數(shù)據(jù)寫入請求中攜帶的待寫入的數(shù)據(jù),為待寫入的數(shù)據(jù)創(chuàng)建路由表項,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,發(fā)送模塊還用于將數(shù)據(jù)寫入請求發(fā)送至讀寫庫。數(shù)據(jù)庫訪問裝置還可以包括第二確定模塊和設(shè)置模塊,第二確定模塊用于確定讀寫庫是否將待寫入的數(shù)據(jù)同步到只讀庫,設(shè)置模塊,用于在第二確定模塊確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀 庫時,將該路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自客戶端的數(shù)據(jù)更新請求,第一確定模塊還用于根據(jù)數(shù)據(jù)更新請求中攜帶的待更新的數(shù)據(jù)的鍵值,確定待更新的數(shù)據(jù)對應(yīng)的路由表項,相應(yīng)的,數(shù)據(jù)訪問裝置還包括設(shè)置模塊,設(shè)置模塊用于將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,發(fā)送模塊還用于將數(shù)據(jù)更新請求發(fā)送至讀寫庫,設(shè)置模塊還用于在確定讀寫庫將待更新的數(shù)據(jù)同步到只讀庫后,將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,數(shù)據(jù)訪問裝置還包括故障處理模塊,故障處理模塊用于確定只讀庫發(fā)生故障,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,以保證數(shù)據(jù)庫的讀寫強(qiáng)一致性。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自目標(biāo)數(shù)據(jù)庫返回的結(jié)果,并將結(jié)果返回給客戶端。

在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自客戶端的數(shù)據(jù)刪除指令,第一確定模塊還用于根據(jù)數(shù)據(jù)刪除指令中攜帶的待刪除的數(shù)據(jù)的鍵值確定待刪除的數(shù)據(jù)對應(yīng)的路由表項,相應(yīng)的,數(shù)據(jù)庫訪問裝置還包括刪除模塊,刪除模塊用于刪除路由表項,發(fā)送模塊還用于將數(shù)據(jù)刪除指令發(fā)送至讀寫庫。

本發(fā)明第四方面提供一種數(shù)據(jù)庫訪問裝置,該數(shù)據(jù)庫訪問裝置包括接收模塊、創(chuàng)建模塊和發(fā)送模塊。接收模塊用于接收來自客戶端的數(shù)據(jù)寫入請求,創(chuàng)建模塊用于根據(jù)數(shù)據(jù)寫入請求中攜帶的待寫入的數(shù)據(jù),為待寫入的數(shù)據(jù)創(chuàng)建路由表項,路由表項中包含鍵值和待寫入數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,該目標(biāo)數(shù)據(jù)庫為讀寫庫,發(fā)送模塊用于將數(shù)據(jù)寫入請求發(fā)送至讀寫庫。

在本發(fā)明第四方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,數(shù)據(jù)庫訪問裝置還包括第二確定模塊和設(shè)置模塊,第二確定模塊用于確定讀寫庫將待寫入的數(shù)據(jù)是否同步到只讀庫,設(shè)置模塊用于在第二確定模塊確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀庫時,將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

在本發(fā)明第四方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自客戶端的數(shù)據(jù)訪問請求,相應(yīng)的,數(shù)據(jù)庫訪問裝置還包括第一確定模塊,第一確定模塊,根據(jù)數(shù)據(jù)訪問請求中攜帶的待訪問的數(shù)據(jù)的鍵值確 定待訪問的數(shù)據(jù)對應(yīng)的路由表項,該路由表項中包含鍵值和待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫,發(fā)送模塊還用于將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)數(shù)據(jù)庫。

本發(fā)明第五方面提供一種數(shù)據(jù)庫系統(tǒng),該數(shù)據(jù)庫系統(tǒng)包括:客戶端、數(shù)據(jù)庫訪問裝置和數(shù)據(jù)庫,該數(shù)據(jù)庫包含讀寫庫和只讀庫,該數(shù)據(jù)庫訪問裝置用于執(zhí)行本發(fā)明第一方面以及第一方面的任一可能的實現(xiàn)方式提供的數(shù)據(jù)庫訪問方法。

本發(fā)明第六方面提供一種數(shù)據(jù)庫系統(tǒng),該數(shù)據(jù)庫系統(tǒng)包括:客戶端、數(shù)據(jù)庫訪問裝置和數(shù)據(jù)庫,該數(shù)據(jù)庫包含讀寫庫和只讀庫,該數(shù)據(jù)庫訪問裝置用于執(zhí)行本發(fā)明第二方面以及第二方面的任一可能的實現(xiàn)方式提供的數(shù)據(jù)庫訪問方法。

本發(fā)明實施例提供的數(shù)據(jù)庫訪問方法、裝置和數(shù)據(jù)庫系統(tǒng),通過為數(shù)據(jù)庫中的數(shù)據(jù)創(chuàng)建路由表項,路由表項中包括鍵值和目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫,根據(jù)路由表項確定要訪問的目標(biāo)數(shù)據(jù)庫。所述方法通過為中間件增加路由功能,使得中間件根據(jù)路由表項確定要訪問的目標(biāo)數(shù)據(jù)庫,對待訪問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明實施例所適用的數(shù)據(jù)庫系統(tǒng)的架構(gòu)圖;

圖2為本發(fā)明實施例一提供的數(shù)據(jù)庫訪問方法的流程圖;

圖3為數(shù)據(jù)寫入過程的流程圖;

圖4為本發(fā)明實施例二提供的數(shù)據(jù)庫訪問方法的流程圖;

圖5為數(shù)據(jù)查詢過程的流程圖;

圖6為本發(fā)明實施例三提供的數(shù)據(jù)庫訪問方法的流程圖;

圖7為數(shù)據(jù)修改過程的流程圖;

圖8為本發(fā)明實施例四提供的數(shù)據(jù)庫訪問方法的流程圖;

圖9為數(shù)據(jù)刪除過程的流程圖;

圖10為本發(fā)明實施例五提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖;

圖11為本發(fā)明實施例六提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖;

圖12為本發(fā)明實施例七提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖;

圖13為本發(fā)明實施例八提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖;

圖14為本發(fā)明實施例九提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖;

圖15為本發(fā)明實施例十提供的數(shù)據(jù)庫訪問裝置的實體結(jié)構(gòu)的示意圖。

具體實施方式

為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。

本發(fā)明實施例的方法應(yīng)用在基于中間件的分布式數(shù)據(jù)庫系統(tǒng)中,圖1為本發(fā)明實施例所適用的數(shù)據(jù)庫系統(tǒng)的架構(gòu)圖,如圖1所示,數(shù)據(jù)庫系統(tǒng)包括客戶端、中間件和數(shù)據(jù)庫,數(shù)據(jù)庫包含讀寫(Read-Write,簡稱RW)庫和只讀庫。中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)/服務(wù)器的操作系統(tǒng)之上,管理計算機(jī)資源和網(wǎng)絡(luò)通訊。本實施例中為了對應(yīng)用透明實現(xiàn)讀寫強(qiáng)一致性,在中間件中增加了路由系統(tǒng),路由系統(tǒng)中存儲數(shù)據(jù)庫中每張表中每個主鍵所在行的同步狀態(tài)和訪問目標(biāo)數(shù)據(jù)庫,中間件可以包括多個服務(wù)器,服務(wù)器用于完成客戶端和分布式存儲系統(tǒng)的通信。路由系統(tǒng)中包括多個路由表項,每個路由表項包括:索引值和目標(biāo)數(shù)據(jù)庫(Des),索引值用來查詢路由系統(tǒng)中的路由表項,索引值為數(shù)據(jù)記錄的主鍵標(biāo)識(ID)和/或預(yù)留字段(Other-key),對于數(shù)據(jù)庫表中的數(shù)據(jù)記錄,如果有主鍵則將主鍵作為索引值,對于使用非主鍵或多個主鍵的數(shù)據(jù)記錄,可以使用預(yù)留字段作為索引值,因此,本發(fā)明中的索引值可以為多個字段。目標(biāo)數(shù)據(jù)庫表示訪問的數(shù)據(jù)庫是只讀庫還是讀寫庫,讀寫庫用RW表示,只讀庫用R表示。讀寫庫既可以進(jìn)行 寫操作也可以進(jìn)行讀操作,只讀庫只能進(jìn)行讀操作。圖1中數(shù)據(jù)庫包括兩個讀寫庫:讀寫庫1和讀寫庫2,兩個讀寫庫構(gòu)成主備冗余,讀寫庫1為主節(jié)點,讀寫庫2為備份節(jié)點,數(shù)據(jù)庫包括三個只讀庫:只讀庫1、只讀庫2和只讀庫3,圖1只是舉例說明,數(shù)據(jù)庫還可以包含更多或更少的讀寫庫和只讀庫,例如,數(shù)據(jù)庫只包括一個讀寫庫和一個只讀庫。

圖2為本發(fā)明實施例一提供的數(shù)據(jù)庫訪問方法的流程圖,本實施例以數(shù)據(jù)插入流程為例進(jìn)行說明,本實施例的方法由中間件執(zhí)行,如圖2所示,本實施例的方法可以包括以下步驟:

步驟101、接收來自客戶端的數(shù)據(jù)寫入請求,數(shù)據(jù)寫入請求中攜帶待寫入的數(shù)據(jù),待寫入的數(shù)據(jù)中包含鍵值。

客戶端通過數(shù)據(jù)庫連接(Java Data Base Connectivity,簡稱java JDBC)或者開放數(shù)據(jù)庫互連(Open Database Connectivity,簡稱ODBC)協(xié)議提供的應(yīng)用程序編程接口((Application Programming Interface,簡稱API)向中間件通信,中間件接收客戶端發(fā)送的數(shù)據(jù)寫入請求,數(shù)據(jù)寫入請求中包括待寫入的數(shù)據(jù)的標(biāo)識,待寫入的數(shù)據(jù)中包括鍵值,鍵值可以為主鍵標(biāo)識和/或預(yù)留字段,即鍵值可以只包括主鍵,或者只包括預(yù)留字段,或者包括主鍵和預(yù)留字段,其中,主鍵和預(yù)留字段都可以為多個字段。

步驟102、根據(jù)待寫入的數(shù)據(jù),為待寫入的數(shù)據(jù)創(chuàng)建路由表項,路由表項中包含鍵值和待寫入數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫。

中間件接收到數(shù)據(jù)寫入請求后,將數(shù)據(jù)寫入請求發(fā)送給中間件的路由系統(tǒng),路由系統(tǒng)生成待寫入的數(shù)據(jù)對應(yīng)的路由表項,待寫入的數(shù)據(jù)對應(yīng)的路由表項包括:索引值和目標(biāo)數(shù)據(jù)庫,索引值為鍵值,輸入插入請求為一個寫操作,寫操作訪問的目標(biāo)數(shù)據(jù)庫為讀寫庫,因此將目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫。

步驟103、將數(shù)據(jù)寫入請求發(fā)送給讀寫庫。

在生成路由表項后,中間件根據(jù)待寫入數(shù)據(jù)對應(yīng)的路由表項,確定數(shù)據(jù)寫入請求要訪問的目標(biāo)數(shù)據(jù)庫為讀寫庫,則將數(shù)據(jù)寫入請求發(fā)送給讀寫庫,以使讀寫庫將待寫入的數(shù)據(jù)寫入讀寫庫,并將待寫入的數(shù)據(jù)從讀寫庫同步到只讀庫,在寫入完成之后,讀寫庫向中間件返回寫入成功響應(yīng),中間件將寫入成功響應(yīng)返回給APP。其中,中間件在將數(shù)據(jù)寫入請求發(fā)送給讀寫庫時,是根據(jù)數(shù)據(jù)寫入請求中包括的地址信息將數(shù)據(jù)寫入請求發(fā)送給讀寫庫的。讀 寫庫在將待寫入的數(shù)據(jù)庫寫入讀寫庫中后,還需要將待寫入的數(shù)據(jù)同步到只讀庫,讀寫庫可以采用異步復(fù)制的方式將待寫入的數(shù)據(jù)同步到只讀庫。

可選的,本實施例的方法還包括:確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀庫,并將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。具體的,在同步完成之后,讀寫庫會向中間件返回同步完成確定消息,中間件收到讀寫庫返回的同步完成確定消息后,確認(rèn)同步操作完成,此時,讀寫庫和只讀庫中的數(shù)據(jù)保持一致。中間件在確定數(shù)據(jù)同步操作完成之后,對待訪問數(shù)據(jù)對應(yīng)的路由表項進(jìn)行更新,由于此時數(shù)據(jù)同步操作已經(jīng)完成,讀寫庫和只讀庫中的數(shù)據(jù)保持一致,如果需要對待寫入的數(shù)據(jù)進(jìn)行讀操作,那么訪問只讀庫就可以,因此,路由系統(tǒng)將待寫入的數(shù)據(jù)對應(yīng)的路由表項的目標(biāo)數(shù)據(jù)庫更新為只讀庫。

圖3為數(shù)據(jù)寫入過程的流程圖,圖2所示流程圖以從中間件為執(zhí)行主體進(jìn)行描述,如3所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進(jìn)行描述,如圖3所示,1、中間件接收來自客戶端的數(shù)據(jù)寫入請求;2、路由系統(tǒng)根據(jù)數(shù)據(jù)寫入請求包括的待寫入的數(shù)據(jù)為待寫入的數(shù)據(jù)創(chuàng)建路由表項,如圖3所示,該路由表項的鍵值包括為主鍵ID和Other-key,主鍵ID為4,Other-key的取值為NULL,Des的取值為RW;3、中間件將數(shù)據(jù)寫入請求發(fā)送給讀寫庫;4、讀寫庫采用異步復(fù)制方式完成待寫入的數(shù)據(jù)的同步;5、路由系統(tǒng)將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫,如圖3所示,更新后的路由表項的Des的取值為R。

本實施例的方法,中間件通過接收客戶端發(fā)送的數(shù)據(jù)寫入請求,根據(jù)待寫入的數(shù)據(jù)創(chuàng)建待寫入的數(shù)據(jù)對應(yīng)的路由表項,該路由表項的目標(biāo)數(shù)據(jù)庫為讀寫庫,然后,將數(shù)據(jù)寫入請求發(fā)送給讀寫庫。所述方法通過為待寫入的數(shù)據(jù)創(chuàng)建路由表項,后續(xù)可以根據(jù)鍵值查詢該路由表項,根據(jù)路由表項確定要訪問的目標(biāo)數(shù)據(jù)庫,實現(xiàn)對待訪問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

在實施例一的基礎(chǔ)上,可選的待寫入的數(shù)據(jù)對應(yīng)的路由表項還包括時間戳(Req_time)和數(shù)據(jù)同步標(biāo)識(Read-rsync),時間戳為中間件收到SQL修改請求的時間,SQL修改請求可以為數(shù)據(jù)寫入請求或者數(shù)據(jù)更新請求,數(shù)據(jù)同步標(biāo)識用于表示從讀寫庫到只讀庫之間的數(shù)據(jù)同步是否完成,如果同步完成則數(shù)據(jù)同步標(biāo)識取值為Y,如果同步?jīng)]有完成則數(shù)據(jù)同步標(biāo)識取值為N,中 間件可以采用JAVA中的new Date().getTime()方法獲取毫秒級的時間戳。實施例一中,待訪問數(shù)據(jù)對應(yīng)的路由表項中包括的時間戳為數(shù)據(jù)寫入請求的接收時間戳,在創(chuàng)建待寫入的數(shù)據(jù)對應(yīng)的路由表項時,此時還沒有將待寫入的數(shù)據(jù)寫入讀寫庫,因此待寫入的數(shù)據(jù)對應(yīng)的路由表項中包括的數(shù)據(jù)同步標(biāo)識為同步未完成標(biāo)識,在確定讀寫庫將待訪問數(shù)據(jù)同步到只讀庫后,中間件將數(shù)據(jù)同步標(biāo)識更新為同步完成標(biāo)識。

圖4為本發(fā)明實施例二提供的數(shù)據(jù)庫訪問方法的流程圖,本實施例以數(shù)據(jù)查詢流程為例進(jìn)行說明,如圖4所示,本實施例提供的方法可以包括以下步驟:

步驟201、接收來自客戶端的的數(shù)據(jù)訪問請求,數(shù)據(jù)訪問請求中攜帶待訪問的數(shù)據(jù)的鍵值。

步驟202、根據(jù)鍵值確定待訪問的數(shù)據(jù)對應(yīng)的路由表項。

本實施例中以數(shù)據(jù)訪問請求中包括的待訪問的數(shù)據(jù)的鍵值為上述待寫入的數(shù)據(jù)中包含的鍵值,即本實施例是在實施例一的基礎(chǔ)上,對寫入的待數(shù)據(jù)進(jìn)行查詢,當(dāng)然,待訪問的數(shù)據(jù)的鍵值可以不為上述待寫入的數(shù)據(jù)中包含的鍵值,此時,路由系統(tǒng)根據(jù)待訪問的數(shù)據(jù)的鍵值查詢路由表,確定路由表中是否有待訪問的數(shù)據(jù)的鍵值對應(yīng)的路由表項,如果沒有查詢到待訪問的數(shù)據(jù)的鍵值對應(yīng)的路由表項,則向客戶端返回訪問失敗,如果查詢到待訪問的數(shù)據(jù)的鍵值對應(yīng)的路由表項,則執(zhí)行步驟203。

本實施例中,數(shù)據(jù)訪問請求對應(yīng)的路由表項包含鍵值和待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫為讀寫庫或只讀庫。

步驟203、將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)數(shù)據(jù)庫數(shù)據(jù)。

目標(biāo)數(shù)據(jù)庫可能為讀寫庫也可能為只讀庫,中間件根據(jù)數(shù)據(jù)訪問請求中包括的地址信息將數(shù)據(jù)訪問請求發(fā)送給目標(biāo)數(shù)據(jù)庫,目標(biāo)數(shù)據(jù)庫根據(jù)數(shù)據(jù)訪問請求查詢待訪問的數(shù)據(jù),并將待訪問的數(shù)據(jù)攜帶在查詢結(jié)果中返回給中間件,中間件接收來自目標(biāo)數(shù)據(jù)庫返回的結(jié)果,并將結(jié)果返回給客戶端。

如果目標(biāo)數(shù)據(jù)庫為只讀庫,且數(shù)據(jù)庫包含至少兩個只讀庫,則可以根據(jù)至少兩個只讀庫的負(fù)載大小,從至少兩個只讀庫中確定一個目標(biāo)只讀庫,并將數(shù)據(jù)訪問請求發(fā)送至目標(biāo)只讀庫。使得多個只讀庫之間負(fù)載均衡,從而提高了數(shù)據(jù)庫系統(tǒng)的整體性能。

圖5為數(shù)據(jù)查詢過程的流程圖,圖4所示流程圖以從中間件為執(zhí)行主體進(jìn)行描述,如5所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進(jìn)行描述,如圖5所示,1、中間件接收來自客戶端的數(shù)據(jù)訪問請求;2、路由系統(tǒng)根據(jù)鍵值確定待訪問的數(shù)據(jù)的對應(yīng)的路由表項;如圖3所示,該路由表項的鍵值包括主鍵ID和Other-key,主鍵ID為4,Des的取值為RW;3、中間件將數(shù)據(jù)寫入請求發(fā)送給路由表項中包括的目標(biāo)數(shù)據(jù)庫RW。

本實施例的方法,中間件通過接收客戶端發(fā)送的數(shù)據(jù)訪問請求,根據(jù)數(shù)據(jù)訪問請求中包括的鍵值確定數(shù)據(jù)訪問請求對應(yīng)的路由表項,將數(shù)據(jù)訪問請求發(fā)送至路由表項中包括的目標(biāo)數(shù)據(jù)庫進(jìn)行查詢。所述方法中,中間件通過查詢路由表項,獲取待訪問的數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,對待訪問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

在實施例二的基礎(chǔ)上,可選的路由表項中還可以包括時間戳和數(shù)據(jù)同步標(biāo)識,相應(yīng)的,中間件接收到應(yīng)用發(fā)送的數(shù)據(jù)訪問請求時,還需要確定數(shù)據(jù)訪問請求的接收時間戳,判斷數(shù)據(jù)訪問請求的接收時間戳是否等于數(shù)據(jù)訪問請求對應(yīng)的路由表項中包括的時間戳。如果數(shù)據(jù)訪問請求的接收時間戳不等于該路由表項中包括的時間戳,說明待訪問的數(shù)據(jù)與路由表項的鍵值對應(yīng)的數(shù)據(jù)不是并發(fā)數(shù)據(jù),可以從該路由表項中包括的目標(biāo)數(shù)據(jù)庫讀取數(shù)據(jù)。如果數(shù)據(jù)訪問請求的接收時間戳等于路由表項中包括的時間戳,說明待訪問的數(shù)據(jù)與路由表項的鍵值對應(yīng)的數(shù)據(jù)是并發(fā)數(shù)據(jù),此時并發(fā)操作有可能對該路由表項的鍵值對應(yīng)的數(shù)據(jù)進(jìn)行了修改,為了保證讀寫一致性,需要從讀寫庫讀取待訪問的數(shù)據(jù)。

圖6為本發(fā)明實施例三提供的數(shù)據(jù)庫訪問方法的流程圖,本實施例以數(shù)據(jù)修改流程為例進(jìn)行說明,如圖6所示,本實施例提供的方法可以包括以下步驟:

步驟301、接收來自客戶端的數(shù)據(jù)更新請求,數(shù)據(jù)更新請求中攜帶待更新的數(shù)據(jù),待更新的數(shù)據(jù)中包含鍵值。

本實施例中以數(shù)據(jù)更新請求中包括的待更新的數(shù)據(jù)的鍵值為上述待寫入的數(shù)據(jù)的鍵值,即本實施例是在實施例一或?qū)嵤├幕A(chǔ)上,對已經(jīng)寫入的數(shù)據(jù)進(jìn)行修改,當(dāng)然,待更新的數(shù)據(jù)的標(biāo)識可以不為上述待寫入的數(shù)據(jù)的鍵值,此時,路由系統(tǒng)根據(jù)待更新的數(shù)據(jù)的鍵值查詢路由表,確定待更新的 數(shù)據(jù)對應(yīng)的路由表項。

步驟302、根據(jù)鍵值確定待更新的數(shù)據(jù)對應(yīng)的路由表項。

步驟303、將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫。

步驟304、將數(shù)據(jù)更新請求發(fā)送至讀寫庫。

數(shù)據(jù)更新請求用于對數(shù)據(jù)進(jìn)行修改,即屬于寫操作,因此,中間件確定需要對讀寫庫進(jìn)行訪問,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,將數(shù)據(jù)更新請求發(fā)送至讀寫庫。

本實施例中,步驟304與步驟302和303可以同時執(zhí)行。

步驟305、在確定讀寫庫將待更新的數(shù)據(jù)同步到只讀庫之后,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

中間件將數(shù)據(jù)更新請求發(fā)送給讀寫庫后,讀寫庫根據(jù)數(shù)據(jù)更新請求對待更新的數(shù)據(jù)進(jìn)行修改,修改完成之后向中間件返回更新成功響應(yīng),中間件向客戶端返回更新成功響應(yīng),同時讀寫庫還要將待更新的數(shù)據(jù)同步到只讀庫,在同步完成之后,向中間件返回同步完成確定消息,中間件根據(jù)該同步完成確定消息確定數(shù)據(jù)庫將待更新的數(shù)據(jù)從讀寫庫同步到只讀庫,則對數(shù)據(jù)更新請求對應(yīng)的路由表項進(jìn)行更新,將路由表項中包括的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫。

圖7為數(shù)據(jù)修改過程的流程圖,圖6所示流程圖以從中間件為執(zhí)行主體進(jìn)行描述,如7所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進(jìn)行描述,如圖7所示,1、中間件接收客戶端發(fā)送的數(shù)據(jù)更新請求;2、中間件將數(shù)據(jù)更新請求發(fā)送給讀寫庫;3、路由系統(tǒng)根據(jù)數(shù)據(jù)更新請求中包括的待更新的數(shù)據(jù)的鍵值確定數(shù)據(jù)待更新的數(shù)據(jù)對應(yīng)的路由表項,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫;如圖7所示,該路由表項的Des的取值被更新為RW;4、讀寫庫采用異步復(fù)制方式完成待更新的數(shù)據(jù)的同步;5、將路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為只讀庫,如圖7所示,更新后的路由表項的Des的取值為R。

本實施例的方法,中間件接收客戶端發(fā)送的數(shù)據(jù)更新請求,將數(shù)據(jù)更新請求發(fā)送給讀寫庫,同時根據(jù)數(shù)據(jù)更新請求中包括的待更新的數(shù)據(jù)的鍵值查詢路由表,確定待更新的數(shù)據(jù)對應(yīng)的路由表項,將路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫,在確定讀寫庫將待更新的數(shù)據(jù)同步到只讀庫之后,將路由表項中包括的目標(biāo)數(shù)據(jù)庫更新為只讀庫。所述方法中間件通過更新路由表項, 使得中間件能夠獲取待訪問的數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,對待訪問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

在實施例三的基礎(chǔ)上,可選的路由表項中還可以包括時間戳和數(shù)據(jù)同步標(biāo)識,相應(yīng)的,中間件在接收到數(shù)據(jù)更新請求后,還需要確定數(shù)據(jù)更新請求的接收時間戳,在確定數(shù)據(jù)更新請求對應(yīng)的路由表項后,將該路由表項中包括的時間戳更新為數(shù)據(jù)更新請求的接收時間戳,此時由于數(shù)據(jù)同步操作還沒有完成,需要將該路由表項中包括的數(shù)據(jù)同步標(biāo)識更新為同步未完成標(biāo)識,中間件在確定待更新的數(shù)據(jù)同步到只讀庫之后,將該路由表項中包括的數(shù)據(jù)同步標(biāo)識更新為同步完成標(biāo)識。

圖8為本發(fā)明實施例四提供的數(shù)據(jù)庫訪問方法的流程圖,本實施例以數(shù)據(jù)刪除流程為例進(jìn)行說明,如圖8所示,本實施例提供的方法可以包括以下步驟:

步驟401、接收客戶端發(fā)送的數(shù)據(jù)刪除指令,數(shù)據(jù)刪除指令中攜帶待刪除的數(shù)據(jù)的鍵值。

本實施例中以待刪除的數(shù)據(jù)的鍵值為上述待寫入的數(shù)據(jù)的鍵值,即本實施例是在實施例一至實施例三任意實施例的基礎(chǔ)上,對待寫入的數(shù)據(jù)進(jìn)行刪除,當(dāng)然,待刪除的數(shù)據(jù)的鍵值也可以不為上述待寫入的數(shù)據(jù)的鍵值,此時,路由系統(tǒng)根據(jù)待刪除的數(shù)據(jù)的鍵值查詢路由表,確定數(shù)據(jù)刪除指令對應(yīng)的路由表項。

步驟402、根據(jù)鍵值確定待刪除的數(shù)據(jù)對應(yīng)的路由表項。

步驟403、刪除路由表項。

步驟404、將數(shù)據(jù)刪除指令發(fā)送至讀寫庫。

中間件將數(shù)據(jù)刪除指令發(fā)送給讀寫庫,以使得讀寫庫根據(jù)待刪除的數(shù)據(jù)的鍵值對待刪除的數(shù)據(jù)進(jìn)行刪除,讀寫庫在刪除本地保存的待刪除的數(shù)據(jù)后,向中間件返回刪除成功響應(yīng),中間件向APP返回刪除成功響應(yīng),同時讀寫庫采用異步復(fù)制的方法刪除只讀庫中的待訪問數(shù)據(jù),保持讀寫庫和只讀庫的數(shù)據(jù)一致性,并在同步完成后,向中間件返回同步完成確定消息。

圖9為數(shù)據(jù)刪除過程的流程圖,圖8所示流程圖以從中間件為執(zhí)行主體進(jìn)行描述,如9所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進(jìn)行描述,如圖9所示,1、中間件接收客戶端發(fā)送的數(shù)據(jù)刪除指令;2、中間件將數(shù)據(jù)刪除 指令發(fā)送給讀寫庫;3、路由系統(tǒng)刪除待刪除的數(shù)據(jù)對應(yīng)的路由表項;4、讀寫庫采用異步復(fù)制方式刪除只讀庫中的待刪除的數(shù)據(jù)。需要說明的是,3和4在執(zhí)行時沒有先后順序,也可以同時執(zhí)行。

本實施例的方法,中間件接收客戶端發(fā)送的數(shù)據(jù)刪除指令,將數(shù)據(jù)刪除指令發(fā)送給讀寫庫,以使得讀寫庫待刪除的數(shù)據(jù)進(jìn)行刪除,并刪除只讀庫中的待訪問數(shù)據(jù),同時根據(jù)據(jù)刪除指令中攜帶待刪除的數(shù)據(jù)的鍵值確定待刪除的數(shù)據(jù)對應(yīng)的路由表項,并刪除路由表項。所述方法在刪除待刪除的數(shù)據(jù)之后,中間件會相應(yīng)刪除路由表項,保證路由表中的路由表項的有效性,能夠?qū)ΥL問的數(shù)據(jù)進(jìn)行精確路由,不需要對客戶端進(jìn)行任何修改就能夠保證數(shù)據(jù)的一致性。

需要說明的是,上述實施例一至實施例四中,只讀庫的數(shù)量可以為一個或多個,當(dāng)只讀庫的數(shù)量為一個時,如果中間件確定只讀庫故障;則將路由表中的目標(biāo)數(shù)據(jù)庫修改為讀寫庫,此時,只能從讀寫庫中讀取數(shù)據(jù),從而保證數(shù)據(jù)庫的強(qiáng)讀寫一致性。由于只讀庫故障,只需修改路由系統(tǒng)中相應(yīng)路由表項的Des字段為RW,即可逐條動態(tài)引導(dǎo)流量,使得數(shù)據(jù)庫的維護(hù)更加高效、簡便。

圖10為本發(fā)明實施例五提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖,如圖10所示,本實施例提供的數(shù)據(jù)庫訪問裝置包括:接收模塊11、第一確定模塊12和發(fā)送模塊13。

接收模塊,用于接收來自客戶端的數(shù)據(jù)訪問請求,數(shù)據(jù)訪問請求中攜帶待訪問的數(shù)據(jù)的鍵值。

第一確定模塊12,用于根據(jù)所述鍵值確定所述待訪問的數(shù)據(jù)對應(yīng)的路由表項,其中,所述路由表項中包含所述鍵值和所述待訪問數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)庫為所述讀寫庫或所述只讀庫。

發(fā)送模塊13,用于將所述數(shù)據(jù)訪問請求發(fā)送至所述目標(biāo)數(shù)據(jù)庫。

可選的,如果目標(biāo)數(shù)據(jù)庫為只讀庫,數(shù)據(jù)庫包含至少兩個只讀庫,則發(fā)送模塊13具體用于:根據(jù)所述至少兩個只讀庫的負(fù)載大小,從所述至少兩個只讀庫中確定一個目標(biāo)只讀庫,并將所述數(shù)據(jù)訪問請求發(fā)送至所述目標(biāo)只讀庫。

圖11為本發(fā)明實施例六提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖,如圖11 所示,本實施例提供的數(shù)據(jù)庫訪問裝置在圖10所示裝置的基礎(chǔ)上還包括:創(chuàng)建模塊14、第二確定模塊15和設(shè)置模塊16。

所述接收模塊11還用于:接收來自所述客戶端的數(shù)據(jù)寫入請求,所述數(shù)據(jù)寫入請求中攜帶待寫入的數(shù)據(jù),所述待寫入的數(shù)據(jù)中包含所述鍵值。

創(chuàng)建模塊14,用于根據(jù)所述待寫入的數(shù)據(jù),為所述待寫入的數(shù)據(jù)創(chuàng)建所述路由表項,并將所述路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為讀寫庫。

所述發(fā)送模塊13還用于:將所述數(shù)據(jù)寫入請求發(fā)送至所述讀寫庫,第二確定模塊15用于確定所述讀寫庫將所述待寫入的數(shù)據(jù)同步到所述只讀庫,設(shè)置模塊16用于將所述路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為所述只讀庫。

圖12為本發(fā)明實施例七提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖,如圖12所示,本實施例提供的數(shù)據(jù)庫訪問裝置在圖10所示裝置的基礎(chǔ)上還包括:設(shè)置模塊16。

所述接收模塊11還用于:接收來自所述客戶端的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中攜帶待更新的數(shù)據(jù),所述待更新的數(shù)據(jù)中包含所述鍵值;

所述第一確定模塊12還用于:根據(jù)所述鍵值確定所述待更新的數(shù)據(jù)對應(yīng)的所述路由表項;

設(shè)置模塊16,用于將所述路由表項中的目標(biāo)數(shù)據(jù)庫設(shè)置為所述讀寫庫;

所述發(fā)送模塊13還用于:將所述數(shù)據(jù)更新請求發(fā)送至所述讀寫庫;

所述設(shè)置模塊16還用于:在確定所述讀寫庫將所述待更新的數(shù)據(jù)同步到所述只讀庫后,將所述路由表項的目標(biāo)數(shù)據(jù)庫設(shè)置為所述只讀庫。

圖13為本發(fā)明實施例八提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖,如圖13所示,本實施例提供的數(shù)據(jù)庫訪問裝置在圖10所示裝置的基礎(chǔ)上還包括:刪除模塊17。

所述接收模塊11還用于:接收來自所述客戶端的數(shù)據(jù)刪除指令,所述數(shù)據(jù)刪除指令中攜帶待刪除的數(shù)據(jù)的所述鍵值;

所述第一確定模塊12還用于:根據(jù)所述鍵值確定所述待刪除的數(shù)據(jù)對應(yīng)的所述路由表項;

刪除模塊17,用于刪除所述路由表項;

所述發(fā)送模塊13還用于:將所述數(shù)據(jù)刪除指令發(fā)送至所述讀寫庫。

圖14為本發(fā)明實施例九提供的數(shù)據(jù)庫訪問裝置的結(jié)構(gòu)示意圖,如圖14 所示,本實施例提供的數(shù)據(jù)庫訪問裝置包括:接收模塊21、創(chuàng)建模塊22和發(fā)送模塊23。

接收模塊21,用于接收來自客戶端的數(shù)據(jù)寫入請求,所述數(shù)據(jù)寫入請求中攜帶待寫入的數(shù)據(jù),所述待寫入的數(shù)據(jù)中包含鍵值.

創(chuàng)建模塊22,用于根據(jù)所述待寫入的數(shù)據(jù),為所述待寫入的數(shù)據(jù)創(chuàng)建路由表項,所述路由表項中包含所述鍵值和所述待寫入數(shù)據(jù)的目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)庫為所述讀寫庫。

發(fā)送模塊23,用于將所述數(shù)據(jù)寫入請求發(fā)送至所述讀寫庫。

在上述圖10-14所示的數(shù)據(jù)庫訪問裝置的基礎(chǔ)上,可選的,所述數(shù)據(jù)庫訪問裝置還包括:故障處理模塊,故障處理模塊用于確定所述只讀庫發(fā)生故障,將所述路由表項中的所述目標(biāo)數(shù)據(jù)庫設(shè)置為所述讀寫庫。

在上述圖10-14所示的數(shù)據(jù)庫訪問裝置的基礎(chǔ)上,可選的,所述接收模塊還用于:接收來自所述目標(biāo)數(shù)據(jù)庫返回的結(jié)果,并將所述結(jié)果返回給所述客戶端。

實施例五至實施例九提供的數(shù)據(jù)庫訪問裝置包括的各功能模塊的具體實現(xiàn)方式,請參照實施例一至實施例四所示的方法的相關(guān)描述,這里不再贅述。

圖15為本發(fā)明實施例十提供的數(shù)據(jù)庫訪問裝置的實體結(jié)構(gòu)的示意圖,如圖15所示,數(shù)據(jù)庫訪問裝置300包括通信接口31、處理器32、存儲器33和總線34,其中,通信接口31、處理器32、存儲器33通過總線34相互連接??偩€34可以是外設(shè)部件互連標(biāo)準(zhǔn)(peripheral component interconnect,簡稱PCI)總線或擴(kuò)展工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(extended industry standard architecture,簡稱EISA)總線等。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖15中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。通信接口31用于實現(xiàn)數(shù)據(jù)庫訪問裝置與其他設(shè)備(例如客戶端、讀寫庫和只讀庫)之間的通信。存儲器33可能包含隨機(jī)存取存儲器(random access memory,簡稱RAM),也可能還包括非易失性存儲器(non-volatile memory),例如至少一個磁盤存儲器。

處理器32執(zhí)行存儲器33所存放的程序代碼,實現(xiàn)實施例一至實施例四的方法。

上述的處理器32可以是通用處理器,包括中央處理器(Central Processing Unit,簡稱CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)等;還可以是數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。

本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。

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