欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)庫結(jié)果集緩存方法及設備與流程

文檔序號:12008928閱讀:205來源:國知局
數(shù)據(jù)庫結(jié)果集緩存方法及設備與流程
本發(fā)明實施例涉及通信技術(shù),尤其涉及一種數(shù)據(jù)庫結(jié)果集緩存方法及設備。

背景技術(shù):
目前,在數(shù)據(jù)庫實際應用環(huán)境中,為了快速響應用戶的查詢請求,常使用結(jié)果集緩存技術(shù),結(jié)果集緩存的原理是接收到相同的查詢請求時,利用之前的查詢結(jié)果響應當前的查詢請求,而不是直接對原始數(shù)據(jù)進行處理。結(jié)果集緩存技術(shù)使數(shù)據(jù)庫的查詢性能有很大的提升,可以有更少的物理讀寫和更快的響應時間。結(jié)果集緩存主要用于存儲數(shù)據(jù)表連接、聚集或排序等耗時操作的結(jié)果,以快速得到結(jié)果?,F(xiàn)有技術(shù)中,是根據(jù)結(jié)構(gòu)化查詢語言(StructuredQueryLanguage,簡稱:SQL)查詢語句來做結(jié)果集緩存的,如果一個SQL查詢語句是以select開始的,則數(shù)據(jù)庫服務器將把與該SQL文本的散列鍵值對應的查詢結(jié)果緩存在緩存區(qū)中,每個緩存區(qū)都與一個SQL文本的散列鍵值對應,在應用結(jié)果集緩存之前,數(shù)據(jù)庫服務器不會對SQL文本做任何處理,也就是說,若兩個SQL查詢語句只相差一個字符,這兩個SQL查詢語句也將使用緩存的不同結(jié)果集。然而,實際應用中,對原始的數(shù)據(jù)表進行更新有時是不可避免的,若原始的數(shù)據(jù)表發(fā)生了更新,會導致之前緩存的結(jié)果集不可用,當接收到相同的查詢請求時,需要耗費中央處理器(CentralProcessingUnit,簡稱:CPU)重新執(zhí)行整個查詢過程,以生成新的結(jié)果集。

