一種數(shù)據(jù)庫查詢方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)庫查詢方法和系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)在市面上常見的系統(tǒng)很多都是一個頁面里附帶著一個或多個數(shù)據(jù)庫請求,比如目錄頁面、樹節(jié)點頁面、查詢條件頁面、報表等。訪問這樣的頁面往往都伴隨數(shù)據(jù)庫請求,多次刷新同一個頁面相應(yīng)的數(shù)據(jù)庫請求也會使用同一個SQL去多次查詢數(shù)據(jù)庫。
[0003]現(xiàn)有的數(shù)據(jù)庫SQL在查詢時,用戶的每次請求頁面都會有一次SQL去查詢數(shù)據(jù)庫。當(dāng)多次刷新同一頁面時就會發(fā)出多個相同的SQL請求并查詢多次數(shù)據(jù)庫,所有的查詢都下發(fā)到數(shù)據(jù)庫加劇擁塞,給數(shù)據(jù)庫造成不必要的負(fù)擔(dān)。因此,迫切需要一種能解決多次數(shù)據(jù)庫請求造成數(shù)據(jù)庫擁堵的解決方案,以適應(yīng)多數(shù)據(jù)庫請求的需求。
【發(fā)明內(nèi)容】
[0004]鑒于上述問題,本發(fā)明實施例提供一種數(shù)據(jù)庫查詢方法和系統(tǒng),將多次SQL請求壓縮成一次,能夠減輕數(shù)據(jù)庫的負(fù)擔(dān),從而解決多次數(shù)據(jù)庫請求造成數(shù)據(jù)庫擁堵的技術(shù)問題。
[0005]本發(fā)明實施例采用了如下技術(shù)方案:
[0006]本發(fā)明一個實施例提供了一種數(shù)據(jù)庫查詢方法,所述方法包括:
[0007]接收數(shù)據(jù)庫查詢請求;
[0008]判斷所述數(shù)據(jù)庫查詢請求是否為初次請求;
[0009]若所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作,并將查詢結(jié)果存入緩存中;
[0010]若所述數(shù)據(jù)庫查詢請求不是初次請求,則在所述緩存中獲取所述數(shù)據(jù)庫查詢請求的查詢結(jié)果。
[0011]所述判斷所述數(shù)據(jù)庫查詢請求是否為初次請求包括:
[0012]檢索標(biāo)記正在查詢請求中是否有與所述數(shù)據(jù)庫查詢請求相同的查詢請求;
[0013]若有則確定所述數(shù)據(jù)庫查詢請求不是初次請求;
[0014]若沒有則確定所述數(shù)據(jù)庫查詢請求是初次請求,并將所述數(shù)據(jù)庫查詢請求標(biāo)記為正在查詢請求。
[0015]所述若所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作,并將查詢結(jié)果存入緩存中包括:
[0016]若所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作;
[0017]將查詢結(jié)果存入緩存,且與所述數(shù)據(jù)庫查詢請求相對應(yīng);
[0018]在標(biāo)記的正在查詢請求中將所述數(shù)據(jù)庫查詢請求刪除。
[0019]所述若所述數(shù)據(jù)庫查詢請求不是初次請求,則在所述緩存中獲取所述數(shù)據(jù)庫查詢請求的查詢結(jié)果包括:
[0020]若所述數(shù)據(jù)庫查詢請求不是初次請求,則在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在;
[0021 ] 若存在則直接獲取所述查詢結(jié)果;
[0022]若不存在,則等待查詢周期后,再次在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在,直至在緩存中查詢到所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果,并獲取所述查詢結(jié)果。
[0023]所述等待查詢周期后還包括:
[0024]判斷當(dāng)前距離初次接收到所述數(shù)據(jù)庫查詢請求的時間是否超過存活周期;
[0025]若超過存活周期,則在標(biāo)記的正在查詢請求中將所述數(shù)據(jù)庫查詢請求刪除,并返回超時異常,結(jié)束;
[0026]若未超過存活周期,則執(zhí)行所述再次在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在。
[0027]所述將查詢結(jié)果存入緩存,且與所述數(shù)據(jù)庫查詢請求相對應(yīng)之后還包括:
[0028]監(jiān)控所述查詢結(jié)果的存儲時間是否超過緩存占用周期;在所述查詢結(jié)果的存儲時間超過緩存占用周期時,在緩存中刪除所述查詢結(jié)果。
[0029]另外,本發(fā)明實施例還提供了一種數(shù)據(jù)庫查詢系統(tǒng),所述系統(tǒng)包括:
[0030]請求接收模塊,用于接收數(shù)據(jù)庫查詢請求;
[0031]判斷模塊,用于判斷所述數(shù)據(jù)庫查詢請求是否為初次請求;
[0032]初次請求執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果是所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作,并將查詢結(jié)果存入緩存中;
[0033]再次請求執(zhí)行模塊,用于若所述判斷模塊的判斷結(jié)果是若所述數(shù)據(jù)庫查詢請求不是初次請求,則在所述緩存中獲取所述數(shù)據(jù)庫查詢請求的查詢結(jié)果。
[0034]所述判斷模塊包括:
[0035]檢索單元,用于檢索標(biāo)記正在查詢請求中是否有與所述數(shù)據(jù)庫查詢請求相同的查詢請求;
[0036]第一確定單元,用于若有則確定所述數(shù)據(jù)庫查詢請求不是初次請求;
[0037]第二確定單元,用于若沒有則確定所述數(shù)據(jù)庫查詢請求是初次請求,并將所述數(shù)據(jù)庫查詢請求標(biāo)記為正在查詢請求。
[0038]所述初次請求執(zhí)行模塊包括:
[0039]查詢操作單元,用于若所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作;
[0040]緩存單元,用于將查詢結(jié)果存入緩存,且與所述數(shù)據(jù)庫查詢請求相對應(yīng);
[0041]第一刪除單元,用于在標(biāo)記的正在查詢請求中將所述數(shù)據(jù)庫查詢請求刪除。
[0042]所述再次請求執(zhí)行模塊包括:
[0043]查詢單元,用于若所述數(shù)據(jù)庫查詢請求不是初次請求,則在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在;
[0044]第一結(jié)果獲取單元,用于若所述查詢單元的查詢結(jié)果是存在則直接獲取所述查詢結(jié)果;
[0045]第二結(jié)果獲取單元,用于若所述查詢單元的查詢結(jié)果是不存在,則等待查詢周期后,再次在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在,直至在緩存中查詢到所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果,并獲取所述查詢結(jié)果;
[0046]所述第二結(jié)果獲取單元包括:
[0047]存活周期判斷子單元,用于若所述查詢單元的查詢結(jié)果是不存在,則等待查詢周期后,判斷當(dāng)前距離初次接收到所述數(shù)據(jù)庫查詢請求的時間是否超過存活周期;
[0048]第一判斷子單元,用于若所述存活周期判斷子單元的判斷結(jié)果為超過存活周期,則在標(biāo)記的正在查詢請求中將所述數(shù)據(jù)庫查詢請求刪除,并返回超時異常,結(jié)束;
[0049]第二判斷子單元,用于若所述存活周期判斷子單元的判斷結(jié)果為未超過存活周期,則再次在緩存中查詢所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果是否存在,直至在緩存中查詢到所述數(shù)據(jù)庫查詢請求對應(yīng)的查詢結(jié)果,并獲取所述查詢結(jié)果;
[0050]所述初次請求執(zhí)行模塊還包括:
[0051]第二刪除單元,用于所述緩存單元將查詢結(jié)果存入緩存后,監(jiān)控所述查詢結(jié)果的存儲時間是否超過緩存占用周期;在所述查詢結(jié)果的存儲時間超過緩存占用周期時,在緩存中刪除所述查詢結(jié)果。
[0052]本發(fā)明實施例提供一種數(shù)據(jù)庫查詢方法和系統(tǒng),接收數(shù)據(jù)庫查詢請求;判斷所述數(shù)據(jù)庫查詢請求是否為初次請求;若所述數(shù)據(jù)庫查詢請求是初次請求,則執(zhí)行對應(yīng)的數(shù)據(jù)庫查詢操作,并將查詢結(jié)果存入緩存中;若所述數(shù)據(jù)庫查詢請求不是初次請求,則在所述緩存中獲取所述數(shù)據(jù)庫查詢請求的查詢結(jié)果??梢姡嗤腟QL在同時請求數(shù)據(jù)庫時,只請求一次并返回結(jié)果,其它的請求獲取這個請求的結(jié)果,即在一定條件下,一段時間內(nèi)查詢SQL語句只有第一次生效,其余的則等待查詢的結(jié)果。將多次SQL請求壓縮成一次,能夠減輕數(shù)據(jù)庫的負(fù)擔(dān),從而解決多次數(shù)據(jù)庫請求造成數(shù)據(jù)庫擁堵的技術(shù)問題,并且進(jìn)一步提高了 SQL查詢返回結(jié)果集的速度,后續(xù)的請求使用的是第一次請求的結(jié)果集,大大縮短了查詢時間。
【附圖說明】
[0053]圖1為本發(fā)明實施例提供的一種數(shù)據(jù)庫查詢方法流程圖;
[0054]圖2為本發(fā)明實施例中一種數(shù)據(jù)庫查詢方法示意圖;
[0055]圖3為本發(fā)明實施例中提供的一種數(shù)據(jù)庫查詢方法具體實例流程圖;
[0056]圖4為本發(fā)明實施例中一種數(shù)據(jù)庫查詢系統(tǒng)結(jié)構(gòu)框圖。
【具體實施方式】
[0057]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進(jìn)一步地詳細(xì)描述。
[0058]本發(fā)明實施例要解決的技術(shù)問題:相同的SQL在同時請求數(shù)據(jù)庫時,只請求一次并返回結(jié)果,其他的請求獲取這個請求的結(jié)果。
[0059]參見圖1,本發(fā)明實施例提供一種數(shù)據(jù)庫查詢方法,具體包括如下步驟:
[0060]S101:接收數(shù)據(jù)庫查詢請求。
[0061]數(shù)據(jù)庫查詢請求類型包括多種,比如URL請求、SQL請求等。
[0062]S102:判斷所述數(shù)據(jù)庫查詢請求是否為初次請求。
[0063]作為優(yōu)選的,本步驟中所述判斷所述數(shù)據(jù)庫查詢請求是否為初次請求具體可以包括:
[0064]檢索標(biāo)記正在查詢請求中是否有與所述數(shù)據(jù)庫查詢請求相同的查詢請求;
[0065]若有則確定所述數(shù)據(jù)庫查詢請求不是初次請求;
[0066]若沒有則確定所述數(shù)據(jù)庫查詢請求是初次請求,并將所述數(shù)據(jù)庫查詢請求標(biāo)記為正在查詢請求。
[0067]也就是說,對于初次的數(shù)據(jù)庫查詢請求,可以做個標(biāo)記,用于標(biāo)識為初次查詢請求,且該查詢請求正在查詢。
[0068]S103:若所述數(shù)據(jù)庫查詢請