亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

數(shù)據(jù)查詢處理方法及裝置與流程

文檔序號(hào):11177158閱讀:790來(lái)源:國(guó)知局
數(shù)據(jù)查詢處理方法及裝置與流程

本發(fā)明涉及數(shù)據(jù)處理技術(shù),具體而言,涉及一種數(shù)據(jù)查詢處理方法及裝置。



背景技術(shù):

隨著互聯(lián)網(wǎng)的迅猛發(fā)展,越來(lái)越多的互聯(lián)網(wǎng)服務(wù)器面臨高并發(fā)、海量訪問查詢的問題。為了解決這種問題,目前主要有兩種解決方法,一種是采用分布式存儲(chǔ)的硬件式解決方案;另一種是采用多線程操作的軟件式解決方案。但分布式存儲(chǔ)將會(huì)帶來(lái)存儲(chǔ)成本的增加;而多線程操作在數(shù)據(jù)查詢過程中,常會(huì)出現(xiàn)數(shù)據(jù)反饋混亂甚至丟失的情況。



技術(shù)實(shí)現(xiàn)要素:

有鑒于此,本發(fā)明提供一種數(shù)據(jù)查詢處理方法及裝置,能夠提高數(shù)據(jù)查詢處理效率。

本發(fā)明的其他特性和優(yōu)點(diǎn)將通過下面的詳細(xì)描述變得顯然,或部分地通過本發(fā)明的實(shí)踐而習(xí)得。

根據(jù)本發(fā)明的一方面,提供了一種數(shù)據(jù)查詢處理方法,包括:接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求;為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程;利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù);當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢;將所述數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入所述緩存中;通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取所述緩存;以及當(dāng)各數(shù)據(jù)查詢線程從所述緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的所述數(shù)據(jù)返回給發(fā)送所述數(shù)據(jù)查詢請(qǐng)求的客戶端。

根據(jù)本發(fā)明的一實(shí)施方式,該方法還包括:當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),所述數(shù)據(jù)查詢線程進(jìn)入等待狀態(tài)。

根據(jù)本發(fā)明的一實(shí)施方式,該方法還包括:當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),從所述緩存中讀取所述數(shù)據(jù),并將讀取到的所述數(shù)據(jù)返回給發(fā)送所述數(shù)據(jù)查詢請(qǐng)求的客戶端。

根據(jù)本發(fā)明的一實(shí)施方式,在為所述數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢之前,該方法還包括:將所述數(shù)據(jù)查詢請(qǐng)求加入到一查詢隊(duì)列中;將從所述查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求;以及根據(jù)所述數(shù)據(jù)庫(kù)查詢請(qǐng)求,為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢。

根據(jù)本發(fā)明的一實(shí)施方式,將從所述查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求包括:當(dāng)所述查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求數(shù)量達(dá)到一預(yù)設(shè)閾值時(shí),將所述數(shù)據(jù)查詢請(qǐng)求從所述查詢隊(duì)列中取出并放置于一取數(shù)隊(duì)列中;將所述取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求。

根據(jù)本發(fā)明的一實(shí)施方式,將從所述查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求還包括:利用一取數(shù)線程,將所述取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為所述數(shù)據(jù)庫(kù)查詢請(qǐng)求。

根據(jù)本發(fā)明的一實(shí)施方式,所述數(shù)據(jù)庫(kù)查詢請(qǐng)求為基于sql的查詢請(qǐng)求。

根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)查詢處理裝置,包括:請(qǐng)求接收模塊,用于接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求;線程分配模塊,用于為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程;緩存判斷模塊,用于利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù);數(shù)據(jù)庫(kù)查詢模塊,用于當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢;緩存寫入模塊,用于將所述數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入所述緩存中;線程通 知模塊,用于通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取所述緩存;以及請(qǐng)求響應(yīng)模塊,用于當(dāng)各數(shù)據(jù)查詢線程從所述緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的所述數(shù)據(jù)返回給發(fā)送所述數(shù)據(jù)查詢請(qǐng)求的客戶端。

根據(jù)本發(fā)明的一實(shí)施方式,所述緩存判斷模塊還用于當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),通知所述數(shù)據(jù)查詢線程進(jìn)入等待狀態(tài)。

