国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

      文檔序號:12596179閱讀:247來源:國知局
      數(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ù)庫讀寫分離和橫向擴展(Scale horizontally,簡稱Scale-Out),但這類方案無法兼顧性能和強一致性,需要應(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ù)是最終一致性的,在性能和一致性兩者間做了取舍,但當應(yīng)用要求讀寫強一致性時,就要要求應(yīng)用來選擇訪問哪個庫,互聯(lián)網(wǎng)應(yīng)用場景大多沒有考慮實現(xiàn)讀寫強一致性的場景,無法同時滿足讀寫分離和讀寫強一致性要求。



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

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

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

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

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

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

      在本發(fā)明第一方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,當中間件接收到來自客戶端的數(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ù)的目標數(shù)據(jù)庫,目標數(shù)據(jù)庫為讀寫庫最后,最后將數(shù)據(jù)寫入請求發(fā)送至讀寫庫,以將待寫入的數(shù)據(jù)寫入讀寫庫,并在確定讀寫庫將待寫入的數(shù)據(jù)同步到只讀庫是,將該路由表項的目標數(shù)據(jù)庫設(shè)置為只讀庫,后續(xù)就可以從只讀數(shù)據(jù)庫訪問待寫入的數(shù)據(jù)。所述方法通過為待寫入的數(shù)據(jù)創(chuàng)建路由表項,根據(jù)路由表項能夠獲取要訪問目標數(shù)據(jù)庫,對待訪問數(shù)據(jù)進行精確路由,不需要對客戶端進行任何修改就能夠保證數(shù)據(jù)的一致性。

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

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

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

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

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

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

      在本發(fā)明第三方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自目標數(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ù)的目標數(shù)據(jù)庫,該目標數(shù)據(jù)庫為讀寫庫,發(fā)送模塊用于將數(shù)據(jù)寫入請求發(fā)送至讀寫庫。

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

      在本發(fā)明第四方面的基礎(chǔ)上,在一種可能的實現(xiàn)方式中,接收模塊還用于接收來自客戶端的數(shù)據(jù)訪問請求,相應(yīng)的,數(shù)據(jù)庫訪問裝置還包括第一確定模塊,第一確定模塊,根據(jù)數(shù)據(jù)訪問請求中攜帶的待訪問的數(shù)據(jù)的鍵值確 定待訪問的數(shù)據(jù)對應(yīng)的路由表項,該路由表項中包含鍵值和待訪問數(shù)據(jù)的目標數(shù)據(jù)庫,目標數(shù)據(jù)庫為讀寫庫或只讀庫,發(fā)送模塊還用于將數(shù)據(jù)訪問請求發(fā)送至目標數(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)建路由表項,路由表項中包括鍵值和目標數(shù)據(jù)庫,目標數(shù)據(jù)庫為讀寫庫或只讀庫,根據(jù)路由表項確定要訪問的目標數(shù)據(jù)庫。所述方法通過為中間件增加路由功能,使得中間件根據(jù)路由表項確定要訪問的目標數(shù)據(jù)庫,對待訪問的數(shù)據(jù)進行精確路由,不需要對客戶端進行任何修改就能夠保證數(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ù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

      本發(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)庫和只讀庫。中間件是一種獨立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機/服務(wù)器的操作系統(tǒng)之上,管理計算機資源和網(wǎng)絡(luò)通訊。本實施例中為了對應(yīng)用透明實現(xiàn)讀寫強一致性,在中間件中增加了路由系統(tǒng),路由系統(tǒng)中存儲數(shù)據(jù)庫中每張表中每個主鍵所在行的同步狀態(tài)和訪問目標數(shù)據(jù)庫,中間件可以包括多個服務(wù)器,服務(wù)器用于完成客戶端和分布式存儲系統(tǒng)的通信。路由系統(tǒng)中包括多個路由表項,每個路由表項包括:索引值和目標數(shù)據(jù)庫(Des),索引值用來查詢路由系統(tǒng)中的路由表項,索引值為數(shù)據(jù)記錄的主鍵標識(ID)和/或預(yù)留字段(Other-key),對于數(shù)據(jù)庫表中的數(shù)據(jù)記錄,如果有主鍵則將主鍵作為索引值,對于使用非主鍵或多個主鍵的數(shù)據(jù)記錄,可以使用預(yù)留字段作為索引值,因此,本發(fā)明中的索引值可以為多個字段。目標數(shù)據(jù)庫表示訪問的數(shù)據(jù)庫是只讀庫還是讀寫庫,讀寫庫用RW表示,只讀庫用R表示。讀寫庫既可以進行 寫操作也可以進行讀操作,只讀庫只能進行讀操作。圖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ù)插入流程為例進行說明,本實施例的方法由中間件執(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ù)的標識,待寫入的數(shù)據(jù)中包括鍵值,鍵值可以為主鍵標識和/或預(yù)留字段,即鍵值可以只包括主鍵,或者只包括預(yù)留字段,或者包括主鍵和預(yù)留字段,其中,主鍵和預(yù)留字段都可以為多個字段。

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

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

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

      在生成路由表項后,中間件根據(jù)待寫入數(shù)據(jù)對應(yīng)的路由表項,確定數(shù)據(jù)寫入請求要訪問的目標數(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ù)同步到只讀庫,并將路由表項的目標數(shù)據(jù)庫設(shè)置為只讀庫。具體的,在同步完成之后,讀寫庫會向中間件返回同步完成確定消息,中間件收到讀寫庫返回的同步完成確定消息后,確認同步操作完成,此時,讀寫庫和只讀庫中的數(shù)據(jù)保持一致。中間件在確定數(shù)據(jù)同步操作完成之后,對待訪問數(shù)據(jù)對應(yīng)的路由表項進行更新,由于此時數(shù)據(jù)同步操作已經(jīng)完成,讀寫庫和只讀庫中的數(shù)據(jù)保持一致,如果需要對待寫入的數(shù)據(jù)進行讀操作,那么訪問只讀庫就可以,因此,路由系統(tǒng)將待寫入的數(shù)據(jù)對應(yīng)的路由表項的目標數(shù)據(jù)庫更新為只讀庫。

      圖3為數(shù)據(jù)寫入過程的流程圖,圖2所示流程圖以從中間件為執(zhí)行主體進行描述,如3所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進行描述,如圖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)將路由表項的目標數(shù)據(jù)庫設(shè)置為只讀庫,如圖3所示,更新后的路由表項的Des的取值為R。

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

      在實施例一的基礎(chǔ)上,可選的待寫入的數(shù)據(jù)對應(yīng)的路由表項還包括時間戳(Req_time)和數(shù)據(jù)同步標識(Read-rsync),時間戳為中間件收到SQL修改請求的時間,SQL修改請求可以為數(shù)據(jù)寫入請求或者數(shù)據(jù)更新請求,數(shù)據(jù)同步標識用于表示從讀寫庫到只讀庫之間的數(shù)據(jù)同步是否完成,如果同步完成則數(shù)據(jù)同步標識取值為Y,如果同步?jīng)]有完成則數(shù)據(jù)同步標識取值為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ù)同步標識為同步未完成標識,在確定讀寫庫將待訪問數(shù)據(jù)同步到只讀庫后,中間件將數(shù)據(jù)同步標識更新為同步完成標識。

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

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

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

      本實施例中以數(shù)據(jù)訪問請求中包括的待訪問的數(shù)據(jù)的鍵值為上述待寫入的數(shù)據(jù)中包含的鍵值,即本實施例是在實施例一的基礎(chǔ)上,對寫入的待數(shù)據(jù)進行查詢,當然,待訪問的數(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ù)的目標數(shù)據(jù)庫,目標數(shù)據(jù)庫為讀寫庫或只讀庫。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      本實施例中以待刪除的數(shù)據(jù)的鍵值為上述待寫入的數(shù)據(jù)的鍵值,即本實施例是在實施例一至實施例三任意實施例的基礎(chǔ)上,對待寫入的數(shù)據(jù)進行刪除,當然,待刪除的數(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ù)進行刪除,讀寫庫在刪除本地保存的待刪除的數(shù)據(jù)后,向中間件返回刪除成功響應(yīng),中間件向APP返回刪除成功響應(yīng),同時讀寫庫采用異步復(fù)制的方法刪除只讀庫中的待訪問數(shù)據(jù),保持讀寫庫和只讀庫的數(shù)據(jù)一致性,并在同步完成后,向中間件返回同步完成確定消息。

      圖9為數(shù)據(jù)刪除過程的流程圖,圖8所示流程圖以從中間件為執(zhí)行主體進行描述,如9所示流程圖是從整個數(shù)據(jù)庫系統(tǒng)的交互過程進行描述,如圖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ù)進行刪除,并刪除只讀庫中的待訪問數(shù)據(jù),同時根據(jù)據(jù)刪除指令中攜帶待刪除的數(shù)據(jù)的鍵值確定待刪除的數(shù)據(jù)對應(yīng)的路由表項,并刪除路由表項。所述方法在刪除待刪除的數(shù)據(jù)之后,中間件會相應(yīng)刪除路由表項,保證路由表中的路由表項的有效性,能夠?qū)ΥL問的數(shù)據(jù)進行精確路由,不需要對客戶端進行任何修改就能夠保證數(shù)據(jù)的一致性。

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

      圖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ù)的目標數(shù)據(jù)庫,所述目標數(shù)據(jù)庫為所述讀寫庫或所述只讀庫。

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

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

      圖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)建所述路由表項,并將所述路由表項中的目標數(shù)據(jù)庫設(shè)置為讀寫庫。

      所述發(fā)送模塊13還用于:將所述數(shù)據(jù)寫入請求發(fā)送至所述讀寫庫,第二確定模塊15用于確定所述讀寫庫將所述待寫入的數(shù)據(jù)同步到所述只讀庫,設(shè)置模塊16用于將所述路由表項的目標數(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,用于將所述路由表項中的目標數(shù)據(jù)庫設(shè)置為所述讀寫庫;

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

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

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

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

      在上述圖10-14所示的數(shù)據(jù)庫訪問裝置的基礎(chǔ)上,可選的,所述接收模塊還用于:接收來自所述目標數(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è)部件互連標準(peripheral component interconnect,簡稱PCI)總線或擴展工業(yè)標準結(jié)構(gòu)(extended industry standard architecture,簡稱EISA)總線等。所述總線可以分為地址總線、數(shù)據(jù)總線、控制總線等。為便于表示,圖15中僅用一條粗線表示,但并不表示僅有一根總線或一種類型的總線。通信接口31用于實現(xiàn)數(shù)據(jù)庫訪問裝置與其他設(shè)備(例如客戶端、讀寫庫和只讀庫)之間的通信。存儲器33可能包含隨機存取存儲器(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)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

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

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