本發明涉及數據處理技術,具體而言,涉及一種數據查詢處理方法及裝置。
背景技術:
隨著互聯網的迅猛發展,越來越多的互聯網服務器面臨高并發、海量訪問查詢的問題。為了解決這種問題,目前主要有兩種解決方法,一種是采用分布式存儲的硬件式解決方案;另一種是采用多線程操作的軟件式解決方案。但分布式存儲將會帶來存儲成本的增加;而多線程操作在數據查詢過程中,常會出現數據反饋混亂甚至丟失的情況。
技術實現要素:
有鑒于此,本發明提供一種數據查詢處理方法及裝置,能夠提高數據查詢處理效率。
本發明的其他特性和優點將通過下面的詳細描述變得顯然,或部分地通過本發明的實踐而習得。
根據本發明的一方面,提供了一種數據查詢處理方法,包括:接收客戶端發送的數據查詢請求;為各數據查詢請求分配一個空閑的數據查詢線程;利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有其對應的數據查詢請求所請求查詢的數據;當所述數據查詢線程判斷所述緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,為所述各數據查詢請求在一數據庫中進行數據查詢;將所述數據庫返回的數據查詢結果寫入所述緩存中;通知所有數據查詢線程,以使各數據查詢線程讀取所述緩存;以及當各數據查詢線程從所述緩存中讀取到其對應的數據查詢請求所請求查詢的數據時,將讀取到的所述數據返回給發送所述數據查詢請求的客戶端。
根據本發明的一實施方式,該方法還包括:當所述數據查詢線程判斷所述緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,所述數據查詢線程進入等待狀態。
根據本發明的一實施方式,該方法還包括:當所述數據查詢線程判斷所述緩存中有存儲其對應的數據查詢請求所請求查詢的數據時,從所述緩存中讀取所述數據,并將讀取到的所述數據返回給發送所述數據查詢請求的客戶端。
根據本發明的一實施方式,在為所述數據查詢請求在一數據庫中進行數據查詢之前,該方法還包括:將所述數據查詢請求加入到一查詢隊列中;將從所述查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求;以及根據所述數據庫查詢請求,為所述各數據查詢請求在一數據庫中進行數據查詢。
根據本發明的一實施方式,將從所述查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求包括:當所述查詢隊列中的數據查詢請求數量達到一預設閾值時,將所述數據查詢請求從所述查詢隊列中取出并放置于一取數隊列中;將所述取數隊列中的數據查詢請求合并為一數據庫查詢請求。
根據本發明的一實施方式,將從所述查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求還包括:利用一取數線程,將所述取數隊列中的數據查詢請求合并為所述數據庫查詢請求。
根據本發明的一實施方式,所述數據庫查詢請求為基于sql的查詢請求。
根據本發明的另一方面,提供了一種數據查詢處理裝置,包括:請求接收模塊,用于接收客戶端發送的數據查詢請求;線程分配模塊,用于為各數據查詢請求分配一個空閑的數據查詢線程;緩存判斷模塊,用于利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有其對應的數據查詢請求所請求查詢的數據;數據庫查詢模塊,用于當所述數據查詢線程判斷所述緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,為所述各數據查詢請求在一數據庫中進行數據查詢;緩存寫入模塊,用于將所述數據庫返回的數據查詢結果寫入所述緩存中;線程通 知模塊,用于通知所有數據查詢線程,以使各數據查詢線程讀取所述緩存;以及請求響應模塊,用于當各數據查詢線程從所述緩存中讀取到其對應的數據查詢請求所請求查詢的數據時,將讀取到的所述數據返回給發送所述數據查詢請求的客戶端。
根據本發明的一實施方式,所述緩存判斷模塊還用于當所述數據查詢線程判斷所述緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,通知所述數據查詢線程進入等待狀態。
根據本發明的一實施方式,所述請求響應模塊還用于當所述數據查詢線程判斷所述緩存中有存儲其對應的數據查詢請求所請求查詢的數據時,從所述緩存中讀取所述數據,并將讀取到的所述數據返回給發送所述數據查詢請求的客戶端。
根據本發明的一實施方式,該裝置還包括:隊列加入模塊和查詢生成模塊;其中所述隊列加入模塊用于在所述數據庫查詢模塊為所述各數據查詢請求在一數據庫中進行數據查詢;所述查詢生成模塊用于將從所述查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求;所述數據庫查詢模塊還用于根據所述數據庫查詢請求,為所述各數據查詢請求在一數據庫中進行數據查詢。
根據本發明的一實施方式,所述查詢生成模塊包括:請求數量判斷子模塊,用于判斷所述查詢隊列中的數據查詢請求數量是否達到一預設閾值;查詢請求取出子模塊,用于當所述請求數量判斷子模塊判斷所述查詢隊列中的數據查詢請求數量達到所述預設閾值時,將所述數據查詢請求從所述查詢隊列中取出并放置于一取數隊列中;以及查詢請求生成子模塊,用于將所述取數隊列中的數據查詢請求合并為一數據庫查詢請求。
根據本發明的一實施方式,所述查詢請求生成子模塊還用于利用一取數線程,將所述取數隊列中的數據查詢請求合并為所述數據庫查詢請求。
根據本發明的一實施方式,所述數據庫查詢請求為基于sql的查詢請求。
根據本發明的數據查詢處理方法,在采用多線程的基礎上,利用緩 存作為存儲中介,將從數據庫返回的數據查詢結果存儲于緩存中,并通知所有線程來讀取緩存,確定是否有其待查詢的數據。這樣的方法可以避免相關技術中多線程反饋無法直接對應到相應客戶端的混亂問題,同時又充分地發揮了多線程并行操作的高效率。此外,因為緩存中存儲數據查詢結果也是一種自我學習,可以減少相同查詢需求的重復查詢操作,進一步提高了查詢效率。
應當理解的是,以上的一般描述和后文的細節描述僅是示例性的,并不能限制本發明。
附圖說明
通過參照附圖詳細描述其示例實施例,本發明的上述和其它目標、特征及優點將變得更加顯而易見。
圖1是根據一示例性實施方式示出的一種數據查詢處理方法的流程圖。
圖2是根據一示例性實施方式示出的另一種數據查詢處理方法的流程圖。
圖3是根據一示例性實施方式示出的一種數據查詢處理裝置的框圖。
圖4是根據一示例性實施方式示出的另一種數據查詢處理裝置的框圖。
圖5是根據一示例性實施方式示出的再一種數據查詢處理裝置的框圖。
具體實施方式
現在將參考附圖更全面地描述示例實施方式。然而,示例實施方式能夠以多種形式實施,且不應被理解為限于在此闡述的范例;相反,提供這些實施方式使得本發明將更加全面和完整,并將示例實施方式的構思全面地傳達給本領域的技術人員。附圖僅為本發明的示意性圖解,并非一定是按比例繪制。圖中相同的附圖標記表示相同或類似的部分,因而將省略對它們的重復描述。
此外,所描述的特征、結構或特性可以以任何合適的方式結合在一個或更多實施方式中。在下面的描述中,提供許多具體細節從而給出對本發明的實施方式的充分理解。然而,本領域技術人員將意識到,可以實踐本發明的技術方案而省略所述特定細節中的一個或更多,或者可以采用其它的方法、組元、裝置、步驟等。在其它情況下,不詳細示出或描述公知結構、方法、裝置、實現或者操作以避免喧賓奪主而使得本發明的各方面變得模糊。
圖1是根據一示例性實施方式示出的一種數據查詢處理方法的流程圖。該方法可以由服務器來實施,如圖1所示,數據查詢處理方法10包括:
在步驟s102中,接收客戶端發送的數據查詢請求。
例如,服務器接收一個客戶端或多個客戶端發送的一個或多個數據查詢請求。當在某一時刻,數據訪問量比較大,服務器接收到多個數據查詢請求時,稱之為高并發數據請求。
在步驟s104中,為各數據查詢請求分配一個數據查詢線程。
每收到一個數據查詢請求,則為該數據查詢請求分配一個空閑的數據查詢線程。當同時收到多個數據查詢請求時,則分別為多個數據查詢請求分配多個數據查詢線程。通過多線程操作,可同時并行處理多個數據查詢請求,充分發揮多線程的工作效率,加快數據查詢的處理速度。需要說明的是,本領域技術人員應理解,下文中提到的各數據查詢線程執行的操作均為并行的操作。
在步驟s106中,利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有對應的數據查詢請求所查詢的數據;如果有,則進入步驟s108;否則,進入步驟s110。
該緩存可以設置于服務器中,也可以設置在服務器之外,作為一個獨立的物理實體。
在步驟s108中,從該緩存中讀取該數據查詢請求所請求查詢的數據,并將讀取到的該數據返回給發送該數據查詢請求的客戶端。
該緩存中存儲有部分地待查詢數據,因此如果當該數據查詢請求所 請求查詢的數據存儲于該緩存中,則可以直接從緩存中讀取數據,并返回給客戶端,從而避免了對數據庫的查詢操作。未在緩存中取得其對應的查詢數據的數據查詢線程進入等待狀態。
在步驟s110中,為該數據查詢請求在數據庫中進行數據查詢。
在步驟s112中,將該數據庫返回的數據查詢結果寫入緩存中。
之后數據查詢結果可以直接存儲于緩存中,從而使得待下次查詢時,如果有相同的查詢需求,則可以直接從緩存中讀取數據并返回給客戶端。
在步驟s114中,通知所有數據查詢線程,以使各數據查詢線程讀取緩存。
例如可以使用java語言中的notifyall()函數通知所有數據查詢線程。
在步驟s116中,當各數據查詢線程從緩存中讀取到其對應的數據查詢請求所述請求查詢的數據時,將讀取到的數據返回給發送該數據查詢請求的客戶端。
本發明的數據查詢處理方法10在采用多線程的基礎上,利用緩存作為存儲中介,將從數據庫返回的數據查詢結果存儲于緩存中,并通知所有線程來讀取緩存,確定是否有其待查詢的數據。這樣的方法可以避免相關技術中多線程反饋無法直接對應到相應客戶端的混亂問題,同時又充分地發揮了多線程并行操作的高效率。此外,因為緩存中存儲數據查詢結果也是一種自我學習,可以減少相同查詢需求的重復查詢操作,進一步提高了查詢效率。
應清楚地理解,本公開描述了如何形成和使用特定示例,但本公開的原理不限于這些示例的任何細節。相反,基于本公開公開的內容的教導,這些原理能夠應用于許多其它實施方式。
圖2是根據一示例性實施方式示出的另一種數據查詢處理方法的流程圖。該方法可以由服務器來實施,如圖2所示,數據查詢處理方法20包括:
在步驟s202中,接收客戶端發送的數據查詢請求。
例如,服務器接收一個客戶端或多個客戶端發送的一個或多個數據 查詢請求。當在某一時刻,數據訪問量比較大,服務器接收到多個數據查詢請求時,稱之為高并發數據請求。
在步驟s204中,為各數據查詢請求分配一個空閑的數據查詢線程。
每收到一個數據查詢請求,則為該數據查詢請求分配一個空閑的數據查詢線程。當同時收到多個數據查詢請求時,則分別為多個數據查詢請求分配多個數據查詢線程。通過多線程操作,可同時并行處理多個數據查詢請求,充分發揮多線程的工作效率,加快數據查詢的處理速度。需要說明的是,本領域技術人員應理解,下文中提到的各數據查詢線程執行的操作均為并行的操作。
在步驟s206中,利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有對應的數據查詢請求所查詢的數據;如果有,則進入步驟s208;否則,進入步驟s210。
該緩存可以設置于服務器中,也可以設置在服務器之外,作為一個獨立的物理實體。
在步驟s208中,從該緩存中讀取該數據查詢請求所請求查詢的數據,并將讀取到的該數據返回給發送該數據查詢請求的客戶端。
該緩存中存儲有部分地待查詢數據,因此如果當該數據查詢請求所請求查詢的數據存儲于該緩存中,則可以直接從緩存中讀取數據,并返回給客戶端,從而避免了對數據庫的查詢操作。
在步驟s210中,將該數據查詢請求加入到一查詢隊列中。
該查詢隊列例如可以采用消息隊列(messagequeue,mq)。為了便于擴展,該查詢隊列也可以為分布式mq。
當沒有從緩存中讀取到數據查詢請求所述請求查詢的數據時,則由數據查詢線程將該數據查詢請求加入到查詢隊列中,同時各數據查詢請求進入等待狀態。
在步驟s212中,將從所述查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求。
為了避免對數據庫的反復操作,可以將多個數據庫查詢請求合并為一個數據庫查詢請求,從而通過一次數據庫查詢操作獲得多個數據查詢請求的結果。
例如,可以判斷查詢隊列中的數據查詢請求的數量,當該數量達到一預設閾值時,則將其中的數據查詢請求取出,并放置于一取數隊列中。該預設閾值在實際應用時,可以根據實際需求進行設置,本發明不以此為限。之后,將取數隊列中的數據查詢請求合并為該數據庫查詢請求。例如可以利用一單獨的取數進程來進行上述合并數據庫查詢請求的操作。取數隊列也可以實施為mq。
或者,也可以基于定時器,定時地從該查詢隊列中取出其中的數據查詢請求,并放置于取數隊列中,從而使取數隊列將取數隊列中的數據查詢請求合并為該數據庫查詢請求。
該數據查詢請求例如可以為基于sql(structuredquerylanguage,結構化查詢語言)的查詢請求。
在步驟s214中,根據該數據庫查詢請求,在一數據庫中進行數據查詢。
該數據庫例如為sql數據庫。基于該數據庫查詢請求,服務器向該數據庫請求數據查詢操作。
在步驟s216中,將該數據庫返回的數據查詢結果寫入緩存中。
之后數據查詢結果可以直接存儲于緩存中,從而使得待下次查詢時,如果有相同的查詢需求,則可以直接從緩存中讀取數據并返回給客戶端。
由上述說明可知,本發明的數據查詢處理方法在處理數據查詢請求時,采用多線程操作,充分發揮了多線程的高效性;而在向數據庫進行數據查詢操作及返回查詢結果時,是基于單線程進行的,從而可以有效避免在該過程中采用多線程反饋所引起的混亂問題。
在步驟s218中,通知所有數據查詢線程,以使各數據查詢線程讀取緩存。
例如可以使用java語言中的notifyall()函數通知所有數據查詢線程。
在將數據查詢結果返回到緩存后,重新喚醒所有數據查詢線程,繼續利用多線程操作的特性,提高數據處理效率。
在步驟s220中,當各數據查詢線程從緩存中讀取到其對應的數據查 詢請求所述請求查詢的數據時,將讀取到的數據返回給發送該數據查詢請求的客戶端。
進一步地,因在步驟s218中通知了所有數據查詢線程進行讀取操作,但有可能其中的部分數據查詢線程所對應的數據查詢請求還未被合并為數據庫查詢請求,因此該數據查詢線程將讀取不到待查詢的數據,此時該數據查詢線程則繼續等待下次被通知進行讀取操作。
本發明的數據查詢處理方法20在采用多線程的基礎上,利用緩存作為存儲中介,將從數據庫返回的數據查詢結果存儲于緩存中,并通知所有線程來讀取緩存,確定是否有其待查詢的數據。這樣的方法可以避免相關技術中多線程反饋無法直接對應到相應客戶端的混亂問題,同時又充分地發揮了多線程并行操作的高效率。此外,因為緩存中存儲數據查詢結果也是一種自我學習,可以減少相同查詢需求的重復查詢操作,進一步提高了查詢效率。
本領域技術人員可以理解實現上述實施方式的全部或部分步驟被實現為由cpu執行的計算機程序。在該計算機程序被cpu執行時,執行本發明提供的上述方法所限定的上述功能。所述的程序可以存儲于一種計算機可讀存儲介質中,該存儲介質可以是只讀存儲器,磁盤或光盤等。
此外,需要注意的是,上述附圖僅是根據本發明示例性實施方式的方法所包括的處理的示意性說明,而不是限制目的。易于理解,上述附圖所示的處理并不表明或限制這些處理的時間順序。另外,也易于理解,這些處理可以是例如在多個模塊中同步或異步執行的。
下述為本發明裝置實施例,可以用于執行本發明方法實施例。對于本發明裝置實施例中未披露的細節,請參照本發明方法實施例。
圖3是根據一示例性實施方式示出的一種數據查詢處理裝置的框圖。該數據查詢處理裝置可應用于服務器中。如圖3所示,數據查詢處理裝置30包括:請求接收模塊302、線程分配模塊304、緩存判斷模塊306、數據庫查詢模塊308、緩存寫入模塊310、線程通知模塊312及請求響應模塊314。
其中,請求接收模塊302用于接收客戶端發送的數據查詢請求。
線程分配模塊304用于為各數據查詢請求分配一個數據查詢線程。
緩存判斷模塊306用于利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有其對應的數據查詢請求所請求查詢的數據。
數據庫查詢模塊308用于當所述數據查詢線程判斷所述緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,為所述各數據查詢請求在一數據庫中進行數據查詢;
緩存寫入模塊310用于將所述數據庫返回的數據查詢結果寫入所述緩存中.
線程通知模塊312用于通知所有數據查詢線程,以使各數據查詢線程讀取所述緩存。
請求響應模塊314用于當各數據查詢線程從所述緩存中讀取到其對應的數據查詢請求所請求查詢的數據時,將讀取到的所述數據返回給發送所述數據查詢請求的客戶端。未在緩存中取得其對應的查詢數據的數據查詢線程進入等待狀態。
圖4是根據一示例性實施方式示出的另一種數據查詢處理裝置的框圖。該數據查詢處理裝置可應用于服務器中。如圖4所示,數據查詢處理裝置40包括:請求接收模塊402、線程分配模塊404、緩存判斷模塊406、數據庫查詢模塊408、隊列加入模塊410、查詢生成模塊412、緩存寫入模塊414、線程通知模塊416及請求響應模塊418。
請求接收模塊402用于接收客戶端發送的數據查詢請求;
線程分配模塊404用于為各數據查詢請求分配一個空閑的數據查詢線程;
緩存判斷模塊406用于利用多線程操作,由各數據查詢線程判斷一緩存中是否存儲有其對應的數據查詢請求所請求查詢的數據;
隊列加入模塊410用于當數據查詢線程判斷緩存中沒有存儲其對應的數據查詢請求所請求查詢的數據時,將該數據查詢請求加入到一查詢隊列中;
查詢生成模塊412用于將從該查詢隊列中取出的數據查詢請求合并為一數據庫查詢請求;
數據庫查詢模塊408用于根據該數據庫查詢請求,在一數據庫中進 行數據查詢;
緩存寫入模塊414用于將該數據庫返回的數據查詢結果寫入該緩存中;
線程通知模塊416用于通知所有數據查詢線程,以使各數據查詢線程讀取緩存;以及
請求響應模塊418用于當各數據查詢線程從緩存中讀取到其對應的數據查詢請求所請求查詢的數據時,將讀取到的數據返回給發送數據查詢請求的客戶端。
在一些實施例中,請求響應模塊418還用于當數據查詢線程判斷該緩存中有存儲其對應的數據查詢請求所請求查詢的數據時,從該緩存中讀取數據,并將讀取到的數據返回給發送數據查詢請求的客戶端。
圖5是根據一示例性實施方式示出的再一種數據查詢處理裝置的框圖。與圖4所示的數據查詢處理裝置40不同的是,圖5所示的數據查詢處理裝置50中的查詢生成模塊512包括:請求數量判斷子模塊5122、查詢請求取出子模塊5124及查詢請求生成子模塊5126。
請求數量判斷子模塊5122用于判斷查詢隊列中的數據查詢請求數量是否達到一預設閾值;
查詢請求取出子模塊5124用于當請求數量判斷子模塊5122判斷查詢隊列中的數據查詢請求數量達到該預設閾值時,將數據查詢請求從查詢隊列中取出并放置于一取數隊列中;以及
查詢請求生成子模塊5126用于將取數隊列中的數據查詢請求合并為一數據庫查詢請求。
在一些實施例中,查詢請求生成子模塊5126還用于利用一取數線程,將取數隊列中的數據查詢請求合并為數據庫查詢請求。
在一些實施例中,數據庫查詢請求為基于sql的查詢請求。
需要注意的是,上述附圖中所示的框圖是功能實體,不一定必須與物理或邏輯上獨立的實體相對應。可以采用軟件形式來實現這些功能實體,或在一個或多個硬件模塊或集成電路中實現這些功能實體,或在不同網絡和/或處理器裝置和/或微控制器裝置中實現這些功能實體。
通過以上的實施方式的描述,本領域的技術人員易于理解,這里描述的示例實施方式可以通過軟件實現,也可以通過軟件結合必要的硬件的方式來實現。因此,根據本發明實施方式的技術方案可以以軟件產品的形式體現出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是cd-rom,u盤,移動硬盤等)中或網絡上,包括若干指令以使得一臺計算設備(可以是個人計算機、服務器、移動終端、或者網絡設備等)執行根據本發明實施方式的方法。
以上具體地示出和描述了本發明的示例性實施方式。應可理解的是,本發明不限于這里描述的詳細結構、設置方式或實現方法;相反,本發明意圖涵蓋包含在所附權利要求的精神和范圍內的各種修改和等效設置。