性能。
[0059]接著根據(jù)SQL預(yù)分析,獲得NoSQL 二次查詢條件集,對每個(gè)條件字段對應(yīng)的三元組數(shù)據(jù)表進(jìn)行預(yù)篩選,獲得結(jié)果集。
[0060]最后將最大字段集中所有字段對應(yīng)的三元組數(shù)據(jù)表進(jìn)行等值內(nèi)連接操作,而預(yù)篩選條件集中的字段所對應(yīng)的三元組數(shù)據(jù)表則采用預(yù)篩選后的結(jié)果集參與連接。如果預(yù)篩選結(jié)果集不為驅(qū)動表,可以降低表連接操作中的等值比較次數(shù);如果預(yù)篩選結(jié)果集作為驅(qū)動表,可以降低表連接操作中的等值比較次數(shù)以及減少表連接操作后返回的記錄數(shù)。
[0061]下面結(jié)合實(shí)施例對本發(fā)明作出進(jìn)一步的說明。
[0062]本實(shí)施例所采用的測試環(huán)境及測試參數(shù)如下:
[0063]?采用MySQL作為關(guān)系型數(shù)據(jù)庫,MongoDB作為非關(guān)系型數(shù)據(jù)庫;
[0064].MongoDB存儲記錄數(shù)分別為50、100、1000、10000、20000的數(shù)據(jù)集作為查詢對象;
[0065]?表名統(tǒng)一為 stu_info ;
[0066]?數(shù)據(jù)格式統(tǒng)一為{ ‘stu_id,: ”, ’name,: ”,,age,: ”, ’weight,: ”, ’score,: ”, grade:,,};
[0067]?每個(gè)數(shù)據(jù)集中有50條記錄符合’ stu_info’〈’ 00050’ ;
[0068]?每個(gè)數(shù)據(jù)集中符合上述條件的50條記錄中存在30條記錄符合’ name’=’ test’ ;
[0069]?查詢語句為:select stu_id, name from stu_info where stu_id〈,00050,andπ£?π?θ — test
[0070]一種多結(jié)構(gòu)數(shù)據(jù)庫集成查詢方法,包括如下步驟:
[0071](101)根據(jù)用戶查詢,從開發(fā)者構(gòu)建的標(biāo)準(zhǔn)SQL查詢語句中獲取查詢目標(biāo)的表名,執(zhí)行步驟(102);
[0072](102)連接數(shù)據(jù)表字典,查詢表名對應(yīng)的記錄,執(zhí)行步驟(103);
[0073](103)從記錄中獲取表信息,執(zhí)行步驟(104);
[0074](104)根據(jù)表信息識別出用戶查詢的類型:對于SQL類型查詢,執(zhí)行步驟(120);對于NoSQL類型查詢,執(zhí)行步驟(105);
[0075](105)從用戶查詢的查詢語句中提取NoSQL數(shù)據(jù)的預(yù)查詢條件,并調(diào)用NoSQL數(shù)據(jù)轉(zhuǎn)化模塊,具體包括:
[0076](051)提取預(yù)查詢條件,執(zhí)行步驟(052);
[0077](052)根據(jù)預(yù)查詢條件,對NoSQL數(shù)據(jù)進(jìn)行一次預(yù)查詢,執(zhí)行步驟(053);
[0078](053)將查詢結(jié)果轉(zhuǎn)化為(id, key, value)形式的三元組數(shù)據(jù),執(zhí)行步驟(054);
[0079](054)連接SQL數(shù)據(jù)庫,執(zhí)行步驟(055);
[0080](055)向SQL數(shù)據(jù)庫中注入三元組數(shù)據(jù),返回步驟(105),并執(zhí)行步驟(106);
[0081](106)從用戶查詢的查詢語句中提取NoSQL數(shù)據(jù)的二次查詢條件集,執(zhí)行步驟
(107);
[0082](107)從用戶查詢的查詢語句中提取用戶查詢包含的最大字段集,執(zhí)行步驟
(108);
[0083](108)初始化循環(huán)參數(shù)i = 0,執(zhí)行步驟(109);
[0084](109)判斷i是否小于二次查詢條件集的長度:若小于,則執(zhí)行步驟(110);否則,執(zhí)行步驟(112);
[0085](110)在最大字段集中對應(yīng)字段后添加當(dāng)前查詢條件,執(zhí)行步驟(111);當(dāng)前查詢條件為二次查詢條件集中的第i個(gè)查詢條件,最大字段集中對應(yīng)字段為與當(dāng)前查詢條件相同的字段;
[0086](111) i++,返回步驟(109);
[0087](112)初始化循環(huán)參數(shù)j = 0,執(zhí)行步驟(113);
[0088](113)判斷j是否小于最大字段集的長度:若小于,則執(zhí)行步驟(114);否則,執(zhí)行步驟(119);
[0089](114)判斷最大字段集中第j個(gè)字段后是否存在查詢條件:若存在,則執(zhí)行步驟(115);否則,執(zhí)行步驟(117);
[0090](115)將最大字段集中第j個(gè)字段對應(yīng)的三元組數(shù)據(jù)按照查詢條件進(jìn)行預(yù)篩選,獲得預(yù)篩選結(jié)果,執(zhí)行步驟(116);
[0091](116)對預(yù)篩選結(jié)果進(jìn)行id等值內(nèi)連接,產(chǎn)生對應(yīng)的查詢語句,執(zhí)行步驟(118);
[0092](117)對最大字段集中第j個(gè)字段對應(yīng)的三元組數(shù)據(jù)進(jìn)行id等值內(nèi)連接,產(chǎn)生對應(yīng)的查詢語句,執(zhí)行步驟(118);
[0093](118) j++,返回步驟(113);
[0094](119) id等值內(nèi)連接產(chǎn)生對應(yīng)的查詢語句,使用該查詢語句替換相應(yīng)的NoSQL變量,形成最終的SQL查詢語句,執(zhí)行步驟(120);
[0095](120)連接SQL數(shù)據(jù)庫,執(zhí)行步驟(121);
[0096](121)執(zhí)行查詢;
[0097](122)返回最終的查詢結(jié)果。
[0098]針對本例,將本發(fā)明方法與采用現(xiàn)有的基于混合查詢模式的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一查詢模型進(jìn)行對比,能夠明顯看出本發(fā)明具有如下優(yōu)勢:
[0099]1、開發(fā)者只需構(gòu)建標(biāo)準(zhǔn)的SQL查詢語言,即可實(shí)現(xiàn)對關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的統(tǒng)一查詢,無需學(xué)習(xí)新的查詢語言,降低開發(fā)成本;
[0100]2、針對NoSQL數(shù)據(jù)轉(zhuǎn)化,提出基于預(yù)查詢的NoSQL數(shù)據(jù)轉(zhuǎn)化方案,能夠降低NoSQL數(shù)據(jù)轉(zhuǎn)化時(shí)間和SQL存儲空間的占用量;
[0101]3、針對NoSQL查詢模式轉(zhuǎn)化,提出基于預(yù)篩選的等值內(nèi)連接方案,降低整個(gè)查詢的執(zhí)行時(shí)間,提高了數(shù)據(jù)查詢的效率。
[0102]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出:對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種多結(jié)構(gòu)數(shù)據(jù)庫集成查詢方法,其特征在于:包括如下步驟: (1)系統(tǒng)對用戶查詢進(jìn)行預(yù)分析,預(yù)分析內(nèi)容包括:①根據(jù)數(shù)據(jù)表字典,識別出該查詢屬于SQL類型還是NoSQL類型,分類型處理;②從用戶查詢的查詢語句中提取出NoSQL數(shù)據(jù)的預(yù)查詢條件,即NoSQL數(shù)據(jù)的等值查詢條件;③從用戶查詢的查詢語句中提取出NoSQL數(shù)據(jù)的二次查詢條件集;④從用戶查詢的查詢語句中提取出該查詢包含的最大字段集; (2)NoSQL數(shù)據(jù)預(yù)查詢及轉(zhuǎn)化:根據(jù)預(yù)查詢條件,對NoSQL數(shù)據(jù)進(jìn)行一次預(yù)查詢,僅將符合預(yù)查詢條件的NoSQL數(shù)據(jù)轉(zhuǎn)化為三元組數(shù)據(jù),以降低NoSQL數(shù)據(jù)轉(zhuǎn)化冗余和注入SQL數(shù)據(jù)庫中的三元組數(shù)據(jù),從而降低SQL數(shù)據(jù)庫的存儲空間的占用; (3)查詢模式轉(zhuǎn)化:根據(jù)二次查詢條件集和最大字段集,采用預(yù)篩選內(nèi)連接的算法,將三元組數(shù)據(jù)由NoSQL查詢模式轉(zhuǎn)化為SQL查詢模式,形成最終的SQL查詢語句; (4)查詢執(zhí)行與結(jié)果輸出:執(zhí)行SQL查詢語句,處理查詢結(jié)果并返回給用戶。
2.根據(jù)權(quán)利要求1所述的多結(jié)構(gòu)數(shù)據(jù)庫集成查詢方法,其特征在于:包括如下步驟: (101)根據(jù)用戶查詢,從開發(fā)者構(gòu)建的標(biāo)準(zhǔn)SQL查詢語句中獲取查詢目標(biāo)的表名,執(zhí)行步驟(102); (102)連接數(shù)據(jù)表字典,查詢表名對應(yīng)的記錄,執(zhí)行步驟(103); (103)從記錄中獲取表信息,執(zhí)行步驟(104); (104)根據(jù)表信息識別出用戶查詢的類型:對于SQL類型查詢,執(zhí)行步驟(120);對于NoSQL類型查詢,執(zhí)行步驟(105); (105)從用戶查詢的查詢語句中提取NoSQL數(shù)據(jù)的預(yù)查詢條件,并調(diào)用NoSQL數(shù)據(jù)轉(zhuǎn)化模塊,具體包括: (051)提取預(yù)查詢條件,執(zhí)行步驟(052); (052)根據(jù)預(yù)查詢條件,對NoSQL數(shù)據(jù)進(jìn)行一次預(yù)查詢,執(zhí)行步驟(053); (053)將查詢結(jié)果轉(zhuǎn)化為(id,key, value)形式的三元組數(shù)據(jù),執(zhí)行步驟(054); (054)連接SQL數(shù)據(jù)庫,執(zhí)行步驟(055); (055)向SQL數(shù)據(jù)庫中注入三元組數(shù)據(jù),返回步驟(105),并執(zhí)行步驟(106); (106)從用戶查詢的查詢語句中提取NoSQL數(shù)據(jù)的二次查詢條件集,執(zhí)行步驟(107); (107)從用戶查詢的查詢語句中提取用戶查詢包含的最大字段集,執(zhí)行步驟(108); (108)初始化循環(huán)參數(shù)i= 0,執(zhí)行步驟(109); (109)判斷i是否小于二次查詢條件集的長度:若小于,則執(zhí)行步驟(110);否則,執(zhí)行步驟(112); (110)在最大字段集中對應(yīng)字段后添加當(dāng)前查詢條件,執(zhí)行步驟(111);當(dāng)前查詢條件為二次查詢條件集中的第i個(gè)查詢條件,最大字段集中對應(yīng)字段為與當(dāng)前查詢條件相同的字段; (111)i++,返回步驟(109); (112)初始化循環(huán)參數(shù)j= 0,執(zhí)行步驟(113); (113)判斷j是否小于最大字段集的長度:若小于,則執(zhí)行步驟(114);否則,執(zhí)行步驟(119); (114)判斷最大字段集中第j個(gè)字段后是否存在查詢條件:若存在,則執(zhí)行步驟(115);否則,執(zhí)行步驟(117); (115)將最大字段集中第j個(gè)字段對應(yīng)的三元組數(shù)據(jù)按照查詢條件進(jìn)行預(yù)篩選,獲得預(yù)篩選結(jié)果,執(zhí)行步驟(116); (116)對預(yù)篩選結(jié)果進(jìn)行id等值內(nèi)連接,產(chǎn)生對應(yīng)的查詢語句,執(zhí)行步驟(118); (117)對最大字段集中第j個(gè)字段對應(yīng)的三元組數(shù)據(jù)進(jìn)行id等值內(nèi)連接,產(chǎn)生對應(yīng)的查詢語句,執(zhí)行步驟(118); (118)j++,返回步驟(113); (119)id等值內(nèi)連接產(chǎn)生對應(yīng)的查詢語句,使用該查詢語句替換相應(yīng)的NoSQL變量,形成最終的SQL查詢語句,執(zhí)行步驟(120); (120)連接SQL數(shù)據(jù)庫,執(zhí)行步驟(121); (121)執(zhí)行查詢; (122)返回最終的查詢結(jié)果。
【專利摘要】本發(fā)明公開了一種多結(jié)構(gòu)數(shù)據(jù)庫集成查詢方法,采用查詢語言預(yù)分析方案以及查詢模式轉(zhuǎn)化采用先預(yù)篩選后內(nèi)連接的算法,減少NoSQL轉(zhuǎn)化返回的數(shù)據(jù)量和表連接操作的次數(shù),提高算法執(zhí)行效率,從而降低SQL存儲空間的使用率和提高查詢效率。
【IPC分類】G06F17-30
【公開號】CN104794247
【申請?zhí)枴緾N201510247190
【發(fā)明人】徐平平, 董海玲, 董龑
【申請人】東南大學(xué)
【公開日】2015年7月22日
【申請日】2015年5月14日