根據(jù)本發(fā)明的一實(shí)施方式,所述請(qǐng)求響應(yīng)模塊還用于當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),從所述緩存中讀取所述數(shù)據(jù),并將讀取到的所述數(shù)據(jù)返回給發(fā)送所述數(shù)據(jù)查詢請(qǐng)求的客戶端。

根據(jù)本發(fā)明的一實(shí)施方式,該裝置還包括:隊(duì)列加入模塊和查詢生成模塊;其中所述隊(duì)列加入模塊用于在所述數(shù)據(jù)庫(kù)查詢模塊為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢;所述查詢生成模塊用于將從所述查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求;所述數(shù)據(jù)庫(kù)查詢模塊還用于根據(jù)所述數(shù)據(jù)庫(kù)查詢請(qǐng)求,為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢。

根據(jù)本發(fā)明的一實(shí)施方式,所述查詢生成模塊包括:請(qǐng)求數(shù)量判斷子模塊,用于判斷所述查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求數(shù)量是否達(dá)到一預(yù)設(shè)閾值;查詢請(qǐng)求取出子模塊,用于當(dāng)所述請(qǐng)求數(shù)量判斷子模塊判斷所述查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求數(shù)量達(dá)到所述預(yù)設(shè)閾值時(shí),將所述數(shù)據(jù)查詢請(qǐng)求從所述查詢隊(duì)列中取出并放置于一取數(shù)隊(duì)列中;以及查詢請(qǐng)求生成子模塊,用于將所述取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求。

根據(jù)本發(fā)明的一實(shí)施方式,所述查詢請(qǐng)求生成子模塊還用于利用一取數(shù)線程,將所述取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為所述數(shù)據(jù)庫(kù)查詢請(qǐng)求。

根據(jù)本發(fā)明的一實(shí)施方式,所述數(shù)據(jù)庫(kù)查詢請(qǐng)求為基于sql的查詢請(qǐng)求。

根據(jù)本發(fā)明的數(shù)據(jù)查詢處理方法,在采用多線程的基礎(chǔ)上,利用緩 存作為存儲(chǔ)中介,將從數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果存儲(chǔ)于緩存中,并通知所有線程來(lái)讀取緩存,確定是否有其待查詢的數(shù)據(jù)。這樣的方法可以避免相關(guān)技術(shù)中多線程反饋無(wú)法直接對(duì)應(yīng)到相應(yīng)客戶端的混亂問題,同時(shí)又充分地發(fā)揮了多線程并行操作的高效率。此外,因?yàn)榫彺嬷写鎯?chǔ)數(shù)據(jù)查詢結(jié)果也是一種自我學(xué)習(xí),可以減少相同查詢需求的重復(fù)查詢操作,進(jìn)一步提高了查詢效率。

應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明。

附圖說明

通過參照附圖詳細(xì)描述其示例實(shí)施例,本發(fā)明的上述和其它目標(biāo)、特征及優(yōu)點(diǎn)將變得更加顯而易見。

圖1是根據(jù)一示例性實(shí)施方式示出的一種數(shù)據(jù)查詢處理方法的流程圖。

圖2是根據(jù)一示例性實(shí)施方式示出的另一種數(shù)據(jù)查詢處理方法的流程圖。

圖3是根據(jù)一示例性實(shí)施方式示出的一種數(shù)據(jù)查詢處理裝置的框圖。

圖4是根據(jù)一示例性實(shí)施方式示出的另一種數(shù)據(jù)查詢處理裝置的框圖。

圖5是根據(jù)一示例性實(shí)施方式示出的再一種數(shù)據(jù)查詢處理裝置的框圖。

具體實(shí)施方式

現(xiàn)在將參考附圖更全面地描述示例實(shí)施方式。然而,示例實(shí)施方式能夠以多種形式實(shí)施,且不應(yīng)被理解為限于在此闡述的范例;相反,提供這些實(shí)施方式使得本發(fā)明將更加全面和完整,并將示例實(shí)施方式的構(gòu)思全面地傳達(dá)給本領(lǐng)域的技術(shù)人員。附圖僅為本發(fā)明的示意性圖解,并非一定是按比例繪制。圖中相同的附圖標(biāo)記表示相同或類似的部分,因而將省略對(duì)它們的重復(fù)描述。

