數(shù)據(jù)查詢方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)查詢方法和系統(tǒng)。
【背景技術(shù)】
[0002] 企業(yè)應(yīng)用系統(tǒng)中,隨著用戶數(shù)量增大,并發(fā)訪問數(shù)很高,由于每個(gè)請(qǐng)求都幾乎會(huì)訪 問數(shù)據(jù)庫(kù),但數(shù)據(jù)庫(kù)連接數(shù)并非越多越好,過多的數(shù)據(jù)庫(kù)連接,會(huì)造成爭(zhēng)搶服務(wù)器硬件資 源,造成資源都浪費(fèi)在等待上,尤其需要查詢大量數(shù)據(jù)的數(shù)據(jù)查詢(例如報(bào)表),會(huì)占用很 多資源,造成其他查詢等待,所以通常的方式是根據(jù)服務(wù)器硬件設(shè)置一個(gè)最大連接數(shù),通過 設(shè)置最大連接數(shù),限制并行查詢的數(shù)量,以求達(dá)到一個(gè)平均的響應(yīng)時(shí)間,盡量減少大量資源 用于等待的情況。
[0003] 數(shù)據(jù)查詢占用的如CPU和磁盤讀取等的資源,可以統(tǒng)稱為成本,不同的數(shù)據(jù)查詢 的成本差距非常大,簡(jiǎn)單做分類,大多數(shù)成本很低,少數(shù)成本中等,極少數(shù)成本很高。通過限 制數(shù)據(jù)庫(kù)的最大連接數(shù),有較大缺陷。如服務(wù)器硬件能滿足1萬個(gè)成本很低的數(shù)據(jù)并行查 詢,但考慮到可能會(huì)有成本中等和成本很高級(jí)別數(shù)據(jù)查詢同時(shí)訪問,數(shù)據(jù)庫(kù)最大連接數(shù)可 能只會(huì)設(shè)為100以避免資源競(jìng)爭(zhēng)。但如果只是同時(shí)有400個(gè)成本很低的數(shù)據(jù)并行查詢,雖 然服務(wù)器硬件能夠滿足,而由于數(shù)據(jù)庫(kù)最大連接數(shù)只有100,400個(gè)成本很低的數(shù)據(jù)并行查 詢也會(huì)分成4批順序執(zhí)行,響應(yīng)時(shí)間延長(zhǎng),服務(wù)器資源沒有充分利用。
[0004] 又比如,即便數(shù)據(jù)庫(kù)并發(fā)最大連接數(shù)只設(shè)為100,但如果有10個(gè)成本很高的數(shù)據(jù) 同時(shí)查詢,也足夠?qū)⒎?wù)器資源占滿,而造成其它90個(gè)請(qǐng)求響應(yīng)變慢,需要長(zhǎng)時(shí)間等待。
[0005] 總而言之就是大多數(shù)情況下,服務(wù)器資源利用率較低,而在一些極端情況下服務(wù) 器響應(yīng)非常緩慢。
【發(fā)明內(nèi)容】
[0006] 基于此,有必要針對(duì)服務(wù)器資源利用率低的問題,提供一種提高服務(wù)器利用率的 數(shù)據(jù)查詢方法及系統(tǒng)。
[0007] 本發(fā)明提供了一種數(shù)據(jù)查詢方法,包括以下步驟:
[0008] 接收數(shù)據(jù)查詢請(qǐng)求以及查詢請(qǐng)求所屬的數(shù)據(jù)查詢級(jí)別;
[0009] 獲取數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量;
[0010] 比較獲取的鎖可用數(shù)量和〇的大?。?br>[0011] 若獲取的鎖可用數(shù)量大于0,則將數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量減1,并執(zhí)行數(shù)據(jù)查 詢請(qǐng)求以獲得數(shù)據(jù)查詢結(jié)果。
[0012] 在其中一種實(shí)施方式中,獲取數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量步驟之前,還包括:
[0013] 申請(qǐng)數(shù)據(jù)查詢級(jí)別的鎖;
[0014] 將數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量減1的步驟之前或之后,還包括:分配該數(shù)據(jù)查詢 級(jí)別的鎖。
[0015] 在其中一種實(shí)施方式中,方法還包括:
[0016] 若獲取的鎖可用數(shù)量等于0,則暫緩查詢請(qǐng)求并繼續(xù)申請(qǐng)數(shù)據(jù)查詢級(jí)別的鎖,直至 獲取的鎖可用數(shù)量大于〇。
[0017] 在其中一種實(shí)施方式中,在執(zhí)行數(shù)據(jù)查詢請(qǐng)求以獲得數(shù)據(jù)查詢結(jié)果步驟之后,還 包括:
[0018] 釋放數(shù)據(jù)查詢級(jí)別的鎖;
[0019] 將數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量加1。
[0020] 在其中一種實(shí)施方式中,數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量具有最大值,數(shù)據(jù)查詢級(jí)別 根據(jù)數(shù)據(jù)查詢所占用的資源劃分。
[0021] 本發(fā)明還提供一種數(shù)據(jù)查詢系統(tǒng),包括:
[0022] 接收模塊,用于接收數(shù)據(jù)查詢請(qǐng)求以及查詢請(qǐng)求所屬的數(shù)據(jù)查詢級(jí)別;
[0023] 獲取模塊,用于獲取數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量;
[0024] 比較模塊,用于比較獲取的鎖可用數(shù)量和0的大??;
[0025] 查詢分級(jí)數(shù)量控制模塊,用于若獲取的鎖可用數(shù)量大于0,將數(shù)據(jù)查詢級(jí)別的鎖可 用數(shù)量減1 ;
[0026] 查詢模塊,用于若獲取的鎖可用數(shù)量大于0則執(zhí)行數(shù)據(jù)查詢請(qǐng)求以獲得數(shù)據(jù)查詢 結(jié)果。
[0027] 在其中一種實(shí)施方式中,系統(tǒng)還包括執(zhí)行模塊,用于在獲取模塊獲取數(shù)據(jù)查詢級(jí) 別的鎖可用數(shù)量之前,申請(qǐng)數(shù)據(jù)查詢級(jí)別的鎖;
[0028] 查詢分級(jí)數(shù)量控制模塊還用于將數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量減1之前或之后,分 配該數(shù)據(jù)查詢級(jí)別的鎖。
[0029] 在其中一種實(shí)施方式中,執(zhí)行模塊,還用于當(dāng)比較模塊比較所獲取的鎖可用數(shù)量 等于〇時(shí),暫緩查詢請(qǐng)求并繼續(xù)向查詢分級(jí)數(shù)量控制模塊申請(qǐng)數(shù)據(jù)查詢級(jí)別的鎖,直至獲 取的鎖可用數(shù)量大于〇。
[0030] 在其中一種實(shí)施方式中,執(zhí)行模塊,還用于在查詢模塊執(zhí)行數(shù)據(jù)查詢請(qǐng)求以獲得 數(shù)據(jù)查詢結(jié)果之后,釋放數(shù)據(jù)查詢級(jí)別的鎖;
[0031] 查詢分級(jí)數(shù)量控制模塊,還用于在查詢模塊執(zhí)行數(shù)據(jù)查詢以獲得數(shù)據(jù)查詢結(jié)果之 后,將數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量加1。
[0032] 在其中一種實(shí)施方式中,查詢分級(jí)數(shù)量控制模塊還用于根據(jù)數(shù)據(jù)查詢所占用的資 源劃分?jǐn)?shù)據(jù)查詢級(jí)別;數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量具有最大值。
[0033] 根據(jù)數(shù)據(jù)查詢方法,通過設(shè)定不同級(jí)別的查詢請(qǐng)求的鎖可用數(shù)量來控制同一級(jí)別 查詢的并發(fā)數(shù)量,只有當(dāng)比較所獲取的數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量大于〇時(shí),才執(zhí)行數(shù)據(jù) 查詢請(qǐng)求,從而能夠避免多個(gè)占用資源的查詢請(qǐng)求并行執(zhí)行,造成服務(wù)器資源耗盡的情況, 有效的提升了服務(wù)器的利用率。
[0034] 而數(shù)據(jù)查詢系統(tǒng)通過設(shè)置數(shù)據(jù)分級(jí)數(shù)量控制模塊,通過設(shè)定不同級(jí)別的查詢請(qǐng)求 的鎖可用數(shù)量來控制同一級(jí)別查詢的并發(fā)數(shù)量,當(dāng)執(zhí)行某一數(shù)據(jù)查詢請(qǐng)求時(shí),通過比較模 塊比較所獲取的數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量和〇的大小,只有所獲取的數(shù)據(jù)查詢級(jí)別的鎖 可用數(shù)量大于〇時(shí),才執(zhí)行數(shù)據(jù)查詢請(qǐng)求。從而能夠避免多個(gè)占用資源的查詢請(qǐng)求并行執(zhí) 行,造成服務(wù)器資源耗盡的情況,有效的提升了服務(wù)器的利用率。
【附圖說明】
[0035] 圖1為一種實(shí)施方式的數(shù)據(jù)查詢方法的流程圖;
[0036] 圖2為另一種實(shí)施方式的數(shù)據(jù)查詢方法的流程圖;
[0037] 圖3為查詢查詢系統(tǒng)的執(zhí)行示意圖;
[0038] 圖4為數(shù)據(jù)查詢系統(tǒng)的模塊圖。
【具體實(shí)施方式】
[0039] 為了使本發(fā)明的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā) 明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用 于限定本發(fā)明。
[0040] 如圖1所示,在一個(gè)實(shí)施例中,一種數(shù)據(jù)查詢方法,具體包括以下步驟:
[0041] S100 :接收數(shù)據(jù)查詢請(qǐng)求以及所述查詢請(qǐng)求所屬的數(shù)據(jù)查詢級(jí)別。
[0042] 具體的,向數(shù)據(jù)庫(kù)發(fā)出查詢請(qǐng)求時(shí)攜帶有該查詢請(qǐng)求的參數(shù),獲取數(shù)據(jù)查詢請(qǐng)求 的同時(shí),根據(jù)該查詢請(qǐng)求所攜帶的參數(shù)獲取該查詢請(qǐng)求所屬的數(shù)據(jù)查詢級(jí)別,例如,獲取該 查詢請(qǐng)求屬于占用資源較多、成本較高的級(jí)別。
[0043] S110 :獲取所述數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量。
[0044] 具體的,預(yù)先根據(jù)數(shù)據(jù)查詢占用資源,分成若干等級(jí)并預(yù)先設(shè)定每個(gè)級(jí)別的鎖可 用數(shù)量。在執(zhí)行數(shù)據(jù)查詢時(shí),獲取該數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量。
[0045] S120 :比較所述獲取的鎖可用數(shù)量和0的大小。
[0046] 若所獲取的鎖可用數(shù)量大于0,則執(zhí)行步驟S400,若所獲取的鎖可用數(shù)量等于0, 則暫緩該查詢請(qǐng)求并執(zhí)行步驟S200繼續(xù)獲取該數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量。
[0047] S130 :若所述獲取的鎖可用數(shù)量大于0,則將所述數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量減 1,并執(zhí)行所述數(shù)據(jù)查詢請(qǐng)求以獲得數(shù)據(jù)查詢結(jié)果。
[0048] 上述查詢方法通過設(shè)定不同級(jí)別的查詢請(qǐng)求的鎖可用數(shù)量來控制同一級(jí)別查詢 的并發(fā)數(shù)量,只有當(dāng)比較所獲取的數(shù)據(jù)查詢級(jí)別的鎖可用數(shù)量大于〇時(shí),才執(zhí)行數(shù)據(jù)查詢 請(qǐng)求,從而能夠避免多個(gè)占用資源的查詢請(qǐng)求并行執(zhí)行,造成服務(wù)器資源耗盡的情況,有效 的提升了服務(wù)器的利用率。
[0049] 如圖2所示,在另一個(gè)實(shí)施例中,一種數(shù)據(jù)查詢方法,具體包括以下步驟:
[0050] S200 :接收數(shù)據(jù)查詢請(qǐng)求以及該查詢請(qǐng)求所屬的數(shù)據(jù)查詢級(jí)別。
[0051] 具體的,向數(shù)據(jù)庫(kù)發(fā)出查詢請(qǐng)求時(shí)攜帶有該查詢請(qǐng)求的