技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種數(shù)據(jù)庫結(jié)果集緩存方法及設備,以避免在原始數(shù)據(jù)表發(fā)生改變時,需要重新執(zhí)行整個執(zhí)行計劃,節(jié)省了查詢時間。第一方面,本發(fā)明實施例提供一種數(shù)據(jù)庫結(jié)果集緩存方法,包括:數(shù)據(jù)庫引擎接收數(shù)據(jù)操縱語言DML語句,所述DML語句用于使所述數(shù)據(jù)庫引擎對原始數(shù)據(jù)表進行DML操作;所述數(shù)據(jù)庫引擎執(zhí)行所述DML操作后,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。在第一方面的第一種可能的實現(xiàn)方式中,所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,包括:所述數(shù)據(jù)庫引擎立即喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃;或,在滿足預設的觸發(fā)條件時,所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃。結(jié)合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述數(shù)據(jù)庫引擎接收數(shù)據(jù)操縱語言DML語句之前,還包括:對所述原始數(shù)據(jù)表執(zhí)行所述執(zhí)行計劃,獲得所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中。根據(jù)第一方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述執(zhí)行計劃包括結(jié)構(gòu)化查詢語言SQL查詢語句。第二方面,本發(fā)明實施例提供一種數(shù)據(jù)庫引擎,包括:接收模塊,用于接收數(shù)據(jù)操縱語言DML語句,所述DML語句用于使所述數(shù)據(jù)庫引擎對原始數(shù)據(jù)表進行DML操作;處理模塊,用于執(zhí)行所述DML操作后,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。在第二方面的第一種可能的實現(xiàn)方式中,所述處理模塊具體用于:立即喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃;或,在滿足預設的觸發(fā)條件時,喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃。結(jié)合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述處理模塊還用于:對所述原始數(shù)據(jù)表執(zhí)行所述執(zhí)行計劃,獲得所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中。根據(jù)第二方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述執(zhí)行計劃包括結(jié)構(gòu)化查詢語言SQL查詢語句。本發(fā)明實施例提供的數(shù)據(jù)庫結(jié)果集緩存方法及設備,通過數(shù)據(jù)庫引擎接收DML語句,對原始數(shù)據(jù)表進行DML操作;所述數(shù)據(jù)庫引擎執(zhí)行所述DML操作后,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。從而在原始數(shù)據(jù)表發(fā)生改變時,可以不用重新執(zhí)行整個執(zhí)行計劃,而是在中間執(zhí)行結(jié)果的基礎上再次執(zhí)行所述執(zhí)行計劃,節(jié)省了查詢時間。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法實施例一的流程圖;圖2為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法實施例二的流程圖;圖3為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法中客戶端的執(zhí)行計劃的示意圖;圖4為本發(fā)明數(shù)據(jù)庫引擎實施例一的結(jié)構(gòu)示意圖。具體實施方式為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。圖1為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法實施例一的流程圖。如圖1所示,本實施例提供的方法可以包括:S101、數(shù)據(jù)庫引擎接收數(shù)據(jù)操縱語言(DataManipulationLanguage,簡稱:DML)語句,所述DML語句用于使所述數(shù)據(jù)庫引擎對原始數(shù)據(jù)表進行DML操作。DML語句具體可以用于對原始數(shù)據(jù)表進行更新、插入或刪除操作,本實施例以對原始數(shù)據(jù)表插入一條新記錄為例進行說明。數(shù)據(jù)庫引擎在接收到DML語句時,會根據(jù)DML語句對原始數(shù)據(jù)表進行插入操作。S102、所述數(shù)據(jù)庫引擎執(zhí)行所述DML操作,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中??梢岳斫獾氖?,若判斷獲知緩存區(qū)中沒有存儲之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,可以不執(zhí)行操作。在實際應用過程中,所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃可以包括兩種方式:第一種方式為所述數(shù)據(jù)庫引擎立即喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃;第二種方式為在滿足預設的觸發(fā)條件時,所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃。本實施例不對此進行限制。本實施例提供的數(shù)據(jù)庫結(jié)果集緩存方法,通過數(shù)據(jù)庫引擎接收DML語句,對原始數(shù)據(jù)表進行DML操作;所述數(shù)據(jù)庫引擎執(zhí)行所述DML操作后,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則所述數(shù)據(jù)庫引擎喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。從而在原始數(shù)據(jù)表發(fā)生改變時,可以不用重新執(zhí)行整個執(zhí)行計劃,而是在中間執(zhí)行結(jié)果的基礎上再次執(zhí)行所述執(zhí)行計劃,節(jié)省了查詢時間。圖2為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法實施例二的流程圖。如圖2所示,在上述實施例的基礎上,在S101之前,本實施例提供的方法還可以包括:S201、對所述原始數(shù)據(jù)表執(zhí)行所述執(zhí)行計劃,獲得所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中。具體地,所述執(zhí)行計劃可以包括所述SQL查詢語句。在本實施例中,所述執(zhí)行計劃可以包括兩種工作狀態(tài),運行狀態(tài)和睡眠狀態(tài),數(shù)據(jù)庫引擎在執(zhí)行完所述執(zhí)行計劃后,會將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),而不是直接結(jié)束所述執(zhí)行計劃,同時由于在緩存區(qū)中存儲了中間執(zhí)行結(jié)果和第一最終執(zhí)行結(jié)果,因此,若原始數(shù)據(jù)表發(fā)生改變,數(shù)據(jù)庫引擎可以喚醒之前設置為所述睡眠狀態(tài)的所述執(zhí)行計劃,即,使所述執(zhí)行計劃處于運行狀態(tài),并在所述中間執(zhí)行結(jié)果以及改變后的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與改變后的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。本實施例提供的數(shù)據(jù)庫結(jié)果集緩存方法,通過在第一次執(zhí)行所述執(zhí)行計劃時,獲得所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中,使得后續(xù)若原始數(shù)據(jù)表發(fā)生改變,所述數(shù)據(jù)庫引擎可以喚醒所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果及改變后的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,并將得到的第二最終執(zhí)行結(jié)果存儲在所述緩存區(qū)中,在用戶再次發(fā)起相同的執(zhí)行計劃時,可以直接從緩存區(qū)中獲取最終結(jié)果,而不用重新執(zhí)行整個執(zhí)行計劃,節(jié)省了查詢時間。下面以一個具體的實施例對數(shù)據(jù)庫結(jié)果集緩存方法進行詳細說明。圖3為本發(fā)明數(shù)據(jù)庫結(jié)果集緩存方法中客戶端的執(zhí)行計劃的示意圖。如圖3所示,在本實施例中,假設執(zhí)行計劃為對索引掃描(customer)表和全表掃描(sales)表進行哈希連接(HashJoin)。本領域技術(shù)人員可知,HashJoin包括buildhash和hashjoin兩個步驟,其中,buildhash是針對customer表進行的操作,而hashjoin是對customer表和sales表進行的操作。buildhash的結(jié)果即為本實施例中所述的中間執(zhí)行結(jié)果,hashjoin的結(jié)果即為本實施例中所述的第一最終執(zhí)行結(jié)果,圖3中的結(jié)果集即為本實施例中所述的第一最終執(zhí)行結(jié)果或第二最終執(zhí)行結(jié)果。假設客戶端A第一次發(fā)起SQL查詢語句,數(shù)據(jù)庫引擎在接收到SQL查詢語句后,分析SQL語句文本,檢查緩存區(qū)中是否存在與該SQL語句文本的散列鍵值對應的第一最終執(zhí)行結(jié)果,若存在,則數(shù)據(jù)庫引擎從緩存區(qū)中取出該第一最終執(zhí)行結(jié)果并返回給客戶端A;若不存在,則數(shù)據(jù)庫引擎執(zhí)行與所述SQL查詢語句對應的執(zhí)行計劃,獲得所述執(zhí)行計劃的中間執(zhí)行結(jié)果和第一最終執(zhí)行結(jié)果,并將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中,向客戶端A返回第一最終執(zhí)行結(jié)果。若客戶端B向sales表中插入了一條記錄,數(shù)據(jù)庫引擎執(zhí)行完插入操作后,會判斷緩存區(qū)中是否存在所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,若存在,則喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,將該記錄上推至HashJoin的節(jié)點做hashjoin操作,而不需要重新進行buildhash,也就是說,由于customer表沒有改變,即,buildhash的結(jié)果沒有改變,而由于對sales表進行了插入操作,因此,只需要對customer表和sales表再次執(zhí)行hashjoin操作,以得到與插入了一條記錄的sales表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。若客戶端A再次發(fā)起了相同的SQL查詢語句,則數(shù)據(jù)庫引擎可以直接從緩存區(qū)中獲取所述第二最終執(zhí)行結(jié)果返回給客戶端A。本實施例提供的方法,通過在原始數(shù)據(jù)表發(fā)生變化后,數(shù)據(jù)庫引擎判斷緩存區(qū)中是否存在相應的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,若存在,則在所述中間執(zhí)行結(jié)果的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到第二最終執(zhí)行結(jié)果,在客戶端第二次發(fā)起相同的SQL查詢語句時,可以直接從緩存區(qū)中獲取所述第二最終執(zhí)行結(jié)果返回給客戶端,節(jié)省了查詢時間。圖4為本發(fā)明數(shù)據(jù)庫引擎實施例一的結(jié)構(gòu)示意圖。如圖4所示,本實施例提供的數(shù)據(jù)庫引擎可以包括:接收模塊11,用于接收數(shù)據(jù)操縱語言DML語句,所述DML語句用于使所述數(shù)據(jù)庫引擎對原始數(shù)據(jù)表進行DML操作;處理模塊12,用于執(zhí)行所述DML操作后,若判斷獲知緩存區(qū)中存儲有之前對所述原始數(shù)據(jù)表執(zhí)行一執(zhí)行計劃而獲得的第一最終執(zhí)行結(jié)果以及中間執(zhí)行結(jié)果,則喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃,并在所述中間執(zhí)行結(jié)果以及經(jīng)過DML操作的原始數(shù)據(jù)表的基礎上再次執(zhí)行所述執(zhí)行計劃,以得到與經(jīng)過DML操作的原始數(shù)據(jù)表對應的第二最終執(zhí)行結(jié)果并存儲在所述緩存區(qū)中。其中,所述處理模塊12具體可以用于立即喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃;或,在滿足預設的觸發(fā)條件時,喚醒被設置為睡眠狀態(tài)的所述執(zhí)行計劃。所述處理模塊12還可以用于對所述原始數(shù)據(jù)表執(zhí)行所述執(zhí)行計劃,獲得所述第一最終執(zhí)行結(jié)果以及所述中間執(zhí)行結(jié)果,將所述執(zhí)行計劃的工作狀態(tài)設置為睡眠狀態(tài),并存儲在所述緩存區(qū)中。所述執(zhí)行計劃包括結(jié)構(gòu)化查詢語言SQL查詢語句。本實施例提供的數(shù)據(jù)庫引擎,可用于執(zhí)行上述方法實施例的技術(shù)方案,其原理及技術(shù)效果類似,此處不再贅述。本領域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阜宁县| 枣强县| 廉江市| 庆元县| 赣州市| 西青区| 昭通市| 济阳县| 平武县| 马公市| 山阳县| 峨眉山市| 永仁县| 漳浦县| 额敏县| 甘泉县| 三明市| 保定市| 繁昌县| 尤溪县| 湘乡市| 五原县| 汉川市| 麟游县| 丰台区| 牙克石市| 教育| 嘉善县| 长兴县| 邢台市| 调兵山市| 五河县| 高州市| 墨玉县| 资源县| 葫芦岛市| 通化市| 镇坪县| 吴江市| 土默特右旗| 周口市|