此外,所描述的特征、結(jié)構(gòu)或特性可以以任何合適的方式結(jié)合在一個(gè)或更多實(shí)施方式中。在下面的描述中,提供許多具體細(xì)節(jié)從而給出對(duì)本發(fā)明的實(shí)施方式的充分理解。然而,本領(lǐng)域技術(shù)人員將意識(shí)到,可以實(shí)踐本發(fā)明的技術(shù)方案而省略所述特定細(xì)節(jié)中的一個(gè)或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細(xì)示出或描述公知結(jié)構(gòu)、方法、裝置、實(shí)現(xiàn)或者操作以避免喧賓奪主而使得本發(fā)明的各方面變得模糊。

圖1是根據(jù)一示例性實(shí)施方式示出的一種數(shù)據(jù)查詢處理方法的流程圖。該方法可以由服務(wù)器來(lái)實(shí)施,如圖1所示,數(shù)據(jù)查詢處理方法10包括:

在步驟s102中,接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求。

例如,服務(wù)器接收一個(gè)客戶端或多個(gè)客戶端發(fā)送的一個(gè)或多個(gè)數(shù)據(jù)查詢請(qǐng)求。當(dāng)在某一時(shí)刻,數(shù)據(jù)訪問量比較大,服務(wù)器接收到多個(gè)數(shù)據(jù)查詢請(qǐng)求時(shí),稱之為高并發(fā)數(shù)據(jù)請(qǐng)求。

在步驟s104中,為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)數(shù)據(jù)查詢線程。

每收到一個(gè)數(shù)據(jù)查詢請(qǐng)求,則為該數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程。當(dāng)同時(shí)收到多個(gè)數(shù)據(jù)查詢請(qǐng)求時(shí),則分別為多個(gè)數(shù)據(jù)查詢請(qǐng)求分配多個(gè)數(shù)據(jù)查詢線程。通過多線程操作,可同時(shí)并行處理多個(gè)數(shù)據(jù)查詢請(qǐng)求,充分發(fā)揮多線程的工作效率,加快數(shù)據(jù)查詢的處理速度。需要說明的是,本領(lǐng)域技術(shù)人員應(yīng)理解,下文中提到的各數(shù)據(jù)查詢線程執(zhí)行的操作均為并行的操作。

在步驟s106中,利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所查詢的數(shù)據(jù);如果有,則進(jìn)入步驟s108;否則,進(jìn)入步驟s110。

該緩存可以設(shè)置于服務(wù)器中,也可以設(shè)置在服務(wù)器之外,作為一個(gè)獨(dú)立的物理實(shí)體。

在步驟s108中,從該緩存中讀取該數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù),并將讀取到的該數(shù)據(jù)返回給發(fā)送該數(shù)據(jù)查詢請(qǐng)求的客戶端。

該緩存中存儲(chǔ)有部分地待查詢數(shù)據(jù),因此如果當(dāng)該數(shù)據(jù)查詢請(qǐng)求所 請(qǐng)求查詢的數(shù)據(jù)存儲(chǔ)于該緩存中,則可以直接從緩存中讀取數(shù)據(jù),并返回給客戶端,從而避免了對(duì)數(shù)據(jù)庫(kù)的查詢操作。未在緩存中取得其對(duì)應(yīng)的查詢數(shù)據(jù)的數(shù)據(jù)查詢線程進(jìn)入等待狀態(tài)。

在步驟s110中,為該數(shù)據(jù)查詢請(qǐng)求在數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢。

在步驟s112中,將該數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入緩存中。

之后數(shù)據(jù)查詢結(jié)果可以直接存儲(chǔ)于緩存中,從而使得待下次查詢時(shí),如果有相同的查詢需求,則可以直接從緩存中讀取數(shù)據(jù)并返回給客戶端。

在步驟s114中,通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取緩存。

例如可以使用java語(yǔ)言中的notifyall()函數(shù)通知所有數(shù)據(jù)查詢線程。

在步驟s116中,當(dāng)各數(shù)據(jù)查詢線程從緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所述請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的數(shù)據(jù)返回給發(fā)送該數(shù)據(jù)查詢請(qǐng)求的客戶端。

