一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng),其中,基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法包括:接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從所述數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句;解析所述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與所述解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點;在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句;合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。通過本發(fā)明提供的方法,能夠?qū)崿F(xiàn)數(shù)據(jù)庫的并行訪問,加快了數(shù)據(jù)庫查詢的速度。
【專利說明】一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫訪問【技術(shù)領(lǐng)域】,具體涉及一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng)。
【背景技術(shù)】
[0002]對于目前的集中式數(shù)據(jù)庫,將數(shù)據(jù)均存放在數(shù)據(jù)庫管理中心,可以參見圖1,比如,每個應(yīng)用營業(yè)場所都要定時的將自己監(jiān)控獲取的網(wǎng)絡(luò)日志通過應(yīng)用程序接口提供到市管理中心,市管理中心提供接口將數(shù)據(jù)插入到市管理中心數(shù)據(jù)庫,市管理中心按照接口將數(shù)據(jù)傳輸?shù)绞」芾碇行?,一級一級上傳。另外,當上級管理中心下達數(shù)據(jù)審計指令時,下級管理中心提供接收數(shù)據(jù)審計指令接口,下級管理中心將數(shù)據(jù)審計指令存儲到本地,然后將數(shù)據(jù)審計指令達到當前管理中心的下級管理中心,一級一級下達。
[0003]目前的集中式數(shù)據(jù)庫,對硬件的存儲空間要求比較高,數(shù)據(jù)庫管理中心無法進行存儲空間的擴容處理;對硬件的處理性能要求比較高,所有的下級管理中心都需要將自己的日志傳輸?shù)缴霞壒芾碇行?,每天日志量非常大;?shù)據(jù)庫管理中心檢索數(shù)據(jù)的速度慢,需要從巨大的數(shù)據(jù)量中檢索查詢,效率低下;數(shù)據(jù)庫管理中心的數(shù)據(jù)嚴重滯后,實時性不高,且數(shù)據(jù)上傳接口復(fù)雜,對沒有上傳的數(shù)據(jù)無法監(jiān)控;所有的工作都依賴于上級數(shù)據(jù)庫管理中心,一旦上級數(shù)據(jù)庫管理中心出現(xiàn)故障,所有的工作將會無法運行。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是提供一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng),實現(xiàn)數(shù)據(jù)庫的并行訪問,加快數(shù)據(jù)查詢檢索的速度。
[0005]依據(jù)本發(fā)明的一個方面,提供了一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法,包括:
[0006]接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從所述數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句;
[0007]解析所述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與所述解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點;
[0008]在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句;
[0009]合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
[0010]依據(jù)本發(fā)明的另一個方面,提供了一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問系統(tǒng),包括:
[0011]請求消息接收單元,用于接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從所述數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句;
[0012]節(jié)點匹配單元,用于解析所述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與所述解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點;
[0013]執(zhí)行單元,用于在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句;
[0014]執(zhí)行結(jié)果合并單元,用于合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
[0015]本發(fā)明提供的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng),首先從客戶端發(fā)送的數(shù)據(jù)庫訪問請求中提取出待執(zhí)行的SQL語句,并對該SQL語句進行解析,使之成為能夠執(zhí)行的SQL語句;然后根據(jù)預(yù)設(shè)的匹配規(guī)則從眾多的數(shù)據(jù)庫節(jié)點中匹配出與該SQL匹配的至少一個數(shù)據(jù)庫節(jié)點,并在匹配出的數(shù)據(jù)庫節(jié)點上執(zhí)行該SQL語句;最后將多個數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果進行合并,并將合并后的執(zhí)行結(jié)果反饋給客戶端。通過本發(fā)明提供的方法,數(shù)據(jù)庫管理中心將數(shù)據(jù)查詢SQL語句發(fā)送到各個數(shù)據(jù)庫節(jié)點,各個數(shù)據(jù)庫節(jié)點根據(jù)根據(jù)SQL語句進行檢索查詢,然后將檢索查詢的結(jié)果合并后返回給數(shù)據(jù)庫管理中心,解決了數(shù)據(jù)檢索速度慢的問題,提升了海量數(shù)據(jù)檢索的性能。
【專利附圖】
【附圖說明】
[0016]圖1為現(xiàn)有技術(shù)方案數(shù)據(jù)庫網(wǎng)絡(luò)架構(gòu)圖;
[0017]圖2為本實施例一的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法流程圖;
[0018]圖3為本發(fā)明實施例一中的基于數(shù)據(jù)庫節(jié)點的分布式數(shù)據(jù)庫的網(wǎng)絡(luò)架構(gòu)圖;
[0019]圖4為本發(fā)明實施例一的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法中數(shù)據(jù)處理的整體架構(gòu)圖;
[0020]圖5為本發(fā)明實施例一中當SQL語句為事務(wù)語句時的處理流程圖;
[0021]圖6為本發(fā)明實施例一種當SQL語句為非事務(wù)語句時的處理流程圖;
[0022]圖7為本發(fā)明實施例以的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法的整體流程圖;
[0023]圖8為本發(fā)明實施例二的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問系統(tǒng)示意圖。
【具體實施方式】
[0024]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0025]實施例一、一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法。下面結(jié)合圖2-圖6對本發(fā)明提供的方法進行詳細描述。
[0026]圖2中,S201、接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從該數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句。
[0027]具體的,可以參見圖3,本實施例的數(shù)據(jù)庫是基于多級分布式數(shù)據(jù)庫且是基于MySQL數(shù)據(jù)庫,即每一級數(shù)據(jù)庫管理中心均存在多個數(shù)據(jù)庫節(jié)點,并且每一級數(shù)據(jù)庫均存有子節(jié)點數(shù)據(jù)庫。因此,首先需要建立一個分布式集群數(shù)據(jù)庫,在數(shù)據(jù)庫管理中心安裝存儲節(jié)點數(shù)據(jù)庫,設(shè)置下級存儲節(jié)點數(shù)據(jù)庫,并通過設(shè)置訪問數(shù)據(jù)庫的IP、用戶名、密碼和端口信息等,來設(shè)置訪問數(shù)據(jù)的權(quán)限;統(tǒng)一各個節(jié)點數(shù)據(jù)庫中數(shù)據(jù)存儲的模型;然后搭建上級數(shù)據(jù)庫管理中心,在上級數(shù)據(jù)庫管理中心中創(chuàng)建訪問分布式數(shù)據(jù)庫的用戶名和密碼以及默認的連接數(shù)據(jù)庫。若建立的本數(shù)據(jù)庫管理中心需要上級數(shù)據(jù)庫管理中心,可以再搭建本級數(shù)據(jù)庫管理中心的上級數(shù)據(jù)庫管理中心,搭建的本數(shù)據(jù)庫管理中心作為上級數(shù)據(jù)庫管理中心的子數(shù)據(jù)庫節(jié)點,其中,每一個數(shù)據(jù)庫節(jié)點中均存在若干個數(shù)據(jù)庫,數(shù)據(jù)庫的IP、用戶名、密碼或端口信息與本數(shù)據(jù)庫所在的數(shù)據(jù)庫節(jié)點的IP、用戶名、密碼以及端口信息對應(yīng)。其中,數(shù)據(jù)庫存儲節(jié)點的配置由配置管理服務(wù)器來完成。
[0028]搭建了分布式數(shù)據(jù)庫之后,參見圖4,代理服務(wù)器會將大量的數(shù)據(jù)進行數(shù)據(jù)切分處理,將整個數(shù)據(jù)切分成若干塊數(shù)據(jù),然后按照一定的規(guī)則將切分后的數(shù)據(jù)分別存儲到相應(yīng)的節(jié)點數(shù)據(jù)庫中。配置管理器還會對切分后的數(shù)據(jù)進行檢測,檢測數(shù)據(jù)切分是否正確,如果不正確,發(fā)出異常警告。另外,下級子數(shù)據(jù)庫節(jié)點配置表數(shù)據(jù)同步,上級數(shù)據(jù)庫管理中心所做的任何數(shù)據(jù)庫操作,下級子數(shù)據(jù)庫節(jié)點都能夠?qū)崟r同步。
[0029]若客戶端(也可以稱為客戶端應(yīng)用程序)希望訪問數(shù)據(jù)庫,客戶端的應(yīng)用程序向數(shù)據(jù)庫代理服務(wù)器發(fā)送數(shù)據(jù)庫訪問請求消息,數(shù)據(jù)庫代理服務(wù)器接收到客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,根據(jù)MySQL數(shù)據(jù)庫協(xié)議標準從數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句。另外,客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息中還攜帶有客戶端的標識信息,以便后續(xù)可以根據(jù)客戶端的標識信息找到與該客戶端匹配的數(shù)據(jù)庫節(jié)點。
[0030]S202、解析上述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點。
[0031]具體的,步驟S201中,數(shù)據(jù)庫代理服務(wù)器從客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句,該提取出的SQL語句是不能夠在數(shù)據(jù)庫執(zhí)行的SQL語句,因此,本步驟數(shù)據(jù)庫代理服務(wù)器對提取出的SQL語句進行解析,解析出的SQL語句能夠直接在數(shù)據(jù)庫上執(zhí)行。
[0032]解析SQL語句后,數(shù)據(jù)庫代理服務(wù)器根據(jù)預(yù)設(shè)的匹配規(guī)則匹配找到與解析后的SQL語句匹配(也可以說與該SQL語句對應(yīng)的客戶端匹配)的數(shù)據(jù)庫節(jié)點(以下稱為目標數(shù)據(jù)庫節(jié)點),比如,根據(jù)客戶端標識與目標數(shù)據(jù)庫節(jié)點標識的對應(yīng)關(guān)系匹配出客戶端(由客戶端而來的SQL語句)對應(yīng)的目標數(shù)據(jù)庫節(jié)點,該目標數(shù)據(jù)庫節(jié)點可能有一個也可能有多個,客戶端對應(yīng)的目標數(shù)據(jù)庫節(jié)點的個數(shù)由預(yù)設(shè)的匹配規(guī)則決定。
[0033]當匹配出的客戶端(SQL語句)對應(yīng)的目標數(shù)據(jù)庫節(jié)點后,數(shù)據(jù)庫代理服務(wù)器對匹配出的所有目標數(shù)據(jù)庫節(jié)點進行心跳檢測,即檢測這些目標數(shù)據(jù)庫節(jié)點是否處于在線狀態(tài)。數(shù)據(jù)庫代理服務(wù)器會定時向所有的數(shù)據(jù)庫節(jié)點握手,檢測它們的連接狀態(tài),當匹配出的目標數(shù)據(jù)庫節(jié)點處于離線狀態(tài)時,就不將SQL語句發(fā)送給處于離線狀態(tài)的數(shù)據(jù)庫節(jié)點,只將SQL發(fā)送給處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點。在具體實現(xiàn)的過程中,當匹配出的數(shù)據(jù)庫節(jié)點只有一個時,檢測該數(shù)據(jù)庫節(jié)點是否處于在線狀態(tài),若處于在線狀態(tài),數(shù)據(jù)庫代理服務(wù)器向該數(shù)據(jù)庫節(jié)點發(fā)送SQL語句。當匹配出的數(shù)據(jù)庫節(jié)點有多個時,有兩種方式,第一種方式可以稱為強一致性策略,即只有通過預(yù)設(shè)的匹配規(guī)則匹配出的與客戶端對應(yīng)的所有目標數(shù)據(jù)庫節(jié)點都同時處于在線狀態(tài)時,才能向其中的數(shù)據(jù)庫節(jié)點發(fā)送SQL語句;若其中的某一個數(shù)據(jù)庫節(jié)點處于離線狀態(tài)時,就不允許向這些數(shù)據(jù)庫節(jié)點中的任何一個數(shù)據(jù)庫節(jié)點發(fā)送SQL語句。第二種方式可以稱為弱一致性策略,即可以允許所有匹配的目標數(shù)據(jù)庫節(jié)點中的部分數(shù)據(jù)庫節(jié)點處于離線狀態(tài)時,可以向處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點發(fā)送SQL語句。其中,所有的數(shù)據(jù)庫節(jié)點均存儲在數(shù)據(jù)存儲服務(wù)器中。
[0034]S203、在匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行解析后的SQL語句。
[0035]具體的,上述步驟通過預(yù)設(shè)的匹配規(guī)則匹配出與客戶端對應(yīng)的目標數(shù)據(jù)庫節(jié)點,由于每一個數(shù)據(jù)庫節(jié)點中均存在若干個數(shù)據(jù)庫,因此需要通過預(yù)設(shè)的路由規(guī)則從每個數(shù)據(jù)庫節(jié)點(即與客戶端匹配且處于在線狀態(tài)的目標數(shù)據(jù)庫節(jié)點)中找到與客戶端對應(yīng)的具體數(shù)據(jù)庫(即具體訪問的數(shù)據(jù)庫)。預(yù)設(shè)的路由規(guī)則可以有多種,比如,可以按照數(shù)據(jù)庫的負載來進行路由,即根據(jù)數(shù)據(jù)庫存儲的數(shù)據(jù)量來分配,將SQL語句分配給數(shù)據(jù)庫量小的數(shù)據(jù)庫;也可以按照數(shù)據(jù)庫的訪問量來進行路由,將SQL語句分配給訪問量小的數(shù)據(jù)庫。
[0036]在通過預(yù)設(shè)的路由規(guī)則在每個數(shù)據(jù)庫節(jié)點中找到具體的數(shù)據(jù)庫后,參見圖5,判斷需要發(fā)送的SQL語句是否為事務(wù)語句,如果該SQL語句為事務(wù)語句,則將對應(yīng)的數(shù)據(jù)庫節(jié)點的當前連接標記為事務(wù)連接,以便下一次SQL語句也為事務(wù)語句時,可以采用同一條數(shù)據(jù)庫連接進行數(shù)據(jù)庫的訪問。將數(shù)據(jù)庫連接進行事務(wù)連接標記后,數(shù)據(jù)庫代理服務(wù)器向匹配的數(shù)據(jù)庫節(jié)點發(fā)送SQL語句,數(shù)據(jù)庫節(jié)點接收到SQL語句后,將該SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)的數(shù)據(jù)庫,對應(yīng)的數(shù)據(jù)庫接收到SQL語句,在數(shù)據(jù)庫當前的連接上執(zhí)行SQL語句。當事務(wù)SQL語句在對應(yīng)的數(shù)據(jù)庫當前連接上執(zhí)行完畢后,將數(shù)據(jù)庫的當前連接進行回收至數(shù)據(jù)庫連接池,提高復(fù)用率。
[0037]參見圖6,若判斷獲知需要發(fā)送的SQL語句為非事務(wù)語句時,不對對應(yīng)的數(shù)據(jù)庫當前的連接進行標記,直接將SQL語句發(fā)送匹配的數(shù)據(jù)庫節(jié)點,數(shù)據(jù)庫節(jié)點接收到SQL語句后,將該SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)的數(shù)據(jù)庫,對應(yīng)的數(shù)據(jù)庫在當前連接上執(zhí)行SQL語句。
[0038]需要說明的是,在數(shù)據(jù)庫代理服務(wù)器將客戶端發(fā)送的SQL語句發(fā)送給對應(yīng)的數(shù)據(jù)庫節(jié)點前,還會進行客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證,只有客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證通過時,才能對數(shù)據(jù)庫進行訪問,即只有客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證通過時,數(shù)據(jù)庫代理服務(wù)器才會將客戶端發(fā)送的SQL語句傳輸給匹配的數(shù)據(jù)庫節(jié)點,然后數(shù)據(jù)庫節(jié)點將SQL語句轉(zhuǎn)發(fā)給該數(shù)據(jù)庫節(jié)點中對應(yīng)的數(shù)據(jù)庫。
[0039]當步驟S202通過預(yù)設(shè)的匹配規(guī)則匹配出的目標數(shù)據(jù)庫節(jié)點只有一個且這個目標數(shù)據(jù)庫節(jié)點處于在線狀態(tài)時,然后再通過預(yù)設(shè)的路由規(guī)則在該數(shù)據(jù)庫節(jié)點下找到對應(yīng)的數(shù)據(jù)庫(即執(zhí)行SQL語句的數(shù)據(jù)庫)。數(shù)據(jù)庫代理服務(wù)器將解析后的SQL語句發(fā)送給匹配的數(shù)據(jù)庫節(jié)點,該數(shù)據(jù)庫節(jié)點將該SQL語句轉(zhuǎn)發(fā)給該數(shù)據(jù)庫節(jié)點下對應(yīng)的數(shù)據(jù)庫,并在該數(shù)據(jù)庫的當前數(shù)據(jù)庫連接上執(zhí)行SQL語句。當該SQL語句為事務(wù)語句時,SQL執(zhí)行完畢后,將執(zhí)行該SQL語句的數(shù)據(jù)庫連接回收至數(shù)據(jù)庫連接池中。
[0040]當步驟S202通過預(yù)設(shè)的匹配規(guī)則匹配出的目標數(shù)據(jù)庫節(jié)點有多個且這多個目標數(shù)據(jù)庫節(jié)點均處于在線狀態(tài)時,數(shù)據(jù)庫代理服務(wù)器將解析后的SQL語句按照一定的規(guī)則發(fā)送給每一個匹配的數(shù)據(jù)庫節(jié)點,每一個數(shù)據(jù)庫節(jié)點將接收到的SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)數(shù)據(jù)庫,并在該對應(yīng)的數(shù)據(jù)庫的當前連接上執(zhí)行SQL語句;若匹配出的多個數(shù)據(jù)庫節(jié)點只有部分數(shù)據(jù)庫節(jié)點處于在線狀態(tài)時,數(shù)據(jù)庫代理服務(wù)器將需要發(fā)送的SQL語句按照一定的規(guī)則發(fā)送給處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點,每一個數(shù)據(jù)庫節(jié)點將接收到的SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)數(shù)據(jù)庫,并在該對應(yīng)的數(shù)據(jù)庫的當前連接上執(zhí)行SQL語句。當執(zhí)行的SQL語句為事務(wù)語句時,SQL執(zhí)行完畢后,將執(zhí)行該SQL語句的數(shù)據(jù)庫連接回收至數(shù)據(jù)庫連接池中。
[0041]S204、合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
[0042]具體的,當目標數(shù)據(jù)庫節(jié)點只有一個時,數(shù)據(jù)庫節(jié)點直接將SQL語句的執(zhí)行結(jié)果返回給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器將執(zhí)行結(jié)果反饋給客戶度;當目標數(shù)據(jù)庫節(jié)點為多個時,多個目標數(shù)據(jù)庫節(jié)點將各自的SQL語句的執(zhí)行結(jié)果返回給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器接收到多個目標數(shù)據(jù)庫節(jié)點發(fā)送的執(zhí)行結(jié)果,對多個執(zhí)行結(jié)果進行合并封裝,并將合并封裝后的執(zhí)行結(jié)果反饋給客戶端。
[0043]另外,當各個數(shù)據(jù)庫節(jié)點中數(shù)據(jù)庫中的數(shù)據(jù)出現(xiàn)異常時,各個數(shù)據(jù)庫節(jié)點會將數(shù)據(jù)異常告警信息發(fā)送給上級數(shù)據(jù)庫管理中心,上級數(shù)據(jù)庫中心可以及時了解各個數(shù)據(jù)庫節(jié)點中數(shù)據(jù)庫的數(shù)據(jù)異常情況。
[0044]以上對本發(fā)明提供的方法進行了詳細的介紹,為了更好的理解本發(fā)明提供的方法,下面結(jié)合圖7對本發(fā)明提供的方法的整個流程圖進行說明。
[0045]圖7中,首先,若客戶端希望訪問數(shù)據(jù)庫,客戶端應(yīng)用程序向數(shù)據(jù)庫代理服務(wù)器發(fā)送數(shù)據(jù)庫訪問請求消息,數(shù)據(jù)庫代理服務(wù)器接收到客戶端應(yīng)用程序發(fā)送的數(shù)據(jù)庫訪問請求消息后,根據(jù)數(shù)據(jù)庫協(xié)議標準從數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句;解析待執(zhí)行的SQL語句,得到可執(zhí)行的SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與解析后的SQL語句對應(yīng)的目標數(shù)據(jù)庫節(jié)點;當匹配出的目標數(shù)據(jù)庫節(jié)點只有一個且當前處于在線狀態(tài)時,數(shù)據(jù)庫代理服務(wù)器將解析出的SQL語句發(fā)送給該目標數(shù)據(jù)庫節(jié)點,然后該數(shù)據(jù)庫節(jié)點將該SQL語句轉(zhuǎn)發(fā)給根據(jù)預(yù)設(shè)的路由規(guī)則在該數(shù)據(jù)庫節(jié)點下找到的數(shù)據(jù)庫,數(shù)據(jù)庫接收到SQL語句后,在數(shù)據(jù)庫當前的連接上執(zhí)行該SQL語句,該數(shù)據(jù)庫將執(zhí)行結(jié)果發(fā)送給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器將該執(zhí)行結(jié)果反饋給客戶端,若該SQL語句為事務(wù)語句,執(zhí)行完該SQL語句,將執(zhí)行該SQL語句的數(shù)據(jù)庫連接回收至數(shù)據(jù)庫連接池;當匹配出的目標數(shù)據(jù)庫節(jié)點為多個時,則按照一定的規(guī)則將解析后的SQL語句分配發(fā)送給這多個數(shù)據(jù)庫節(jié)點中處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點,這些處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點將接收到的SQL語句轉(zhuǎn)發(fā)給根據(jù)預(yù)設(shè)的路由規(guī)則找到的該數(shù)據(jù)庫節(jié)點下的具體對應(yīng)的數(shù)據(jù)庫,數(shù)據(jù)庫接收到SQL語句后,在該數(shù)據(jù)庫的當前連接上執(zhí)行該SQL語句,多個數(shù)據(jù)庫節(jié)點將SQL語句的執(zhí)行結(jié)果返回給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器將接收到的多個執(zhí)行結(jié)果合并處理,并將合并后的執(zhí)行結(jié)果反饋給客戶端,若執(zhí)行的SQL語句為事務(wù)語句,執(zhí)行完該SQL語句,將執(zhí)行該SQL語句的數(shù)據(jù)庫連接回收至數(shù)據(jù)庫連接池。
[0046]實施例二、一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問系統(tǒng)。下面結(jié)合圖8對本發(fā)明提供的系統(tǒng)進行詳細說明。
[0047]圖8中,本發(fā)明提供的系統(tǒng)包括請求消息接收單元801、節(jié)點匹配單元802、心跳檢測單元803、判斷單元804、權(quán)限驗證單元805、執(zhí)行單元806、連接回收單元807和執(zhí)行結(jié)果合并單元808。
[0048]其中,請求消息接收單元801主要用于接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從該數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句。
[0049]具體的,本實施例的數(shù)據(jù)庫是基于多級分布式數(shù)據(jù)庫且是基于MySQL數(shù)據(jù)庫,即每一級數(shù)據(jù)庫管理中心均存在多個數(shù)據(jù)庫節(jié)點,并且每一級數(shù)據(jù)庫均存在子節(jié)點數(shù)據(jù)庫。若用戶客戶端(也可以稱為客戶端應(yīng)用程序)希望訪問數(shù)據(jù)庫,客戶端的應(yīng)用程序向數(shù)據(jù)庫代理服務(wù)器發(fā)送數(shù)據(jù)庫訪問請求消息,設(shè)置于數(shù)據(jù)庫代理服務(wù)器中的請求消息接收單元801接收到客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,根據(jù)MySQL數(shù)據(jù)庫協(xié)議標準從數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句。另外,客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息中還攜帶有客戶端的標識信息,以便后續(xù)可以根據(jù)客戶端的標識信息找到與該客戶端匹配的數(shù)據(jù)庫節(jié)點。
[0050]節(jié)點匹配單元802主要用于解析請求消息接收單元801提取出的待執(zhí)行SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點。
[0051]心跳檢測單元803主要用于對節(jié)點匹配單元802匹配出的所有目標數(shù)據(jù)庫節(jié)點進行心跳檢測。
[0052]具體的,節(jié)點匹配單元802對提取出的SQL語句進行解析,解析出的SQL語句能夠直接在數(shù)據(jù)庫上執(zhí)行。解析SQL語句后,節(jié)點匹配單元802根據(jù)預(yù)設(shè)的匹配規(guī)則匹配找到與該客戶端(也可以說又客戶端而來的SQL語句)對應(yīng)的數(shù)據(jù)庫節(jié)點(以下稱為目標數(shù)據(jù)庫節(jié)點),比如,根據(jù)客戶端標識與目標數(shù)據(jù)庫節(jié)點標識的對應(yīng)關(guān)系匹配出客戶端對應(yīng)的目標數(shù)據(jù)庫節(jié)點,該目標數(shù)據(jù)庫節(jié)點可能有一個也可能有多個,客戶端對應(yīng)的目標數(shù)據(jù)庫節(jié)點的個數(shù)由預(yù)設(shè)的匹配規(guī)則決定。
[0053]當節(jié)點匹配單元802匹配出客戶端對應(yīng)的目標數(shù)據(jù)庫節(jié)點后,心跳檢測單元803對匹配出的所有目標數(shù)據(jù)庫節(jié)點進行心跳檢測,即檢測這些目標數(shù)據(jù)庫節(jié)點是否處于在線狀態(tài)。心跳檢測單元803會定時向所有的數(shù)據(jù)庫節(jié)點握手,檢測它們的連接狀態(tài),當匹配出的目標數(shù)據(jù)庫節(jié)點處于離線狀態(tài)時,就不將SQL語句發(fā)送給處于離線狀態(tài)的數(shù)據(jù)庫節(jié)點,只將SQL發(fā)送給處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點。
[0054]判斷單元804主要用于判斷解析后的SQL語句是否為事務(wù)語句;在解析后的SQL語句為事務(wù)語句的情況下,對數(shù)據(jù)庫當前連接進行事務(wù)標記。
[0055]權(quán)限驗證單元805主要用于對客戶端的數(shù)據(jù)庫訪問權(quán)限進行驗證;當客戶端的數(shù)據(jù)庫訪問權(quán)限驗證通過時,在節(jié)點匹配單元802匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行解析后的SQL語句。
[0056]執(zhí)行單元806主要用于在匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行解析后的SQL語句。
[0057]連接回收單元807主要用于當解析后的SQL語句為事務(wù)語句且在相應(yīng)的數(shù)據(jù)庫當前連接上執(zhí)行后時,將據(jù)庫當前連接回收至數(shù)據(jù)庫連接池。
[0058]具體的,節(jié)點匹配單元802通過預(yù)設(shè)的匹配規(guī)則匹配出與客戶端(SQL語句)對應(yīng)的目標數(shù)據(jù)庫節(jié)點,由于每一個數(shù)據(jù)庫節(jié)點中均存在若干個數(shù)據(jù)庫,因此需要通過預(yù)設(shè)的路由規(guī)則從每個數(shù)據(jù)庫節(jié)點(即與客戶端匹配且處于在線狀態(tài)的目標數(shù)據(jù)庫節(jié)點)中找到與客戶端對應(yīng)的具體數(shù)據(jù)庫。另外,節(jié)點匹配單元802匹配出的目標數(shù)據(jù)庫節(jié)點可能為一個也可能為多個。
[0059]在通過預(yù)設(shè)的路由規(guī)則在每個數(shù)據(jù)庫節(jié)點中找到具體的數(shù)據(jù)庫后,判斷單元804判斷客戶端發(fā)送的SQL語句是否為事務(wù)語句,如果該SQL語句為事務(wù)語句,則將對應(yīng)的數(shù)據(jù)庫節(jié)點的當前連接標記為事務(wù)連接,以便下一次SQL語句也為事務(wù)語句時,可以采用同一條數(shù)據(jù)庫連接進行數(shù)據(jù)庫的訪問。將數(shù)據(jù)庫連接進行事務(wù)連接標記后,數(shù)據(jù)庫代理服務(wù)器向匹配的數(shù)據(jù)庫節(jié)點發(fā)送SQL語句,數(shù)據(jù)庫節(jié)點接收到SQL語句后,將該SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)的數(shù)據(jù)庫,對應(yīng)的數(shù)據(jù)庫接收到SQL語句,設(shè)置于數(shù)據(jù)庫中的執(zhí)行單元806在數(shù)據(jù)庫當前的連接上執(zhí)行SQL語句。當事務(wù)SQL語句在對應(yīng)的數(shù)據(jù)庫當前連接上執(zhí)行完畢后,連接回收單元807將數(shù)據(jù)庫的當前連接進行回收至數(shù)據(jù)庫連接池,提高連接的復(fù)用率。
[0060]若判斷單元804判斷獲知需要發(fā)送的SQL語句為非事務(wù)語句時,不對對應(yīng)的數(shù)據(jù)庫當前的連接進行標記,直接將SQL語句發(fā)送匹配的數(shù)據(jù)庫節(jié)點,數(shù)據(jù)庫節(jié)點接收到SQL語句后,將該SQL語句轉(zhuǎn)發(fā)給通過預(yù)設(shè)的路由規(guī)則找到的對應(yīng)的數(shù)據(jù)庫,執(zhí)行單元806在對應(yīng)的數(shù)據(jù)庫在當前連接上執(zhí)行SQL語句。
[0061]需要說明的是,在數(shù)據(jù)庫代理服務(wù)器將客戶端發(fā)送的SQL語句發(fā)送給對應(yīng)的數(shù)據(jù)庫節(jié)點前,權(quán)限驗證單元805還會進行客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證,只有客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證通過時,才能對數(shù)據(jù)庫進行訪問,即只有客戶端對數(shù)據(jù)庫訪問的權(quán)限驗證通過時,數(shù)據(jù)庫代理服務(wù)器才會將客戶端發(fā)送的SQL語句傳輸給匹配的數(shù)據(jù)庫節(jié)點,然后數(shù)據(jù)庫節(jié)點將SQL語句轉(zhuǎn)發(fā)給該數(shù)據(jù)庫節(jié)點中對應(yīng)的數(shù)據(jù)庫。
[0062]執(zhí)行結(jié)果合并單元808主要用于合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
[0063]具體的,當目標數(shù)據(jù)庫節(jié)點只有一個時,數(shù)據(jù)庫節(jié)點直接將SQL語句的執(zhí)行結(jié)果返回給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器將執(zhí)行結(jié)果反饋給客戶度;當目標數(shù)據(jù)庫節(jié)點為多個時,多個目標數(shù)據(jù)庫節(jié)點將各自的SQL語句的執(zhí)行結(jié)果返回給數(shù)據(jù)庫代理服務(wù)器,數(shù)據(jù)庫代理服務(wù)器接收到多個目標數(shù)據(jù)庫節(jié)點發(fā)送的執(zhí)行結(jié)果,設(shè)置于其中的執(zhí)行結(jié)果合并單元808對多個執(zhí)行結(jié)果進行合并封裝,并將合并封裝的結(jié)果反饋給客戶端。
[0064]本發(fā)明提供的一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法及系統(tǒng),通過將從客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息中解析出來的SQL語句發(fā)送給多個數(shù)據(jù)庫節(jié)點,在多個數(shù)據(jù)庫節(jié)點上執(zhí)行SQL語句,并將多個數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果合并封裝,將合并封裝后的執(zhí)行結(jié)果反饋給客戶端。通過并行計算的方式檢索查詢數(shù)據(jù),上級管理中心可以將客戶端需要訪問的SQL語句發(fā)送到各數(shù)據(jù)庫節(jié)點,各數(shù)據(jù)庫節(jié)點根據(jù)SQL語句進行檢索處理,加快了數(shù)據(jù)查詢的速度;在多個數(shù)據(jù)庫節(jié)點上按照條件查詢數(shù)據(jù),相比現(xiàn)有的集中式數(shù)據(jù)庫在一個數(shù)據(jù)庫中查詢數(shù)據(jù),提高了數(shù)據(jù)查詢的實時性。
[0065]另外,在上級數(shù)據(jù)庫管理中心中設(shè)置多個下級數(shù)據(jù)庫管理中心,解決了上級數(shù)據(jù)庫管理中心的負載和存儲空間的問題。
[0066]對于數(shù)據(jù)庫中異常數(shù)據(jù)的檢測,上級數(shù)據(jù)庫管理中心可以定時掃描下級數(shù)據(jù)庫節(jié)點的告警數(shù)據(jù),將告警數(shù)據(jù)同步到上級數(shù)據(jù)庫管理中心,上級數(shù)據(jù)庫管理中心可以及時了解下級數(shù)據(jù)庫節(jié)點中數(shù)據(jù)庫的數(shù)據(jù)異常情況,以便及時采取相應(yīng)的措施。
[0067]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問方法,其特征在于,包括: 步驟S201、接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從所述數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句; 步驟S202、解析所述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與所述解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點; 步驟S203、在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句; 步驟S204、合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
2.如權(quán)利要求1所述的數(shù)據(jù)訪問方法,其特征在于,執(zhí)行所述步驟S203之前還包括: 判斷所述解析后的SQL語句是否為事務(wù)語句; 在所述解析后的SQL語句為事務(wù)語句的情況下,對數(shù)據(jù)庫當前連接進行事務(wù)標記。
3.如權(quán)利要求1所述的數(shù)據(jù)訪問方法,其特征在于,執(zhí)行所述步驟S203之前還包括: 對所述匹配出的所有目標數(shù)據(jù)庫節(jié)點進行心跳檢測; 所述步驟S203包括: 將所述解析后的SQL語句傳輸給所述匹配出的目標數(shù)據(jù)庫節(jié)點中處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點,并根據(jù)預(yù)設(shè)的路由規(guī)則從所述處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點中匹配出與所述解析后的SQL語句對應(yīng)的數(shù)據(jù)庫,在該數(shù)據(jù)庫的當前連接上執(zhí)行所述解析后的SQL語句。
4.如權(quán)利要求1所述的數(shù)據(jù)訪問方法,其特征在于,執(zhí)行步驟S203之前還包括: 對客戶端的數(shù)據(jù)庫訪問權(quán)限進行驗證; 當客戶端的數(shù)據(jù)庫訪問權(quán)限驗證通過時,在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句。
5.如權(quán)利要求1所述的數(shù)據(jù)訪問方法,其特征在于,執(zhí)行所述步驟S203之后還包括: 所述解析后的SQL語句為事務(wù)語句且在相應(yīng)的數(shù)據(jù)庫當前連接上執(zhí)行后,將所述數(shù)據(jù)庫當前連接回收至數(shù)據(jù)庫連接池。
6.一種基于數(shù)據(jù)庫節(jié)點的數(shù)據(jù)訪問系統(tǒng),其特征在于,包括: 請求消息接收單元,用于接收客戶端發(fā)送的數(shù)據(jù)庫訪問請求消息,并從所述數(shù)據(jù)庫訪問請求消息中提取出待執(zhí)行的SQL語句; 節(jié)點匹配單元,用于解析所述SQL語句,并根據(jù)預(yù)設(shè)的匹配規(guī)則匹配出與所述解析后的SQL語句匹配的至少一個目標數(shù)據(jù)庫節(jié)點; 執(zhí)行單元,用于在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句; 執(zhí)行結(jié)果合并單元,用于合并多個目標數(shù)據(jù)庫節(jié)點返回的執(zhí)行結(jié)果,并將合并后的執(zhí)行結(jié)果反饋給客戶端。
7.如權(quán)利要求6所述的數(shù)據(jù)訪問系統(tǒng),其特征在于,還包括: 判斷單元,用于判斷所述解析后的SQL語句是否為事務(wù)語句; 在所述解析后的SQL語句為事務(wù)語句的情況下,對數(shù)據(jù)庫當前連接進行事務(wù)標記。
8.如權(quán)利要求6所述的數(shù)據(jù)訪問系統(tǒng),其特征在于,還包括: 心跳檢測單元,用于對所述匹配出的所有目標數(shù)據(jù)庫節(jié)點進行心跳檢測; 所述執(zhí)行單元用于在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句具體包括: 將所述解析后的SQL語句傳輸給所述匹配出的目標數(shù)據(jù)庫節(jié)點中處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點,并根據(jù)預(yù)設(shè)的路由規(guī)則從所述處于在線狀態(tài)的數(shù)據(jù)庫節(jié)點中匹配出與所述解析后的SQL語句對應(yīng)的數(shù)據(jù)庫,在該數(shù)據(jù)庫的當前連接上執(zhí)行所述解析后的SQL語句。
9.如權(quán)利要求6所述的數(shù)據(jù)訪問系統(tǒng),其特征在于,還包括: 權(quán)限驗證單元,用于對客戶端的數(shù)據(jù)庫訪問權(quán)限進行驗證; 當客戶端的數(shù)據(jù)庫訪問權(quán)限驗證通過時,在所述匹配出的目標數(shù)據(jù)庫節(jié)點上執(zhí)行所述解析后的SQL語句。
10.如權(quán)利要求6所述的數(shù)據(jù)訪問系統(tǒng),其特征在于,還包括: 連接回收單元,用于當所述解析后的SQL語句為事務(wù)語句且在相應(yīng)的數(shù)據(jù)庫當前連接上執(zhí)行后時,將所述數(shù)據(jù)庫當前連接回收至數(shù)據(jù)庫連接池。
【文檔編號】G06F17/30GK104331457SQ201410602245
【公開日】2015年2月4日 申請日期:2014年10月31日 優(yōu)先權(quán)日:2014年10月31日
【發(fā)明者】王虎 申請人:北京思特奇信息技術(shù)股份有限公司