一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法及系統(tǒng)。所述方法包括將跨庫管理查詢sql差分成兩個sql,分別為sql1和sql2,兩個sql的查詢字段列表包含關(guān)聯(lián)字段,在sql1查詢結(jié)果返回預(yù)設(shè)行數(shù)時,將sql1查詢得到的關(guān)聯(lián)字段值與sql拼裝,說起來進行查詢,最后將查詢結(jié)果合并,并返回給客戶端。本發(fā)明將sql表水平拆分,實現(xiàn)數(shù)據(jù)分布在不同數(shù)據(jù)庫節(jié)點上的兩表間關(guān)聯(lián)查詢,提高了系統(tǒng)的易用性;其中sql2發(fā)送時機為sql1返回一定量數(shù)據(jù)行后執(zhí)行,有效避免sql1執(zhí)行完才執(zhí)行sql2造成占用內(nèi)存過多的問題,提升了執(zhí)行效率。
【專利說明】
一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及分布式數(shù)據(jù)庫及云計算領(lǐng)域,尤其涉及一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法及系統(tǒng)。
【背景技術(shù)】
[0002]在互聯(lián)網(wǎng)、電信等許多關(guān)鍵領(lǐng)域,隨著企業(yè)業(yè)務(wù)的不斷發(fā)展,企業(yè)的I/T環(huán)境也在不斷進行演變,單個數(shù)據(jù)庫已經(jīng)很難滿足海量數(shù)據(jù)庫存儲和高并發(fā)數(shù)據(jù)訪問,分布式數(shù)據(jù)庫的出現(xiàn)成為必然,分布式數(shù)據(jù)庫能夠有效的解決海量數(shù)據(jù)存儲和并發(fā)問題,通過數(shù)據(jù)的水平切合和數(shù)據(jù)表的垂直切分,有效的緩解了海量數(shù)據(jù)存儲,通過負(fù)載均衡、高可用、輪詢等緩解了高并發(fā)問題。但分布式數(shù)據(jù)庫表的水平拆分帶來了數(shù)據(jù)分布在不同數(shù)據(jù)庫后表之間跨庫關(guān)聯(lián)查詢的問題,雖然可以通過表冗余,表分組等方式來避免表之間跨庫的關(guān)聯(lián)查詢,但是仍有一些業(yè)務(wù)需要不能通過上述方式避免表之間的跨庫關(guān)聯(lián)查詢,需要進行表之間的跨庫關(guān)聯(lián)查詢。但分布式數(shù)據(jù)庫中間件沒有真正的支持跨庫的表之間的關(guān)聯(lián)查詢,兩個數(shù)據(jù)拆分在不同數(shù)據(jù)庫節(jié)點的表無法實現(xiàn)關(guān)聯(lián)查詢。
【發(fā)明內(nèi)容】
[0003]本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)的不足,提供一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法及系統(tǒng)。
[0004]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,包括如下步驟:
[0005]SI,接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql;
[0006]S2,按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sqll和sql2;
[0007]S3,將sqll發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值;
[0008]S4,當(dāng)監(jiān)聽到sql I執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單8912按照8911查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢;
[0009]S5,將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,返回S4,直至查詢結(jié)束。
[0010]為實現(xiàn)上述發(fā)明目的,本發(fā)明還提供了一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),包括:
[0011]接收模塊,用于接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql;
[0012]拆分模塊,用于按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sqll和sql2;
[0013]第一查詢模塊,用于將sqll發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值;
[0014]第二查詢模塊,用于當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單sql2按照sqll查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢;
[0015]返回模塊,用于將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,直至查詢結(jié)束。
[0016]本發(fā)明的有益效果是:本發(fā)明通過將跨庫管理查詢sql差分成兩個sql,分別為sqll和sql2,兩個sql的查詢字段列表包含關(guān)聯(lián)字段,在sqll查詢結(jié)果返回預(yù)設(shè)行數(shù)時,將sqll查詢得到的關(guān)聯(lián)字段值與sql拼裝,說起來進行查詢,最后將查詢結(jié)果合并,并返回給客戶端。本發(fā)明將sql表水平拆分,實現(xiàn)數(shù)據(jù)分布在不同數(shù)據(jù)庫節(jié)點上的兩表間關(guān)聯(lián)查詢,提高了系統(tǒng)的易用性;其中sql2發(fā)送時機為sqll返回一定量數(shù)據(jù)行(如1000條結(jié)果)后執(zhí)行,有效避免sqll執(zhí)行完才執(zhí)行sql2造成占用內(nèi)存過多的問題,提升了執(zhí)行效率。
【附圖說明】
[0017]圖1為本發(fā)明所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法流程圖;
[0018]圖2為本發(fā)明所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng)框圖;
[0019]圖3為本發(fā)明實施例中關(guān)聯(lián)查詢流程示意圖。
【具體實施方式】
[0020]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0021 ]如圖1所示,一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,包括如下步驟:
[0022]SI,接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql;
[0023]S2,按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sql I和sql2;
[0024]S3,將sqll發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值;
[0025]S4,當(dāng)監(jiān)聽到sql I執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單8912按照8911查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢;
[0026]S5,將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,返回S4,直至查詢結(jié)束。
[0027]具體地,S2的具體實現(xiàn)為:
[0028]S2.1,對關(guān)聯(lián)查詢sql進行join分析,得到查詢字段列表,其中查詢字段列表包含關(guān)聯(lián)字段;
[0029]S2.2,對關(guān)聯(lián)查詢sql進行分析獲得主表和子表,其中,關(guān)聯(lián)查詢sql中按順序先出現(xiàn)的表為主表,后出現(xiàn)的表為子表;
[0030]S2.3,用于對主表和子表進一步分析,分別獲得主表的查詢字段列表及過濾條件,以及子表的查詢字段列表及過濾條件,分別得到sqll和sql2。
[0031]本發(fā)明通過對關(guān)聯(lián)查詢進行join分析,得到查詢字段列表,進而分析獲得主表和子表,根據(jù)主表和子表的查詢字段列表和過濾條件,實現(xiàn)了關(guān)聯(lián)查詢sql的sql拆分,拆分得到兩個單表查詢sql,根據(jù)得到的單表查詢分別查詢對應(yīng)的數(shù)據(jù)庫節(jié)點,實現(xiàn)跨庫關(guān)聯(lián)查詢。
[0032]S3的具體實現(xiàn)為:
[0033]S3.1,對sql I進行分析,如果查詢字段列表不包含關(guān)聯(lián)字段,則在sql I的查詢字段列表列中增加關(guān)聯(lián)字段,執(zhí)行S3.2,否則直接執(zhí)行S3.2;
[0034]S3.2,對sqll進行路由解析,得到sqll所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點;
[0035]S3.3,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sqll,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。
[0036]本發(fā)明首先確保查詢字段列表中保護關(guān)聯(lián)字段,本發(fā)明中將關(guān)聯(lián)字段作為sqll和sql2的連接紐帶,實現(xiàn)查詢的緊密關(guān)聯(lián)。因此如果不包含要先添加關(guān)聯(lián)字段,確認(rèn)包含關(guān)聯(lián)字段后,路由解析得到sqll要執(zhí)行的所有數(shù)據(jù)庫節(jié)點,進而進行異步執(zhí)行,提供查詢效率。
[0037]S4的具體實現(xiàn)為:
[0038]S4.1,當(dāng)監(jiān)聽到sql I執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將接sql I執(zhí)行響應(yīng)結(jié)果中的關(guān)聯(lián)字段值提取出來并作為sql2的where過濾條件,對sql2進行拼裝;
[0039]S4.2,對拼裝后的sql2進行路由解析,得到sql2所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點;
[°04°] S4.3,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sql2,并對sql2執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。
[0041]本發(fā)明監(jiān)聽sqll的執(zhí)行響應(yīng)結(jié)果,當(dāng)數(shù)據(jù)行數(shù)達到預(yù)設(shè)值時,將sqll查詢得到的關(guān)聯(lián)字段值與sql2拼裝,將拼裝后的sql2進行路由解析、異步執(zhí)行等,sql2發(fā)送時機為sqll返回一定量數(shù)據(jù)行(如1000條結(jié)果)后執(zhí)行,有效避免sqll執(zhí)行完才執(zhí)行sql2造成占用內(nèi)存過多的問題,提升了執(zhí)行效率。
[0042]S5的具體實現(xiàn)為:
[0043]S5.1,在sql2查詢完畢得到執(zhí)行響應(yīng)結(jié)果,將sql2的執(zhí)行響應(yīng)結(jié)果與sqll執(zhí)行響應(yīng)結(jié)果按照查詢字段列表和關(guān)聯(lián)字段值進行結(jié)果合并,得到合并后的數(shù)據(jù)包;
[0044]S5.2,將合并后的數(shù)據(jù)包返回給客戶端。
[0045]本發(fā)明在sql2查詢到相應(yīng)數(shù)據(jù)時與sqll的相應(yīng)結(jié)果拼裝,返回給客戶端,提高響應(yīng)速度,提高查詢效率。
[0046]如圖2所示,一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),包括:接收模塊,用于接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql;拆分模塊,用于按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sql I和sql2;第一查詢模塊,用于將sql I發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值;第二查詢模塊,用于當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單sql2按照sqll查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢;返回模塊,用于將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,直至查詢結(jié)束。
[0047]具體地,所述拆分模塊包括:Join分析單元,用于對關(guān)聯(lián)查詢sql進行join分析,得到查詢字段列表,其中查詢字段列表包含關(guān)聯(lián)字段;Sql分析單元,用于對關(guān)聯(lián)查詢sql進行分析獲得主表和子表,其中,關(guān)聯(lián)查詢sql中按順序先出現(xiàn)的表為主表,后出現(xiàn)的表為子表;Sql拆分單元,用于對主表和子表進一步分析,分別獲得主表的查詢字段列表及過濾條件,以及子表的查詢字段列表及過濾條件,分別得到sqll和sql2。
[0048]第一查詢模塊包括:預(yù)處理單元,對sqlI進行分析,如果查詢字段列表不包含關(guān)聯(lián)字段,則在sqll的查詢字段列表列中增加關(guān)聯(lián)字段,調(diào)用路由解析單元,否則直接調(diào)用路由解析單元;第一路由解析單元,對sqll進行路由解析,得到sqll所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點;第一執(zhí)行單元,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sql I,并對sql I執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。
[0049]所述第二查詢模塊包括:拼裝單元,用于當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將接sqll執(zhí)行響應(yīng)結(jié)果中的關(guān)聯(lián)字段值提取出來并作為sql2的where過濾條件,對sql2進行拼裝;第二路由解析單元,用于對拼裝后的sql2進行路由解析,得到sql2所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點;第二執(zhí)行單元,用于異步向各數(shù)據(jù)庫節(jié)點發(fā)送sql2,并對sql2執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。
[0050]所述返回模塊包括:合并單元,用于在sql2查詢完畢得到執(zhí)行響應(yīng)結(jié)果后,將sql2的執(zhí)行響應(yīng)結(jié)果與sqll執(zhí)行響應(yīng)結(jié)果按照查詢字段列表和關(guān)聯(lián)字段值進行結(jié)果合并,得到合并后的數(shù)據(jù)包;發(fā)送單元,用于將合并后的數(shù)據(jù)包返回給客戶端。
[0051]為了更好的描述查詢過程,下面以跨節(jié)點的sql為例:
[0052]select a.1d,a.name,b.title from a,b where a.1d = b.1d
[0053]其中表a的數(shù)據(jù)分布在節(jié)點1、2上,表b的數(shù)據(jù)分布在節(jié)點3、4上:
[0054]步驟I,接收關(guān)聯(lián)查詢sql;
[0055]步驟2:解析關(guān)聯(lián)查詢sql,拆分成2個sql;
[0056]select a.1d,a.name from a;
[0057]select b.1d,b.title from b where id in(…);
[0058]步驟3:向節(jié)點1、2發(fā)送select a.1d ,a.name from a;
[0059]步驟4:監(jiān)聽步驟3執(zhí)行響應(yīng)數(shù)據(jù)包,每返回行數(shù)等于1000行時,向節(jié)點3、4發(fā)送select b.1d,b.title from b where id in(...)
[0060]步驟5:合并兩次sql執(zhí)行結(jié)果輸出到客戶端,返回步驟4,直到查詢結(jié)束。
[0061 ] 具體地,如圖3所示,例如其中關(guān)聯(lián)查詢主體為客戶表customer和訂單表order,customer數(shù)據(jù)分布在數(shù)據(jù)庫節(jié)點dnI和dn2中,order數(shù)據(jù)分布在dn3和dn4中,關(guān)聯(lián)查詢sql的語意為:查找id為001的客戶的姓名及購買的所有商品的名稱和價格。
[0062]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
【主權(quán)項】
1.一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,其特征在于,包括如下步驟: SI,接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql; S2,按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sqll和sql2; S3,將sqll發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值; S4,當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單sql2按照sqll查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢; S5,將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,返回S4,直至查詢結(jié)束。2.根據(jù)權(quán)利要求1所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,其特征在于,S2的具體實現(xiàn)為: S2.1,對關(guān)聯(lián)查詢sql進行join分析,得到查詢字段列表,其中查詢字段列表包含關(guān)聯(lián)字段; S2.2,對關(guān)聯(lián)查詢sql進行分析獲得主表和子表,其中,關(guān)聯(lián)查詢sql中按順序先出現(xiàn)的表為主表,后出現(xiàn)的表為子表; S2.3,用于對主表和子表進一步分析,分別獲得主表的查詢字段列表及過濾條件,以及子表的查詢字段列表及過濾條件,分別得到sqll和sql2。3.根據(jù)權(quán)利要求1所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,其特征在于,S3的具體實現(xiàn)為: S3.1,對sqll進行分析,如果查詢字段列表不包含關(guān)聯(lián)字段,則在sqll的查詢字段列表列中增加關(guān)聯(lián)字段,執(zhí)行S3.2,否則直接執(zhí)行S3.2; S3.2,對sqll進行路由解析,得到sqll所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點; S3.3,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sqll,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。4.根據(jù)權(quán)利要求1所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,其特征在于,S4的具體實現(xiàn)為: S4.1,當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將接sqll執(zhí)行響應(yīng)結(jié)果中的關(guān)聯(lián)字段值提取出來并作為sql2的where過濾條件,對sql2進行拼裝; S4.2,對拼裝后的sql2進行路由解析,得到sql2所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點; S4.3,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sql2,并對sql2執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。5.根據(jù)權(quán)利要求1所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢方法,其特征在于,S5的具體實現(xiàn)為: S5.1,在sql2查詢完畢得到執(zhí)行響應(yīng)結(jié)果,將sql2的執(zhí)行響應(yīng)結(jié)果與sqll執(zhí)行響應(yīng)結(jié)果按照查詢字段列表和關(guān)聯(lián)字段值進行結(jié)果合并,得到合并后的數(shù)據(jù)包; S5.2,將合并后的數(shù)據(jù)包返回給客戶端。6.一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),其特征在于,包括: 接收模塊,用于接收跨節(jié)點兩個表的關(guān)聯(lián)查詢sql; 拆分模塊,用于按照關(guān)聯(lián)字段進行sql拆分,將關(guān)聯(lián)查詢sql拆分成單表查詢sqll和sql2; 第一查詢模塊,用于將sqll發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點按照查詢字段列表進行查詢,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽,其中查詢字段列表包含兩表的關(guān)聯(lián)字段,執(zhí)行響應(yīng)結(jié)果包括關(guān)聯(lián)字段值; 第二查詢模塊,用于當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將單sql2按照sqll查詢得到的關(guān)聯(lián)字段值作為where過濾條件發(fā)送到該表對應(yīng)的所有數(shù)據(jù)庫節(jié)點進行查詢; 返回模塊,用于將sqll的執(zhí)行響應(yīng)結(jié)果和sql2的執(zhí)行響應(yīng)結(jié)果合并,將合并后的結(jié)果返回給客戶端,直至查詢結(jié)束。7.根據(jù)權(quán)利要求6所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),其特征在于,所述拆分模塊包括: Join分析單元,用于對關(guān)聯(lián)查詢sql進行join分析,得到查詢字段列表,其中查詢字段列表包含關(guān)聯(lián)字段; Sql分析單元,用于對關(guān)聯(lián)查詢sql進行分析獲得主表和子表,其中,關(guān)聯(lián)查詢sql中按順序先出現(xiàn)的表為主表,后出現(xiàn)的表為子表; Sql拆分單元,用于對主表和子表進一步分析,分別獲得主表的查詢字段列表及過濾條件,以及子表的查詢字段列表及過濾條件,分別得到sqll和sql2。8.根據(jù)權(quán)利要求6所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),其特征在于,第一查詢模塊包括: 預(yù)處理單元,對sql I進行分析,如果查詢字段列表不包含關(guān)聯(lián)字段,則在sql I的查詢字段列表列中增加關(guān)聯(lián)字段,調(diào)用路由解析單元,否則直接調(diào)用路由解析單元; 第一路由解析單元,對sqll進行路由解析,得到sqll所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點; 第一執(zhí)行單元,異步向各數(shù)據(jù)庫節(jié)點發(fā)送sqll,并對sqll執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。9.根據(jù)權(quán)利要求6所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),其特征在于,所述第二查詢豐吳塊包括: 拼裝單元,用于當(dāng)監(jiān)聽到sqll執(zhí)行響應(yīng)結(jié)果的數(shù)據(jù)行數(shù)達到預(yù)設(shè)值η時,將接sqll執(zhí)行響應(yīng)結(jié)果中的關(guān)聯(lián)字段值提取出來并作為sql2的where過濾條件,對sql2進行拼裝; 第二路由解析單元,用于對拼裝后的sql2進行路由解析,得到sql2所要執(zhí)行的所有數(shù)據(jù)庫節(jié)點; 第二執(zhí)行單元,用于異步向各數(shù)據(jù)庫節(jié)點發(fā)送sql2,并對sql2執(zhí)行響應(yīng)結(jié)果進行監(jiān)聽。10.根據(jù)權(quán)利要求6所述一種分布式數(shù)據(jù)庫跨庫關(guān)聯(lián)查詢系統(tǒng),其特征在于,所述返回豐吳塊包括: 合并單元,用于在sql2查詢完畢得到執(zhí)行響應(yīng)結(jié)果后,將sql 2的執(zhí)行響應(yīng)結(jié)果與sql I執(zhí)行響應(yīng)結(jié)果按照查詢字段列表和關(guān)聯(lián)字段值進行結(jié)果合并,得到合并后的數(shù)據(jù)包; 發(fā)送單元,用于將合并后的數(shù)據(jù)包返回給客戶端。
【文檔編號】G06F17/30GK105930407SQ201610238173
【公開日】2016年9月7日
【申請日】2016年4月18日
【發(fā)明人】郝楠
【申請人】北京思特奇信息技術(shù)股份有限公司