本發(fā)明的數(shù)據(jù)查詢處理方法10在采用多線程的基礎(chǔ)上,利用緩存作為存儲(chǔ)中介,將從數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果存儲(chǔ)于緩存中,并通知所有線程來(lái)讀取緩存,確定是否有其待查詢的數(shù)據(jù)。這樣的方法可以避免相關(guān)技術(shù)中多線程反饋無(wú)法直接對(duì)應(yīng)到相應(yīng)客戶端的混亂問題,同時(shí)又充分地發(fā)揮了多線程并行操作的高效率。此外,因?yàn)榫彺嬷写鎯?chǔ)數(shù)據(jù)查詢結(jié)果也是一種自我學(xué)習(xí),可以減少相同查詢需求的重復(fù)查詢操作,進(jìn)一步提高了查詢效率。

應(yīng)清楚地理解,本公開描述了如何形成和使用特定示例,但本公開的原理不限于這些示例的任何細(xì)節(jié)。相反,基于本公開公開的內(nèi)容的教導(dǎo),這些原理能夠應(yīng)用于許多其它實(shí)施方式。

圖2是根據(jù)一示例性實(shí)施方式示出的另一種數(shù)據(jù)查詢處理方法的流程圖。該方法可以由服務(wù)器來(lái)實(shí)施,如圖2所示,數(shù)據(jù)查詢處理方法20包括:

在步驟s202中,接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求。

例如,服務(wù)器接收一個(gè)客戶端或多個(gè)客戶端發(fā)送的一個(gè)或多個(gè)數(shù)據(jù) 查詢請(qǐng)求。當(dāng)在某一時(shí)刻,數(shù)據(jù)訪問量比較大,服務(wù)器接收到多個(gè)數(shù)據(jù)查詢請(qǐng)求時(shí),稱之為高并發(fā)數(shù)據(jù)請(qǐng)求。

在步驟s204中,為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程。

每收到一個(gè)數(shù)據(jù)查詢請(qǐng)求,則為該數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程。當(dāng)同時(shí)收到多個(gè)數(shù)據(jù)查詢請(qǐng)求時(shí),則分別為多個(gè)數(shù)據(jù)查詢請(qǐng)求分配多個(gè)數(shù)據(jù)查詢線程。通過多線程操作,可同時(shí)并行處理多個(gè)數(shù)據(jù)查詢請(qǐng)求,充分發(fā)揮多線程的工作效率,加快數(shù)據(jù)查詢的處理速度。需要說明的是,本領(lǐng)域技術(shù)人員應(yīng)理解,下文中提到的各數(shù)據(jù)查詢線程執(zhí)行的操作均為并行的操作。

在步驟s206中,利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所查詢的數(shù)據(jù);如果有,則進(jìn)入步驟s208;否則,進(jìn)入步驟s210。

該緩存可以設(shè)置于服務(wù)器中,也可以設(shè)置在服務(wù)器之外,作為一個(gè)獨(dú)立的物理實(shí)體。

在步驟s208中,從該緩存中讀取該數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù),并將讀取到的該數(shù)據(jù)返回給發(fā)送該數(shù)據(jù)查詢請(qǐng)求的客戶端。

該緩存中存儲(chǔ)有部分地待查詢數(shù)據(jù),因此如果當(dāng)該數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)存儲(chǔ)于該緩存中,則可以直接從緩存中讀取數(shù)據(jù),并返回給客戶端,從而避免了對(duì)數(shù)據(jù)庫(kù)的查詢操作。

在步驟s210中,將該數(shù)據(jù)查詢請(qǐng)求加入到一查詢隊(duì)列中。

該查詢隊(duì)列例如可以采用消息隊(duì)列(messagequeue,mq)。為了便于擴(kuò)展,該查詢隊(duì)列也可以為分布式mq。

當(dāng)沒有從緩存中讀取到數(shù)據(jù)查詢請(qǐng)求所述請(qǐng)求查詢的數(shù)據(jù)時(shí),則由數(shù)據(jù)查詢線程將該數(shù)據(jù)查詢請(qǐng)求加入到查詢隊(duì)列中,同時(shí)各數(shù)據(jù)查詢請(qǐng)求進(jìn)入等待狀態(tài)。

在步驟s212中,將從所述查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求。

為了避免對(duì)數(shù)據(jù)庫(kù)的反復(fù)操作,可以將多個(gè)數(shù)據(jù)庫(kù)查詢請(qǐng)求合并為一個(gè)數(shù)據(jù)庫(kù)查詢請(qǐng)求,從而通過一次數(shù)據(jù)庫(kù)查詢操作獲得多個(gè)數(shù)據(jù)查詢請(qǐng)求的結(jié)果。

