一種分布式數(shù)據(jù)庫處理的方法和設(shè)備的制造方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及存儲
技術(shù)領(lǐng)域:
,尤其涉及一種分布式數(shù)據(jù)庫處理的方法和設(shè)備?!?br>背景技術(shù):
】[0002]隨著應(yīng)用系統(tǒng)的用戶數(shù)量的急劇增加,互聯(lián)網(wǎng)的發(fā)展以及IT建設(shè)的集中化,集中式數(shù)據(jù)庫系統(tǒng)越來越不能滿足大數(shù)據(jù)量儲存與大量并發(fā)訪問的發(fā)展需要,分布式數(shù)據(jù)系統(tǒng)正在蓬勃發(fā)展。尤其是當前計算機行業(yè)正在興起去Ι0Ε運動,使得數(shù)據(jù)庫設(shè)備更多地安裝在X86主機上,不使用磁陣設(shè)備,并更多地選擇開源數(shù)據(jù)庫(例如MySQL),這就使得數(shù)據(jù)變得更為分散,對數(shù)據(jù)處理的性能要變得更為突出。在分布式數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)是需要按分區(qū)規(guī)則存放的。[0003]在數(shù)據(jù)查詢或更新時,如果能根據(jù)查詢條件直接定位到數(shù)據(jù)所在分布式數(shù)據(jù)庫,并向該數(shù)據(jù)庫發(fā)起SQL,將能獲取最快的響應(yīng)性能;否則當無法確定數(shù)據(jù)所在分布式數(shù)據(jù)庫時,需要對系統(tǒng)中每個分布式數(shù)據(jù)庫發(fā)起SQL處理,方能獲得正確結(jié)果,當系統(tǒng)中分布式數(shù)據(jù)庫數(shù)量很多時,這種處理既消耗性能,又增加響應(yīng)時延,從而導(dǎo)致用戶滿意度的下降。[0004]具體的,現(xiàn)有技術(shù)中,當數(shù)據(jù)表需要存放到多個分布式數(shù)據(jù)庫中時,需要遵循某種規(guī)則,這種規(guī)則就叫做分區(qū)規(guī)則,否則將導(dǎo)致數(shù)據(jù)無法管理。當前業(yè)界通常的做法是,按數(shù)據(jù)表的某個(些)字段(下文中稱為分區(qū)字段)做函數(shù)運算(例如Hash),再對運算結(jié)果對數(shù)據(jù)庫的個數(shù)取模,不同模值的記錄使用不同分布式數(shù)據(jù)庫存放。如圖1所示,對待存儲的數(shù)據(jù)表的coll字段做Hash運算,然后將Hash值對數(shù)據(jù)庫個數(shù)m取模,不同模值的記錄存放在對應(yīng)序號的分布式數(shù)據(jù)庫中。當然,還有其它數(shù)據(jù)分區(qū)規(guī)則,例如對字段的函數(shù)運算結(jié)果值域,甚至字段本身的值域做區(qū)間劃分,不同區(qū)間的數(shù)據(jù)使用不同的分庫存放。上述根據(jù)分區(qū)規(guī)則將數(shù)據(jù)表中的數(shù)據(jù)記錄存放到多個分布式數(shù)據(jù)庫中的過程中,用于分區(qū)的字段稱為分區(qū)字段,例如coll字段。[0005]因為數(shù)據(jù)是按某個(些)分區(qū)字段(如上述的coll字段)的函數(shù)計算結(jié)果進行分布存放的,因此在用戶查詢數(shù)據(jù)或更新數(shù)據(jù)時,如果SQL語句的查詢條件中含有這些分區(qū)字段,便可以根據(jù)分區(qū)字段值做同樣的函數(shù)運算,從而通過計算結(jié)果可以確定數(shù)據(jù)所在分布式數(shù)據(jù)庫,從而將SQL發(fā)往該分布式數(shù)據(jù)庫進行處理便可獲得所需結(jié)果。[0006]例如用戶SQL:selectnamefromtablelwherecoll='abc',應(yīng)用程序便可以根據(jù)SQL語句的查詢索引字段coll的值'abc'做Hash運算,再根據(jù)運算結(jié)果與分區(qū)規(guī)則共同確定SQL處理數(shù)據(jù)庫,再將SQL發(fā)往對應(yīng)分布式數(shù)據(jù)庫去處理。[0007]為獲取快速處理性能,通常會要求用戶在SQL的語句的查詢條件中帶上分區(qū)字段,否則系統(tǒng)需要將SQL語句發(fā)往每個分布式數(shù)據(jù)庫處理,這樣做雖然能夠獲得期望的結(jié)果,但響應(yīng)時延和性能消耗顯然不是最好的。然而現(xiàn)實中的很多場景,無法讓用戶在SQL語句的查詢條件中帶上分區(qū)字段,從而數(shù)據(jù)的訪問時延很長?!?br/>發(fā)明內(nèi)容】[0008]本發(fā)明提供了一種分布式數(shù)據(jù)庫存儲和訪問的方法和設(shè)備,以解決用戶使用非分區(qū)字段訪問數(shù)據(jù)庫時,需要將訪問請求發(fā)往所有數(shù)據(jù)庫進行處理的技術(shù)問題。[0009]為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:[0010]第一方面,提供一種分布式數(shù)據(jù)庫的處理方法,包括:數(shù)據(jù)庫處理設(shè)備接收第一訪問請求,該第一訪問請求包括第一查詢索引字段及其取值和待訪問的第一目標字段;其中,所述第一查詢索引字段為第一數(shù)據(jù)表的非分區(qū)信息;為了避免按照現(xiàn)有技術(shù)將該第一訪問請求發(fā)送到所有分布式數(shù)據(jù)庫處理,數(shù)據(jù)庫處理設(shè)備需要根據(jù)所述第一查詢索引字段及其取值,在所述第一數(shù)據(jù)表的分區(qū)路由表中獲取與該第一查詢索引字段對應(yīng)的分區(qū)信息及取值(例如,數(shù)據(jù)庫處理設(shè)備可以向保存有所述第一數(shù)據(jù)表的分區(qū)路由表的數(shù)據(jù)庫發(fā)送查詢請求,并從保存有所述第一數(shù)據(jù)表的分區(qū)路由表的數(shù)據(jù)庫接收查詢結(jié)果,從而獲取與該第一查詢索引字段對應(yīng)的分區(qū)信息及取值),其中所述分區(qū)路由表中存儲有所述第一數(shù)據(jù)表的分區(qū)信息及取值和非分區(qū)信息及取值的對應(yīng)關(guān)系;根據(jù)所述第一查詢索引字段及其取值對應(yīng)的分區(qū)信息及取值,將所述第一訪問請求發(fā)送到與該分區(qū)信息取值對應(yīng)的數(shù)據(jù)庫。數(shù)據(jù)庫處理設(shè)備根據(jù)分區(qū)信息以及分區(qū)規(guī)則將第一數(shù)據(jù)表進行拆分并存儲在多個數(shù)據(jù)庫中。具體的,所述分區(qū)信息包括分區(qū)字段或者分區(qū)攜帶字段,其中所述分區(qū)攜帶字段與所述分區(qū)字段存在映射關(guān)系。分區(qū)攜帶字段可以是分區(qū)字段根據(jù)預(yù)設(shè)的變換規(guī)則生成,例如,分區(qū)攜帶字段可以由字符串前綴和字符串后綴構(gòu)成,其中字符串前綴為分區(qū)字段,字符串后綴為順序數(shù)。顯然,由于所述分區(qū)攜帶字段與所述分區(qū)字段存在映射關(guān)系,所以根據(jù)分區(qū)攜帶字段和分區(qū)規(guī)則,也能夠確定需要將訪問語句發(fā)送的數(shù)據(jù)庫。本申請實施例提供的方案,當?shù)谝辉L問請求中的查詢索引字段不是分區(qū)信息時,可以根據(jù)第一數(shù)據(jù)表對應(yīng)的分區(qū)路由表確定查詢索引字段的取值對應(yīng)的分區(qū)信息的取值,然后根據(jù)分區(qū)信息的取值,將第一訪問請求發(fā)送到對應(yīng)的數(shù)據(jù)庫處理。避免了按照現(xiàn)有技術(shù),需要將第一訪問請求發(fā)送到所有數(shù)據(jù)庫處理的問題,有效的減小了訪問響應(yīng)的延時,也減小了系統(tǒng)性能消耗。[0011]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述在所述第一數(shù)據(jù)表的分區(qū)路由表中查找與該第一查詢索引字段對應(yīng)的分區(qū)信息及取值,具體可以為:獲取所述第一數(shù)據(jù)表關(guān)聯(lián)的分區(qū)路由表;根據(jù)所述第一查詢索引字段,在所述第一數(shù)據(jù)表關(guān)聯(lián)的分區(qū)路由表中,確定與所述第一查詢索引字段關(guān)聯(lián)的分區(qū)路由表;在所述第一查詢索引字段關(guān)聯(lián)的分區(qū)路由表中查找與該第一查詢索引字段對應(yīng)的分區(qū)信息及取值。當該第一數(shù)據(jù)表存在多個分區(qū)路由表時,不需要查詢所有的分區(qū)路由表,直接查詢與所述第一查詢索引字段關(guān)聯(lián)的分區(qū)路由表即可,從而加快了查詢與所述第一查詢索引字段及其取值對應(yīng)的分區(qū)信息及其取值的速度,進而進一步減小了訪問響應(yīng)的延時。[0012]結(jié)合第一方面和第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,根據(jù)所述第一查詢索引字段及其取值對應(yīng)的分區(qū)信息及取值,將所述第一訪問請求發(fā)送到與該分區(qū)信息取值對應(yīng)的數(shù)據(jù)庫,具體為:根據(jù)所述第一查詢索引字段及其取值對應(yīng)的分區(qū)信息及取值,更新所述第一訪問請求,所述更新后的第一訪問請求包括該分區(qū)信息及取值和所述待訪問的第一目標字段;將所述更新后的第一訪問請求發(fā)送到與該分區(qū)信息取值對應(yīng)的數(shù)據(jù)庫。更新所述第一訪問請求后,可以使得數(shù)據(jù)庫處理設(shè)備的現(xiàn)有處理邏輯不需要修改,直接按照現(xiàn)有的處理邏輯處理更新后的第一訪問請求即可。[0013]結(jié)合第一方面和第一方面的第一至第二種可能的實現(xiàn)方式,在第一方面的第三種可能的實現(xiàn)方式中,在所述接收第一訪問請求之前,該方法還包括:接收插入請求,所述插入請求包括待插入數(shù)據(jù),所述待插入數(shù)據(jù)包括所述分區(qū)信息的取值、所述第一查詢索引字段的取值和所述待訪問的第一目標字段的取值;根據(jù)所述分區(qū)信息的取值,將所述待插入數(shù)據(jù)插入所述數(shù)據(jù)庫的分區(qū)表中;確定存在所述第一查詢索引字段關(guān)聯(lián)的分區(qū)路由表;將所述第一查詢索引字段的取值和所述分區(qū)信息的取值插入到所述第一查詢索引字段關(guān)聯(lián)的分區(qū)路由表中。在插入分區(qū)表數(shù)據(jù)的時候,同步插入分區(qū)路由表數(shù)據(jù),可以使得分區(qū)路由表數(shù)據(jù)和分區(qū)表數(shù)據(jù)保持同步,以便于后續(xù)用戶通過非分區(qū)信息訪問數(shù)據(jù)表時,可以根據(jù)分區(qū)路由表獲取相應(yīng)的分區(qū)信息及其取值。[0014]結(jié)合第一方面和第一方面的第一至第三種可能的實現(xiàn)方式,在第一方面的第四種可能的實現(xiàn)方式中,該方法還包括:接收第二訪問請求,所述第二訪問請求包括第二查詢索引字段及其取值和待訪問的第二目標字段;其中,所述第二查詢索引字段是所述第二數(shù)據(jù)表的分區(qū)信息;根據(jù)所述第二查詢索引字段及其取值,將所述第二訪問請求發(fā)送到對應(yīng)的數(shù)據(jù)庫處理。當數(shù)據(jù)庫處理設(shè)備接收到的訪問請求中的查詢索引字段為分區(qū)信息時,則可以直接根據(jù)查詢索引字段及其取值,將訪問請求發(fā)送到對應(yīng)的數(shù)據(jù)庫處理。特別地,當所述第二查詢索引字段為分區(qū)攜帶字段時,按照現(xiàn)有技術(shù),該第二訪問請求將被發(fā)送到所有分布式數(shù)據(jù)庫處理。而采用本發(fā)明的提供的技術(shù)方案,將避免將該第二訪問請求將被發(fā)送到所有分布式數(shù)據(jù)庫處理,從而有效的減小了訪問響應(yīng)的延時,也減小了系統(tǒng)性能消耗。[0015]第二方面,本發(fā)明實施例提供了一種分布式數(shù)據(jù)庫處理設(shè)備,該數(shù)據(jù)庫處理設(shè)備具有實現(xiàn)上述第一方面中數(shù)據(jù)庫處理設(shè)備行為的功能。所述功能可以通過硬件實現(xiàn),也可以通過硬件執(zhí)行相應(yīng)的軟件實現(xiàn)。所述硬件或軟件包括一個或多個與上述功能相對應(yīng)的模塊。[0016]在一個可能的設(shè)計中,數(shù)據(jù)庫處理設(shè)備的結(jié)構(gòu)中包括處理器和存儲器,所述存儲器用于存儲支持數(shù)據(jù)庫處理設(shè)備執(zhí)行上述方法的程序,所述處理器被配置為用于執(zhí)行所述存儲器中存儲的程序。所述數(shù)據(jù)庫處理設(shè)備還可以包括通信接口,用于數(shù)據(jù)庫處理設(shè)備與其他設(shè)備或通信網(wǎng)絡(luò)通信。[0017]第三方面,本發(fā)明實施例提供了一種計算機存儲介質(zhì),用于儲存為上述數(shù)據(jù)庫處理設(shè)備所用的計算機軟件指令,其包含用于執(zhí)行上述方面為數(shù)據(jù)庫處理設(shè)備所設(shè)計的程序。[0018]可選的,上述方面所述的分區(qū)信息具體包括分區(qū)字段和/或分區(qū)攜帶字段。[0019]在具體實現(xiàn)中,數(shù)據(jù)庫處理設(shè)備可以為Application、DDS或者是Application與DDS合設(shè)的一個設(shè)備。[0020]相較于現(xiàn)有技術(shù),本發(fā)明提供的方案可以在用戶使用非分區(qū)字段訪問數(shù)據(jù)庫時,避免將訪問請求發(fā)送到所有分布式數(shù)據(jù)庫處理,有效的減小了客戶響應(yīng)時延,同時大大的減小了系統(tǒng)性能消耗。[0021]本發(fā)明的這些方面或其他方面在以下實施例的描述中會更加簡明易懂。【附圖說明】[0022]圖1為現(xiàn)有技術(shù)中一種分布式數(shù)據(jù)庫處理的示意圖;[0023]圖2為本發(fā)明一實施例提供的分布式數(shù)據(jù)庫系統(tǒng)的運行架構(gòu);[0024]圖3為本發(fā)明一實施例所提供的一種可能的分區(qū)攜帶字段的生成方法;[0025]圖4為本發(fā)明一實施例提供的分布式數(shù)據(jù)庫系統(tǒng)示意圖;[0026]圖5為本發(fā)明一實施例提供的計算機設(shè)備示意圖;[0027]圖6為本發(fā)明一實施例提供的一種分布式數(shù)據(jù)庫的處理方法的流程示意圖;[0028]圖7為本發(fā)明一實施例提供的另一種分布式數(shù)據(jù)庫處理方法的流程示意圖;[0029]圖8為本發(fā)明一實施例提供的另一種分布式數(shù)據(jù)庫處理方法的流程示意圖;[0030]圖9為本發(fā)明一實施例提供的另一種分布式數(shù)據(jù)庫處理方法的流程示意圖;[0031]圖10為本發(fā)明一實施例提供的另一種分布式數(shù)據(jù)庫處理方法的流程示意圖;[0032]圖11為本發(fā)明一實施例提供的數(shù)據(jù)庫處理設(shè)備的結(jié)構(gòu)示意圖?!揪唧w實施方式】[0033]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖對本發(fā)明具體實施例作進一步的詳細描述。[0034]圖2描述了本發(fā)明一實施例涉及的分布式數(shù)據(jù)庫系統(tǒng)的運行架構(gòu)。該分布式數(shù)據(jù)庫系統(tǒng)的運行架構(gòu)200包括應(yīng)用程序Application201、分布式數(shù)據(jù)服務(wù)中間件202(DistributedDataService,DDS)以及分布式數(shù)據(jù)庫203(如DB1、DB2、DB3等)。其中,App1ication201可以是任何需要訪問分布式數(shù)據(jù)庫的應(yīng)用程序,例如,電信行業(yè)的CRM(CustomerRelationshipManagement)系統(tǒng)、華為商城的商品訂購系統(tǒng)等。DDS202包括兩種運行形態(tài):獨立進程運行形態(tài)(作為獨立運行的一個裝置)和嵌入式運行形態(tài)(作為Application201的一個功能模塊),本發(fā)明對DDS的具體運行形態(tài)不做限定。Application201通過DDS202對DB1、DB2以及DB3等分布式數(shù)據(jù)庫進行透明操作。對于Application201而言,分布式數(shù)據(jù)庫DB1、DB2和DB3在邏輯上是一個統(tǒng)一的整體,在物理上則是分別存儲在不同的物理節(jié)點上。當DDS202接收到Application201發(fā)送過來的訪問請求后,需要確定將該訪問請求發(fā)送到哪個分布式數(shù)據(jù)庫(即DB1、DB2或者DB3)。在分布式數(shù)據(jù)庫系統(tǒng)的運行架構(gòu)202中,Application201以及使用Application的用戶都不必知道所使用的數(shù)據(jù)存儲在什么地方,簡化了Application的復(fù)雜性,即使存儲數(shù)據(jù)的位置改變了,Application201也不用改變。[0035]在本發(fā)明實施例中,用戶通過Application201生成的訪問請求訪問分布式數(shù)據(jù)庫203,該訪問請求可以是更新請求也可以是查詢請求,具體的,該訪問請求可以是結(jié)當前第1頁1 2 3 4 5 6