專利名稱:一種查詢結(jié)果處理方法與裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種查詢結(jié)果處理方法與裝置。
背景技術(shù):
隨著現(xiàn)代企業(yè)的迅速發(fā)展,企業(yè)所積累的各種數(shù)據(jù)也隨之劇增。為了便于對(duì)這些海量數(shù)據(jù)進(jìn)行科學(xué)、有效的管理和分析,數(shù)據(jù)倉(cāng)庫(kù)(Data Warehouse) 技術(shù)開始得到廣泛推廣和應(yīng)用。
即席查詢作為數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)前端展現(xiàn)中的一個(gè)重要工具軟件,主要負(fù)責(zé) 業(yè)務(wù)數(shù)據(jù)的提取、分析和展現(xiàn)過程。即席查詢(Ad hoc query )是數(shù)據(jù)庫(kù)應(yīng)用 最普遍的一種查詢,利用數(shù)據(jù)倉(cāng)庫(kù)技術(shù),可以讓用戶隨時(shí)可以面對(duì)數(shù)據(jù)庫(kù), 獲取所希望的數(shù)據(jù)。尤其適合那些數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)(比如管理信息系統(tǒng))的 非IT技術(shù)人員的最終用戶使用。在企業(yè)級(jí)的應(yīng)用中,用戶經(jīng)常需要根據(jù)不同 業(yè)務(wù)條件從數(shù)據(jù)倉(cāng)庫(kù)中提取數(shù)據(jù),而且數(shù)據(jù)倉(cāng)庫(kù)提取數(shù)據(jù)的表非常大,其單 個(gè)表的數(shù)據(jù)量級(jí)可達(dá)幾個(gè)GB,甚至幾十、幾百個(gè)GB。如果采用傳統(tǒng)的直接 查詢方式,其性能和效率非常低,并且展現(xiàn)數(shù)據(jù)非常慢,根本法滿足客戶 需求。因此,為了解決數(shù)據(jù)倉(cāng)庫(kù)提取數(shù)據(jù)的性能瓶頸和數(shù)據(jù)展現(xiàn)效率低的問 題,采用合適的查詢臨時(shí)結(jié)果存儲(chǔ)技術(shù)方案成為必然的趨勢(shì)?,F(xiàn)有技術(shù)中用戶在進(jìn)行即席查詢時(shí),數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)中根據(jù)用戶設(shè)定的查 詢條件直接提取數(shù)據(jù),把每次查詢出來的數(shù)據(jù),在內(nèi)存中建立結(jié)果集存儲(chǔ)。 然后基于內(nèi)容中的結(jié)果集進(jìn)行相關(guān)的分析操作。當(dāng)有新的查詢或者查詢條件 等信息發(fā)生改變,再次從數(shù)據(jù)倉(cāng)庫(kù)中查詢數(shù)據(jù),重新創(chuàng)建內(nèi)存結(jié)果集。但是 由于這種技術(shù)方案將結(jié)果集暫存在內(nèi)存中,內(nèi)存消耗大,容易導(dǎo)致內(nèi)存溢出 的致命錯(cuò)誤;并且由于每個(gè)查詢只對(duì)應(yīng)一個(gè)內(nèi)存結(jié)果集,當(dāng)有多個(gè)用戶并發(fā) 執(zhí)行查詢時(shí),用戶的數(shù)據(jù)會(huì)被相互覆蓋。
為了解決上述方案的問題,業(yè)界對(duì)查詢臨時(shí)結(jié)果存儲(chǔ)技術(shù)方案進(jìn)行了改 進(jìn)。這種方法的結(jié)構(gòu)參見圖1,從數(shù)據(jù)倉(cāng)庫(kù)中查詢出結(jié)果,在每個(gè)用戶進(jìn)行查
詢并得出結(jié)果后,根據(jù)當(dāng)前的查詢用戶ID作標(biāo)識(shí),分別對(duì)應(yīng)每個(gè)用戶建立一 個(gè)臨時(shí)結(jié)果表來存儲(chǔ)該用戶的查詢數(shù)據(jù)。本方法通過建立臨時(shí)結(jié)果表來將查 詢結(jié)果存儲(chǔ)在數(shù)據(jù)庫(kù)中,大大減輕了內(nèi)存的壓力,并且解決了多用戶并發(fā)查 詢時(shí)數(shù)據(jù)被覆蓋的問題。但是這種技術(shù)方案依然有如下缺陷1、 由于是針對(duì)每個(gè)用戶設(shè)立的臨時(shí)結(jié)果表,那么在此方案上,用戶每一 次查詢的時(shí)候都會(huì)把其上次生成的臨時(shí)結(jié)果表覆蓋,導(dǎo)致臨時(shí)結(jié)果表的緩存 作用大大降低、重用性不夠。2、 采用此技術(shù)方案建立的臨時(shí)結(jié)果表只能保存用戶最后一次查詢的結(jié) 果,當(dāng)用戶需要改變查詢條件查看歷史結(jié)果時(shí),由于臨時(shí)結(jié)果表沒有存儲(chǔ)相 應(yīng)的數(shù)據(jù),需要再次查詢數(shù)據(jù)倉(cāng)庫(kù),依然存在查詢效率低的問題。發(fā)明內(nèi)容本發(fā)明一實(shí)施例要解決的技術(shù)問題是提供一種查詢結(jié)果處理方法及裝 置,能夠解決用戶每一次查詢的時(shí)候都會(huì)把她上次生成的臨時(shí)結(jié)果表覆蓋, 導(dǎo)致臨時(shí)結(jié)果表的緩存作用大大降低、重用性不夠的問題。為解決上述技術(shù)問題,本發(fā)明所提供的查詢結(jié)果處理方法實(shí)施例是通過 以下技術(shù)方案實(shí)現(xiàn)的接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);根據(jù)索引值查詢 歷史記錄,若不存在與索引值一致的歷史記錄,則查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索 引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);若存在與索引值一致的歷史 記錄,且該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表存在時(shí),則通過所述的臨時(shí)結(jié)果表查詢 并返回?cái)?shù)據(jù);若存在與索引值一致的歷史記錄,但該索引值對(duì)應(yīng)的臨時(shí)結(jié)果 表不存在時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表并返 回?cái)?shù)據(jù)。對(duì)應(yīng)于上述方法,本發(fā)明實(shí)施例還提供了一種查詢結(jié)果處理裝置,該裝 置包括接收單元,用于接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);
查詢單元,根據(jù)索引值進(jìn)行查詢歷史記錄;判斷單元,用于判斷是否存在與索引值一致的歷史記錄;及判斷出存在 與索引值一致的歷史記錄時(shí),進(jìn)一步判斷是否存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表;處理單元,用于當(dāng)判斷單元判斷出不存在與索引值一致的歷史記錄時(shí),查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);當(dāng) 判斷單元判斷出存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),通過所述的臨時(shí)結(jié) 果表查詢并返回?cái)?shù)據(jù);當(dāng)判斷單元判斷出不存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié) 果表時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。 上述技術(shù)方案中的技術(shù)方案具有如下有益效果本發(fā)明技術(shù)方案首先通過索引值來確實(shí)是否數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行過相同索引值的查詢;并由于該索引值 包括了查詢條件和用戶標(biāo)識(shí),那么查詢的結(jié)果是按照查詢條件和用戶標(biāo)識(shí)共 同分配的;因此若該用戶進(jìn)行過相同索引值的查詢,那么就直接通過臨時(shí)結(jié) 果表返回?cái)?shù)據(jù),而不會(huì)再進(jìn)行相同查詢條件的重復(fù)查詢,并且會(huì)對(duì)不同的查 詢條件針對(duì)每個(gè)用戶創(chuàng)建不同的臨時(shí)結(jié)果表,這樣就避免了用戶每次查詢會(huì) 覆蓋上次查詢數(shù)據(jù)、造成查詢結(jié)果重用性差的問題,從而提高了用戶查詢的 效率。并且由于臨時(shí)結(jié)果表是對(duì)應(yīng)每個(gè)用戶標(biāo)識(shí)的,那么還可以避免不同的 用戶用相同的查詢條件進(jìn)行查詢時(shí)不會(huì)發(fā)生臨時(shí)結(jié)果表寫入沖突的問題。
圖1為現(xiàn)有技術(shù)方法結(jié)構(gòu)圖; 圖2為本發(fā)明實(shí)施例1方法流程圖; 圖3為本發(fā)明實(shí)施例2方法流程圖; 圖4為本發(fā)明實(shí)施例3裝置結(jié)構(gòu)圖; 圖5為本發(fā)明實(shí)施例4裝置結(jié)構(gòu)圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了以下具體方案
實(shí)施例l,參見圖2, 一種查詢結(jié)果處理方法步驟101:接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);其中用戶標(biāo)識(shí)可以為具體的數(shù)字以可以為根據(jù)隨機(jī)算法生成的唯一字符 串等,具體形式并不在本發(fā)明實(shí)施例中進(jìn)行限制,只要能夠區(qū)分用戶身份的 唯一標(biāo)識(shí)就可以。步驟102:判斷是否存在與索引值一致的歷史記錄,即判斷是否存在與查 詢條件與用戶標(biāo)識(shí)同時(shí)一致的歷史記錄;若不存在則執(zhí)行步驟103;若存在則 執(zhí)行步驟104:該步驟所述的歷史記錄是指以前進(jìn)行的每次查詢過程都會(huì)在系統(tǒng)中進(jìn)行 保存,保存的內(nèi)容可以是之前進(jìn)行的查詢條件、用戶標(biāo)識(shí)、執(zhí)行者、執(zhí)行時(shí) 間、臨時(shí)結(jié)果表名等;并且將所述的查詢條件按照結(jié)構(gòu)化的方式存儲(chǔ)。結(jié)構(gòu) 化的方式存儲(chǔ)實(shí)際是把樹狀文件系統(tǒng)的原理應(yīng)用到單個(gè)的文件中,使得單個(gè) 文件也能象文件系統(tǒng)一樣包括更深層次的"子目錄",各個(gè)"目錄,,可以含多個(gè)文 件,把原來需要多個(gè)文件存儲(chǔ)的內(nèi)容按樹狀結(jié)構(gòu)和層次保存到一個(gè)文件中去。 如現(xiàn)有查詢條件A, B, C,按照不同的邏輯關(guān)系可以存儲(chǔ)為不同的查詢條件 格式1、 (AandB ) orC, 2、 Aand(BorC),本實(shí)施例中優(yōu)選結(jié)構(gòu)化的存 儲(chǔ)方式為用xml方式存儲(chǔ),并且可以輸出成XML格式的條件組合字符串,非 常方便進(jìn)行條件集合關(guān)系匹配。歷史記錄是存儲(chǔ)在一個(gè)數(shù)據(jù)庫(kù)表中,存儲(chǔ)的 內(nèi)容可以為歷史記錄索引標(biāo)識(shí)ID,執(zhí)行者,查詢條件,執(zhí)行時(shí)間等。以上 提到的查詢條件特征可以由系統(tǒng)預(yù)置,每個(gè)查詢條件特征對(duì)應(yīng)一個(gè)或一組查 詢條件;查詢條件特征和其對(duì)應(yīng)查詢條件由系統(tǒng)存儲(chǔ)。步驟103:查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建與該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表 并返回?cái)?shù)據(jù),結(jié)束查詢;該步驟中提到的創(chuàng)建索引對(duì)應(yīng)的歷史記錄,也就是說將索引值對(duì)應(yīng)的查 詢條件特征與用戶標(biāo)識(shí)存儲(chǔ),并且存儲(chǔ)查詢到的臨時(shí)結(jié)果表及表名。該步驟中的臨時(shí)結(jié)果表是用來存儲(chǔ)從數(shù)據(jù)倉(cāng)庫(kù)中查詢到的關(guān)于索引值的數(shù)據(jù)。1 )、臨時(shí)結(jié)果表的表名可以由預(yù)置的查詢條件特征與用戶標(biāo)識(shí)組成; 2)、臨時(shí)結(jié)果表的表名還可以由預(yù)置的名稱與預(yù)置的隨機(jī)算法生成一個(gè)唯一的隨機(jī)數(shù)組成;并將所述的臨時(shí)結(jié)果表的表名與所述索引值建立對(duì)應(yīng)關(guān)系表;只要能夠在多用戶同時(shí)查詢同一條件時(shí),產(chǎn)生唯一的臨時(shí)結(jié)果表名,并 且可以根據(jù)查詢條件、用戶標(biāo)識(shí)等內(nèi)容組成的索引值來——對(duì)應(yīng),即每個(gè)用 戶的查詢對(duì)應(yīng)于一個(gè)臨時(shí)結(jié)果表名,都可以作為該方案中臨時(shí)結(jié)果表名的替 代方案,并不限制于上述兩種方法。步驟104:判斷是否存在與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表;若存在則執(zhí)行步 驟105;若不存在則執(zhí)行步驟103;該步驟中的判斷是否存在與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表的方法可以為1) 、當(dāng)使用上述第一種臨時(shí)結(jié)果表名時(shí),通過索引值包括的查詢條件與 用戶標(biāo)識(shí)判斷是否存儲(chǔ)有與所述的索引值對(duì)應(yīng)的臨時(shí)結(jié)果表名,若有則存在 與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表。以上提到的查詢條件特征可以由系統(tǒng)預(yù)置,每個(gè)查詢條件特征唯一的一 個(gè)或一組查詢條件;查詢條件特征和其對(duì)應(yīng)查詢條件由系統(tǒng)存儲(chǔ);并且用戶 標(biāo)識(shí)只對(duì)應(yīng)一個(gè)用戶。2) 、當(dāng)使用上述第二種臨時(shí)結(jié)果表名時(shí),通過索引值及所述的對(duì)應(yīng)關(guān)系 表查詢臨時(shí)結(jié)果表的表名,若查找到則存在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表。以上提到的預(yù)置的名稱可以是由系統(tǒng)預(yù)置的規(guī)則生成,例如可以是一些 索引值,索引值的具體方式可以由實(shí)際情況決定。步驟105:通過所述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù)。該步驟也就是說在臨時(shí)結(jié)果表的范圍內(nèi)查詢索引值對(duì)應(yīng)的數(shù)據(jù),并返回。 實(shí)施例1首先通過索引值來確實(shí)是否數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)行過相同索引值的查詢;并由于該索引值包括了查詢條件和用戶標(biāo)識(shí),那么查詢的結(jié)果是按照查詢條件和用戶標(biāo)識(shí)共同分配的;因此若該用戶進(jìn)行過相同索引值的查詢,那么就直接通過臨時(shí)結(jié)果表返回?cái)?shù)據(jù),而不會(huì)再進(jìn)行相同查詢條件的重復(fù)查詢,并且會(huì)對(duì)不同的查詢條件針對(duì)每個(gè)用戶創(chuàng)建不同的臨時(shí)結(jié)果表,這樣就避免
了用戶每次查詢會(huì)覆蓋上次查詢數(shù)據(jù)、造成查詢結(jié)果重用性差的問題,從而 提高了用戶查詢的效率。并且由于臨時(shí)結(jié)果表是對(duì)應(yīng)每個(gè)用戶標(biāo)識(shí)的,還可 以避免不同的用戶用相同的查詢條件進(jìn)行查詢時(shí)不會(huì)發(fā)生臨時(shí)結(jié)果表寫入沖 突的問題。實(shí)施例2,參見圖3,本發(fā)明實(shí)施例提供的另一種查詢結(jié)果處理方法步驟201:接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);步驟202:判斷是否存在與索引值一致的歷史記錄;若存在則執(zhí)行步驟 203;若不存在則執(zhí)行步驟206:該步驟所述的歷史記錄是指之前進(jìn)行的每次查詢過程都會(huì)在系統(tǒng)中進(jìn)行 保存,可以保存之前進(jìn)行的查詢條件與用戶標(biāo)識(shí);并且將所述的查詢條件4姿 照結(jié)構(gòu)化的方式存儲(chǔ)。步驟203:判斷是否存在與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表;若存在則執(zhí)行步 驟204;若不存在則執(zhí)行步驟205;該步驟中所述的判斷是否存在與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表的方法可以為1 )、臨時(shí)結(jié)果表的表名可以預(yù)置由查詢條件特征與用戶標(biāo)識(shí)組成;通過索引值包括的查詢條件與用戶標(biāo)識(shí)判斷是否存儲(chǔ)有與所述的索引值 對(duì)應(yīng)的臨時(shí)結(jié)果表名,若有則存在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表。以上提到的查詢條件特征可以由系統(tǒng)預(yù)置,每個(gè)查詢條件特征唯一的一 個(gè)或一組查詢條件;查詢條件特征和其對(duì)應(yīng)查詢條件由系統(tǒng)存儲(chǔ);并且用戶 標(biāo)識(shí)只對(duì)應(yīng)一個(gè)用戶。2)、上述實(shí)施例1與實(shí)施例2所述的臨時(shí)結(jié)果表的表名還可以由預(yù)置的 名稱與預(yù)置的隨機(jī)算法生成一個(gè)唯一的隨機(jī)數(shù)組成;并將所述的臨時(shí)結(jié)果表 的表名與所述索引值建立對(duì)應(yīng)關(guān)系表;通過索引值及所述的對(duì)應(yīng)關(guān)系表查詢臨時(shí)結(jié)果表的表名,若查找到則存 在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表。
只要能夠在多用戶并發(fā)時(shí)產(chǎn)生唯一的臨時(shí)結(jié)果表名,并且可以根據(jù)查詢 條件等內(nèi)容組成的索引值來對(duì)應(yīng),都可以作為該方案中臨時(shí)結(jié)果表名的替代 方案,并不限制于上述兩種方法。以上提到的預(yù)置的名稱可以是由系統(tǒng)預(yù)置的規(guī)則生成,例如可以是一些 索引值,索引值的具體方式可以由實(shí)際情況決定。步驟204:通過所述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù),跳出本流程;步驟205:查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并 返回?cái)?shù)據(jù),跳出本流程;步驟206:判斷是否索引值是歷史記錄的子集;若是則執(zhí)行步驟207;若 不是則執(zhí)行步驟205;步驟207:在所述歷史記錄對(duì)應(yīng)的臨時(shí)結(jié)果表的范圍內(nèi)查詢索引值、創(chuàng)建 對(duì)應(yīng)該索引值的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。實(shí)施例2在實(shí)施例1的基礎(chǔ)上進(jìn)行了改進(jìn),當(dāng)判斷得到不存在與索引值 一致的歷史記錄時(shí),進(jìn)一步判斷了索引值是否為歷史記錄的子集;如果索引 值為歷史記錄的子集,就可以根據(jù)已經(jīng)存在的臨時(shí)結(jié)果表范圍內(nèi)來進(jìn)行重新 查詢,由于臨時(shí)結(jié)果表的范圍比整個(gè)數(shù)據(jù)倉(cāng)庫(kù)的范圍要小的多,因此這個(gè)查 詢效率就會(huì)大大提高。為了清楚的表述本發(fā)明實(shí)施例的方案,給出一個(gè)根據(jù) 實(shí)施例2為基礎(chǔ)的實(shí)際例子假設(shè)在經(jīng)營(yíng)分析系統(tǒng)中有省公司市場(chǎng)部用戶A使用即席查詢查詢"新增 彩鈴用戶表"數(shù)據(jù)。用戶A查詢的條件是查詢?nèi)掌?200703和用戶標(biāo)識(shí)=5,查詢生成臨時(shí)結(jié) 果過程如下1 )首先根據(jù)用戶查詢條件信息在該用戶的執(zhí)行歷史記錄中查找是否對(duì)應(yīng) 的i己錄;2) 如找到對(duì)應(yīng)的記錄,取出該記錄。否則,新建一條查詢執(zhí)行記錄,并 記錄有關(guān)信息;3) 如果是在歷史記錄里取出的記錄,則比較該記錄的輸出字段信息是否 和當(dāng)前查詢的輸出字段信息一致。否則直接啟動(dòng)新的查詢。4) 如果各項(xiàng)信息都從歷史記錄中查找到對(duì)應(yīng)的查詢條件,臨時(shí)結(jié)果表存在,直接返回臨時(shí)結(jié)果表數(shù)據(jù);如果臨時(shí)結(jié)果表不存在,則用該臨時(shí)結(jié)果表名重新生成數(shù)據(jù),并返回?cái)?shù)據(jù)。5) 如果無法從歷史記錄中查找到對(duì)應(yīng)的查詢條件,則進(jìn)入的新查詢的過 程。在歷史記錄中,插入本次查詢記錄。6 )當(dāng)用戶A在剛才的查詢條件中增加一個(gè)區(qū)域標(biāo)識(shí)=370的條件,該區(qū) 域標(biāo)識(shí)標(biāo)志可以查詢?nèi)〉臄?shù)據(jù),根據(jù)新的查詢條件信息重新組成新的索引 值,并判斷在歷史記錄中是否有相應(yīng)的記錄。7 )假設(shè)用戶A之前沒有執(zhí)行過查詢?nèi)掌?200703 、用戶標(biāo)識(shí)=5和區(qū)域標(biāo) 識(shí)=370這個(gè)條件組合的查詢,那就會(huì)在歷史記錄中無法查找到剛才的索引值。 然后,判斷當(dāng)前的查詢條件是否是歷史記錄中某個(gè)記錄的子集。8)查詢?nèi)掌?200703、用戶標(biāo)識(shí)=5和區(qū)域標(biāo)識(shí)=370這個(gè)條件產(chǎn)生的結(jié) 果會(huì)被查詢?nèi)掌?200703和用戶標(biāo)識(shí)=5這個(gè)條件產(chǎn)生的結(jié)果所包含。因此, 系統(tǒng)只需要在剛才生成的臨時(shí)結(jié)果表中使用區(qū)域標(biāo)識(shí)=370這個(gè)條件作二次查 詢就能快速得到用戶需要的結(jié)果。而用戶標(biāo)識(shí)=6的用戶B,當(dāng)其用查詢?nèi)掌?200703和區(qū)域標(biāo)識(shí)=370條件 查詢時(shí),就無法看到用戶標(biāo)識(shí)為5的用戶A以同樣查詢條件的查詢到的臨時(shí) 結(jié)果表,用戶B只能看到以其用戶標(biāo)識(shí)6、查詢?nèi)掌?200703和區(qū)域標(biāo)識(shí)=370 為查詢條件進(jìn)行查詢的臨時(shí)結(jié)果表,保證了在查詢時(shí)盡管查詢?nèi)掌谂c區(qū)域標(biāo) 識(shí)相同,但是不會(huì)發(fā)生臨時(shí)結(jié)果表寫入沖突問題。實(shí)施例3,為了能夠?qū)崿F(xiàn)實(shí)施例1的方法,本發(fā)明實(shí)施例還提供了一種查 詢結(jié)果處理裝置,參見圖4,該裝置包括接收單元301,用于接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);查詢單元302,根據(jù)索引值進(jìn)行查詢歷史記錄;判斷單元303,用于判斷是否存在與索引值一致的歷史記錄;及判斷出存 在與索引值一致的歷史記錄時(shí),進(jìn)一步判斷是否存在與所述索引值對(duì)應(yīng)的臨
時(shí)結(jié)果表;
處理單元304,用于當(dāng)判斷單元303判斷出不存在與索引值一致的歷史記 錄時(shí),查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù) 據(jù);當(dāng)判斷單元303判斷出存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),通過所 述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù);當(dāng)判斷單元303判斷出不存在與所述索引 值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的臨時(shí)結(jié) 果表并返回?cái)?shù)據(jù)。
實(shí)施例4,對(duì)應(yīng)于實(shí)施例2,在實(shí)施例3的基礎(chǔ)上,本發(fā)明實(shí)施例還提供 了一種查詢結(jié)果處理裝置,該裝置包括
接收單元401,用于接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);
查詢單元402,根據(jù)索引值進(jìn)行查詢歷史記錄;
判斷單元403,用于判斷是否存在與索引值一致的歷史記錄;及判斷出存 在與索引值一致的歷史記錄時(shí),進(jìn)一步判斷是否存在與所述索引值對(duì)應(yīng)的臨 時(shí)結(jié)果表;用于在判斷出不存在與所述的索引值一致的記錄時(shí),判斷是否索 引值是否為歷史記錄的子集;用于當(dāng)判斷出索引值是歷史記錄的子集時(shí),進(jìn) 一步判斷是否存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表;
處理單元404,用于當(dāng)判斷單元403判斷出不存在與索引值一致的歷史記 錄時(shí),查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù) 據(jù);當(dāng)判斷單元403判斷出存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),通過所 述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù);當(dāng)判斷單元403判斷出不存在與所述索引 值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的臨時(shí)結(jié) 果表并返回?cái)?shù)據(jù);用于在判斷單元403判斷出索引值不是歷史記錄的子集衧, 再查詢數(shù)據(jù)倉(cāng)庫(kù)、創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù); 用于在判斷單元403判斷出存在歷史記錄對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),在臨時(shí)結(jié)果 表的范圍內(nèi)查詢索引值、創(chuàng)建對(duì)應(yīng)該索引值的歷史記錄、臨時(shí)結(jié)果表并返回 數(shù)據(jù)。
通過對(duì)本發(fā)明實(shí)施例的具體描述,可以看出本發(fā)明實(shí)施例的技術(shù)方案具 有如下有益效果本發(fā)明技術(shù)方案首先通過索引值來確實(shí)是否數(shù)據(jù)倉(cāng)庫(kù)中進(jìn)
行過相同索引值的查詢;并由于該索引值包括了查詢條件和用戶標(biāo)識(shí),那么 查詢的結(jié)果是按照查詢條件和用戶標(biāo)識(shí)共同分配的;因此若該用戶進(jìn)行過相 同索引值的查詢,那么就直接通過臨時(shí)結(jié)果表返回?cái)?shù)據(jù),而不會(huì)再進(jìn)行相同 查詢條件的重復(fù)查詢,并且會(huì)對(duì)不同的查詢條件針對(duì)每個(gè)用戶創(chuàng)建不同的臨 時(shí)結(jié)果表,這樣就避免了用戶每次查詢會(huì)覆蓋上次查詢數(shù)據(jù)、造成查詢結(jié)果 重用性差的問題,從而提高了用戶查詢的效率。并且由于臨時(shí)結(jié)果表是對(duì)應(yīng) 每個(gè)用戶標(biāo)識(shí)的,還可以避免不同的用戶用相同的查詢條件進(jìn)行查詢時(shí)不會(huì) 發(fā)生臨時(shí)結(jié)果表寫入沖突的問題。并且在實(shí)施例2基礎(chǔ)上,當(dāng)判斷得到不存在與索引值一致的歷史記錄時(shí), 進(jìn)一步判斷了索引值是否為歷史記錄的子集;那么只要索引值為歷史記錄的 子集,就可以根據(jù)已經(jīng)存在的臨時(shí)結(jié)果表范風(fēng)內(nèi)來進(jìn)行重新查詢,由于臨時(shí) 結(jié)果表的范圍比整個(gè)數(shù)據(jù)倉(cāng)庫(kù)的范圍要小的多,那么將大大提高查詢效率就。是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī) 可讀存儲(chǔ)介質(zhì)中。上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。以上對(duì)本發(fā)明所提供的一種查詢結(jié)果處理方法及裝置進(jìn)行了詳細(xì)介紹, 對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實(shí)施例的思想,在具體實(shí)施方式
及 應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明 的限制。
權(quán)利要求
1、一種查詢結(jié)果處理方法,其特征在于,該方法包括接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);根據(jù)索引值查詢歷史記錄,若不存在與索引值一致的歷史記錄,則查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);若存在與索引值一致的歷史記錄,且該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表存在時(shí),則通過所述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù);若存在與索引值一致的歷史記錄,但該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表不存在時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的查詢結(jié)果處理方法,其特征在于,若不存在與 所述索引值一致的記錄,并且索引值不是歷史記錄的子集時(shí),再查詢數(shù)據(jù)倉(cāng) 庫(kù)、創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);若不存在與索 引值一致的記錄,但索引值是歷史記錄的子集且該歷史記錄對(duì)應(yīng)的臨時(shí)結(jié)果 表存在時(shí)則在臨時(shí)結(jié)果表的范圍內(nèi)查詢索引值、創(chuàng)建對(duì)應(yīng)該索引值的歷史記 錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。
3、 根據(jù)權(quán)利要求1或2所述的查詢結(jié)果處理方法,其特征在于,所述臨 時(shí)結(jié)果表的表名包括查詢條件特征與用戶標(biāo)識(shí);確定存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表的方法為通過索引值包括的 查詢條件與用戶標(biāo)識(shí)判斷是否存儲(chǔ)有與所述的索引值對(duì)應(yīng)的臨時(shí)結(jié)果表名, 若有則存在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表。
4、 根據(jù)權(quán)利要求1或2所述的查詢結(jié)果處理方法,其特征在于,所述臨時(shí)結(jié)果表的表名由預(yù)置的名稱與預(yù)置的隨機(jī)算法生成一個(gè)唯一的 隨機(jī)數(shù)組成;并將所述的臨時(shí)結(jié)果表的表名與所述索引值建立對(duì)應(yīng)關(guān)系表;確定存在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果表的方法為通過索引值及所述的對(duì) 應(yīng)關(guān)系表查詢臨時(shí)結(jié)果表的表名,若查找到則存在與索引值對(duì)應(yīng)的臨時(shí)結(jié)果 表。
5、 根據(jù)權(quán)利要求1或2所述的查詢結(jié)果處理方法,其特征在于, 所述的歷史記錄包括的查詢條件按照結(jié)構(gòu)化的方式存儲(chǔ)。
6、 一種查詢結(jié)果處理裝置,其特征在于,該裝置包括接收單元,用于接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí); 查詢單元,根據(jù)索引值進(jìn)行查詢歷史記錄;判斷單元,用于判斷是否存在與索引值一致的歷史記錄;及判斷出存在 與索引值一致的歷史記錄時(shí),進(jìn)一步判斷是否存在與所述索引值對(duì)應(yīng)的臨時(shí) 結(jié)果表;處理單元,用于當(dāng)判斷單元判斷出不存在與索引值一致的歷史記錄時(shí), 查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);當(dāng) 判斷單元判斷出存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),通過所述的臨時(shí)結(jié) 果表查詢并返回?cái)?shù)據(jù);當(dāng)判斷單元判斷出不存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié) 果表時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表并返回^t據(jù)。
7、 根據(jù)權(quán)利要求6所述的查詢結(jié)果處理裝置,其特征在于,判斷單元進(jìn)一步用于在判斷出不存在與所述的索引值一致的記錄時(shí),判 斷是否索引值是否為歷史記錄的子集;用于當(dāng)判斷出索引值是歷史記錄的子 集時(shí),進(jìn)一步判斷是否存在與所述索引值對(duì)應(yīng)的臨時(shí)結(jié)果表;處理單元進(jìn)一步用于在判斷單元判斷出索引值不是歷史記錄的子集時(shí), 再查詢數(shù)據(jù)倉(cāng)庫(kù)、創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù); 用于在判斷單元判斷出存在歷史記錄對(duì)應(yīng)的臨時(shí)結(jié)果表時(shí),在臨時(shí)結(jié)果表的 范圍內(nèi)查詢索引值、創(chuàng)建對(duì)應(yīng)該索引值的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。
8、 根據(jù)權(quán)利要求6或7所述的查詢結(jié)果處理裝置,其特征在于, 所述的歷史記錄包括的查詢條件按照結(jié)構(gòu)化的方式存儲(chǔ)。
全文摘要
本發(fā)明公開了一種查詢結(jié)果處理方法,該方法包括接收查詢索引值,該索引值包括查詢條件與用戶標(biāo)識(shí);若不存在與索引值一致的歷史記錄,則查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建該索引值對(duì)應(yīng)的歷史記錄、臨時(shí)結(jié)果表并返回?cái)?shù)據(jù);若存在與索引值一致的歷史記錄,且該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表存在時(shí),則通過所述的臨時(shí)結(jié)果表查詢并返回?cái)?shù)據(jù);若存在與索引值一致的歷史記錄,但該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表不存在時(shí),則重新查詢數(shù)據(jù)倉(cāng)庫(kù),創(chuàng)建與該索引值對(duì)應(yīng)的臨時(shí)結(jié)果表并返回?cái)?shù)據(jù)。本發(fā)明還提供了一種查詢結(jié)果處理裝置,該裝置包括接收單元、查詢單元、判斷單元和處理單元。本發(fā)明避免了用戶每次查詢會(huì)覆蓋上次查詢數(shù)據(jù)、造成查詢結(jié)果重用性差的問題,提高了查詢的效率。
文檔編號(hào)G06F17/30GK101127048SQ20071014203
公開日2008年2月20日 申請(qǐng)日期2007年8月20日 優(yōu)先權(quán)日2007年8月20日
發(fā)明者余悅挺 申請(qǐng)人:華為技術(shù)有限公司