例如,可以判斷查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求的數(shù)量,當(dāng)該數(shù)量達(dá)到一預(yù)設(shè)閾值時(shí),則將其中的數(shù)據(jù)查詢請(qǐng)求取出,并放置于一取數(shù)隊(duì)列中。該預(yù)設(shè)閾值在實(shí)際應(yīng)用時(shí),可以根據(jù)實(shí)際需求進(jìn)行設(shè)置,本發(fā)明不以此為限。之后,將取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為該數(shù)據(jù)庫(kù)查詢請(qǐng)求。例如可以利用一單獨(dú)的取數(shù)進(jìn)程來(lái)進(jìn)行上述合并數(shù)據(jù)庫(kù)查詢請(qǐng)求的操作。取數(shù)隊(duì)列也可以實(shí)施為mq。

或者,也可以基于定時(shí)器,定時(shí)地從該查詢隊(duì)列中取出其中的數(shù)據(jù)查詢請(qǐng)求,并放置于取數(shù)隊(duì)列中,從而使取數(shù)隊(duì)列將取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為該數(shù)據(jù)庫(kù)查詢請(qǐng)求。

該數(shù)據(jù)查詢請(qǐng)求例如可以為基于sql(structuredquerylanguage,結(jié)構(gòu)化查詢語(yǔ)言)的查詢請(qǐng)求。

在步驟s214中,根據(jù)該數(shù)據(jù)庫(kù)查詢請(qǐng)求,在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢。

該數(shù)據(jù)庫(kù)例如為sql數(shù)據(jù)庫(kù)?;谠摂?shù)據(jù)庫(kù)查詢請(qǐng)求,服務(wù)器向該數(shù)據(jù)庫(kù)請(qǐng)求數(shù)據(jù)查詢操作。

在步驟s216中,將該數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入緩存中。

之后數(shù)據(jù)查詢結(jié)果可以直接存儲(chǔ)于緩存中,從而使得待下次查詢時(shí),如果有相同的查詢需求,則可以直接從緩存中讀取數(shù)據(jù)并返回給客戶端。

由上述說明可知,本發(fā)明的數(shù)據(jù)查詢處理方法在處理數(shù)據(jù)查詢請(qǐng)求時(shí),采用多線程操作,充分發(fā)揮了多線程的高效性;而在向數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢操作及返回查詢結(jié)果時(shí),是基于單線程進(jìn)行的,從而可以有效避免在該過程中采用多線程反饋所引起的混亂問題。

在步驟s218中,通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取緩存。

例如可以使用java語(yǔ)言中的notifyall()函數(shù)通知所有數(shù)據(jù)查詢線程。

在將數(shù)據(jù)查詢結(jié)果返回到緩存后,重新喚醒所有數(shù)據(jù)查詢線程,繼續(xù)利用多線程操作的特性,提高數(shù)據(jù)處理效率。

在步驟s220中,當(dāng)各數(shù)據(jù)查詢線程從緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查 詢請(qǐng)求所述請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的數(shù)據(jù)返回給發(fā)送該數(shù)據(jù)查詢請(qǐng)求的客戶端。

進(jìn)一步地,因在步驟s218中通知了所有數(shù)據(jù)查詢線程進(jìn)行讀取操作,但有可能其中的部分?jǐn)?shù)據(jù)查詢線程所對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求還未被合并為數(shù)據(jù)庫(kù)查詢請(qǐng)求,因此該數(shù)據(jù)查詢線程將讀取不到待查詢的數(shù)據(jù),此時(shí)該數(shù)據(jù)查詢線程則繼續(xù)等待下次被通知進(jìn)行讀取操作。

本發(fā)明的數(shù)據(jù)查詢處理方法20在采用多線程的基礎(chǔ)上,利用緩存作為存儲(chǔ)中介,將從數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果存儲(chǔ)于緩存中,并通知所有線程來(lái)讀取緩存,確定是否有其待查詢的數(shù)據(jù)。這樣的方法可以避免相關(guān)技術(shù)中多線程反饋無(wú)法直接對(duì)應(yīng)到相應(yīng)客戶端的混亂問題,同時(shí)又充分地發(fā)揮了多線程并行操作的高效率。此外,因?yàn)榫彺嬷写鎯?chǔ)數(shù)據(jù)查詢結(jié)果也是一種自我學(xué)習(xí),可以減少相同查詢需求的重復(fù)查詢操作,進(jìn)一步提高了查詢效率。

本領(lǐng)域技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施方式的全部或部分步驟被實(shí)現(xiàn)為由cpu執(zhí)行的計(jì)算機(jī)程序。在該計(jì)算機(jī)程序被cpu執(zhí)行時(shí),執(zhí)行本發(fā)明提供的上述方法所限定的上述功能。所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,該存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。

此外,需要注意的是,上述附圖僅是根據(jù)本發(fā)明示例性實(shí)施方式的方法所包括的處理的示意性說明,而不是限制目的。易于理解,上述附圖所示的處理并不表明或限制這些處理的時(shí)間順序。另外,也易于理解,這些處理可以是例如在多個(gè)模塊中同步或異步執(zhí)行的。

下述為本發(fā)明裝置實(shí)施例,可以用于執(zhí)行本發(fā)明方法實(shí)施例。對(duì)于本發(fā)明裝置實(shí)施例中未披露的細(xì)節(jié),請(qǐng)參照本發(fā)明方法實(shí)施例。

圖3是根據(jù)一示例性實(shí)施方式示出的一種數(shù)據(jù)查詢處理裝置的框圖。該數(shù)據(jù)查詢處理裝置可應(yīng)用于服務(wù)器中。如圖3所示,數(shù)據(jù)查詢處理裝置30包括:請(qǐng)求接收模塊302、線程分配模塊304、緩存判斷模塊306、數(shù)據(jù)庫(kù)查詢模塊308、緩存寫入模塊310、線程通知模塊312及請(qǐng)求響應(yīng)模塊314。

其中,請(qǐng)求接收模塊302用于接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求。

線程分配模塊304用于為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)數(shù)據(jù)查詢線程。

緩存判斷模塊306用于利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)。

數(shù)據(jù)庫(kù)查詢模塊308用于當(dāng)所述數(shù)據(jù)查詢線程判斷所述緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),為所述各數(shù)據(jù)查詢請(qǐng)求在一數(shù)據(jù)庫(kù)中進(jìn)行數(shù)據(jù)查詢;

緩存寫入模塊310用于將所述數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入所述緩存中.

線程通知模塊312用于通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取所述緩存。

請(qǐng)求響應(yīng)模塊314用于當(dāng)各數(shù)據(jù)查詢線程從所述緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的所述數(shù)據(jù)返回給發(fā)送所述數(shù)據(jù)查詢請(qǐng)求的客戶端。未在緩存中取得其對(duì)應(yīng)的查詢數(shù)據(jù)的數(shù)據(jù)查詢線程進(jìn)入等待狀態(tài)。

圖4是根據(jù)一示例性實(shí)施方式示出的另一種數(shù)據(jù)查詢處理裝置的框圖。該數(shù)據(jù)查詢處理裝置可應(yīng)用于服務(wù)器中。如圖4所示,數(shù)據(jù)查詢處理裝置40包括:請(qǐng)求接收模塊402、線程分配模塊404、緩存判斷模塊406、數(shù)據(jù)庫(kù)查詢模塊408、隊(duì)列加入模塊410、查詢生成模塊412、緩存寫入模塊414、線程通知模塊416及請(qǐng)求響應(yīng)模塊418。

請(qǐng)求接收模塊402用于接收客戶端發(fā)送的數(shù)據(jù)查詢請(qǐng)求;

線程分配模塊404用于為各數(shù)據(jù)查詢請(qǐng)求分配一個(gè)空閑的數(shù)據(jù)查詢線程;

緩存判斷模塊406用于利用多線程操作,由各數(shù)據(jù)查詢線程判斷一緩存中是否存儲(chǔ)有其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù);

隊(duì)列加入模塊410用于當(dāng)數(shù)據(jù)查詢線程判斷緩存中沒有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),將該數(shù)據(jù)查詢請(qǐng)求加入到一查詢隊(duì)列中;

查詢生成模塊412用于將從該查詢隊(duì)列中取出的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求;

數(shù)據(jù)庫(kù)查詢模塊408用于根據(jù)該數(shù)據(jù)庫(kù)查詢請(qǐng)求,在一數(shù)據(jù)庫(kù)中進(jìn) 行數(shù)據(jù)查詢;

緩存寫入模塊414用于將該數(shù)據(jù)庫(kù)返回的數(shù)據(jù)查詢結(jié)果寫入該緩存中;

線程通知模塊416用于通知所有數(shù)據(jù)查詢線程,以使各數(shù)據(jù)查詢線程讀取緩存;以及

請(qǐng)求響應(yīng)模塊418用于當(dāng)各數(shù)據(jù)查詢線程從緩存中讀取到其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),將讀取到的數(shù)據(jù)返回給發(fā)送數(shù)據(jù)查詢請(qǐng)求的客戶端。

在一些實(shí)施例中,請(qǐng)求響應(yīng)模塊418還用于當(dāng)數(shù)據(jù)查詢線程判斷該緩存中有存儲(chǔ)其對(duì)應(yīng)的數(shù)據(jù)查詢請(qǐng)求所請(qǐng)求查詢的數(shù)據(jù)時(shí),從該緩存中讀取數(shù)據(jù),并將讀取到的數(shù)據(jù)返回給發(fā)送數(shù)據(jù)查詢請(qǐng)求的客戶端。

圖5是根據(jù)一示例性實(shí)施方式示出的再一種數(shù)據(jù)查詢處理裝置的框圖。與圖4所示的數(shù)據(jù)查詢處理裝置40不同的是,圖5所示的數(shù)據(jù)查詢處理裝置50中的查詢生成模塊512包括:請(qǐng)求數(shù)量判斷子模塊5122、查詢請(qǐng)求取出子模塊5124及查詢請(qǐng)求生成子模塊5126。

請(qǐng)求數(shù)量判斷子模塊5122用于判斷查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求數(shù)量是否達(dá)到一預(yù)設(shè)閾值;

查詢請(qǐng)求取出子模塊5124用于當(dāng)請(qǐng)求數(shù)量判斷子模塊5122判斷查詢隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求數(shù)量達(dá)到該預(yù)設(shè)閾值時(shí),將數(shù)據(jù)查詢請(qǐng)求從查詢隊(duì)列中取出并放置于一取數(shù)隊(duì)列中;以及

查詢請(qǐng)求生成子模塊5126用于將取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為一數(shù)據(jù)庫(kù)查詢請(qǐng)求。

在一些實(shí)施例中,查詢請(qǐng)求生成子模塊5126還用于利用一取數(shù)線程,將取數(shù)隊(duì)列中的數(shù)據(jù)查詢請(qǐng)求合并為數(shù)據(jù)庫(kù)查詢請(qǐng)求。

在一些實(shí)施例中,數(shù)據(jù)庫(kù)查詢請(qǐng)求為基于sql的查詢請(qǐng)求。

需要注意的是,上述附圖中所示的框圖是功能實(shí)體,不一定必須與物理或邏輯上獨(dú)立的實(shí)體相對(duì)應(yīng)??梢圆捎密浖问絹?lái)實(shí)現(xiàn)這些功能實(shí)體,或在一個(gè)或多個(gè)硬件模塊或集成電路中實(shí)現(xiàn)這些功能實(shí)體,或在不同網(wǎng)絡(luò)和/或處理器裝置和/或微控制器裝置中實(shí)現(xiàn)這些功能實(shí)體。

通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員易于理解,這里描述的示例實(shí)施方式可以通過軟件實(shí)現(xiàn),也可以通過軟件結(jié)合必要的硬件的方式來(lái)實(shí)現(xiàn)。因此,根據(jù)本發(fā)明實(shí)施方式的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該軟件產(chǎn)品可以存儲(chǔ)在一個(gè)非易失性存儲(chǔ)介質(zhì)(可以是cd-rom,u盤,移動(dòng)硬盤等)中或網(wǎng)絡(luò)上,包括若干指令以使得一臺(tái)計(jì)算設(shè)備(可以是個(gè)人計(jì)算機(jī)、服務(wù)器、移動(dòng)終端、或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行根據(jù)本發(fā)明實(shí)施方式的方法。

以上具體地示出和描述了本發(fā)明的示例性實(shí)施方式。應(yīng)可理解的是,本發(fā)明不限于這里描述的詳細(xì)結(jié)構(gòu)、設(shè)置方式或?qū)崿F(xiàn)方法;相反,本發(fā)明意圖涵蓋包含在所附權(quán)利要求的精神和范圍內(nèi)的各種修改和等效設(shè)置。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1