一種數據查詢方法及裝置的制造方法
【技術領域】
[0001]本申請涉及計算機技術領域,尤其涉及一種在高并發場景下的數據查詢方法及裝置。
【背景技術】
[0002]當今計算機技術、互聯網技術的快速發展,人們的日常生活已經無法離開互聯網,越來越多的互聯網產品為大家所熟知,并給人們的工作、生活、學習帶來極大的便利。
[0003]目前,各種信息平臺都需要建立在相應的數據庫之上,對于一些熱門網站,其后臺服務器的訪問量是十分驚人的,此時面對用戶的大量查詢請求,服務器反饋查詢結果的響應通常會產生延遲。
[0004]而隨著大數據時代的到來,高并發查詢情況會越來越多,當大量的客戶端在同一時段內向服務器端發起查詢請求時,服務器會根據查詢請求中攜帶主鍵,先查詢自身緩存中是否存在該主鍵對應的數據(該主鍵對應的數據即為:所要查詢的數據),如果緩存中存在,則直接返回緩存中的數據,如果不存在,則在數據庫中查詢,并將查到的數據返回給客戶端,同時將該數據回寫入緩存中,以便下次查詢該數據時可直接從緩存中查找。
[0005]這種方式下,由于分布式緩存中保存了部分查詢請求對應的數據,因此可在一定程度上緩解數據庫的查詢壓力。但是,在出現很多空查(即數據庫中不存在所要查詢的數據)時,服務器仍然需要查詢緩存和數據庫,而由于數據庫中保存著海量的數據,查詢過程必然會使數據庫增加很多不必要的查詢,從而占用更多的系統資源,降低系統性能。
【發明內容】
[0006]本申請實施例提供一種數據查詢方法及裝置,用以解決現有技術中數據庫因大量空查而影響系統性能的問題。
[0007]本申請實施例提供的一種數據查詢方法,包括:
[0008]接收查詢請求;
[0009]根據所述查詢請求中攜帶的數據標識,以及預先保存的第一布隆過濾器,判斷所述數據標識對應的數據是否存在;
[0010]若存在,則獲取并返回所述數據;
[0011]若不存在,則確定查詢失敗。
[0012]本申請實施例提供的一種數據查詢裝置,包括:
[0013]接收模塊,用于接收查詢請求;
[0014]存儲模塊,用于存儲第一布隆過濾器;
[0015]判斷模塊,用于根據所述查詢請求中攜帶的數據標識,以及預先保存的第一布隆過濾器,判斷所述數據標識對應的數據是否存在;
[0016]查詢模塊,用于在所述判斷模塊的判斷結果為是時,獲取并返回所述數據,在所述判斷模塊的判斷結果為否時,確定查詢失敗。
[0017]本申請實施例提供的一種數據查詢方法和裝置,該方法服務器接收到查詢請求時,只需根據預存的布隆過濾器,判斷該查詢請求中攜帶的數據標識對應的數據是否存在,并僅在其存在時查找并返回該數據,而無需對每個查詢請求中攜帶的數據標識都進行查詢,從而可有效過濾空查,避免空查對數據庫造成不必要的壓力,從而達到降低數據庫開銷、提升查詢效率的目的。
【附圖說明】
[0018]此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
[0019]圖1為本申請實施例提供的數據查詢過程;
[0020]圖2為本申請實施例提供的數據查詢的詳細過程;
[0021]圖3為本申請實施例提供的數據查詢裝置結構示意圖。
【具體實施方式】
[0022]為使本申請的目的、技術方案和優點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0023]圖1為本申請實施例提供的數據查詢過程,具體包括:
[0024]SlOl:接收查詢請求。
[0025]在本申請實施例中,用戶要查詢某個數據時,可先通過客戶端向服務器發送查詢請求,其中,該查詢請求中攜帶要查詢的數據的數據標識,使服務器通過該數據標識,獲知要查詢的數據是哪個數據。該數據標識一般可以是數據的主鍵。所述的服務器可以是單一的服務器,也可以一個服務器集群或分布式服務器。
[0026]S102:根據該查詢請求中攜帶的數據標識,以及預先保存的第一布隆過濾器,判斷該數據標識對應的數據是否存在,若是,則執行步驟S103,否則,執行步驟S104。
[0027]在本申請實施例中,服務器預先保存有第一布隆過濾器,該第一布隆過濾器是預先根據數據庫中存儲的所有數據而生成的。通過查詢請求中攜帶的數據標識以及該第一布隆過濾器,服務器即可判斷出該數據標識對應的數據是否存在于數據庫中。
[0028]具體的,生成布隆過濾器的具體方法是:預設η位的數字序列,每一位均為0,預設k個散列函數,每個散列函數的值域均為O?n,n和k均為自然數,針對數據庫中保存的每個數據的數據標識,將該數據的數據標識分別輸入這k個散列函數,得到k個散列值,分別記為H1、H2、H3、……Hk,再將η位數字序列中的第Hl位、第H2位、第H3位、……第Hk位數字置為1,這樣,就相當于將該數據的數據標識“輸入” 了布隆過濾器,依此方法將數據庫中所有數據的數據標識都輸入布隆過濾器后,就得到了本申請實施例中所述的第一布隆過濾器。也即,本申請實施例中所述的布隆過濾器具體包括:η位數字序列(由O或I構成)以及k個散列函數。
[0029]服務器通過步驟SlOl接收到查詢請求后,根據該查詢請求中攜帶的數據標識以及該第一布隆過濾器,判斷該數據標識對應的數據是否存在于數據庫中的方法為:將該查詢請求中攜帶的數據標識分別輸入這k個散列函數,得到k個散列值,分別記為L1、L2、L3、……Lk,在η位數字序列中,分別判斷第LI位、第L2位、第L3位、……第Lk位的數字是否為1,若均為1,則確定該數據標識對應的數據存在于數據庫中,若至少一個不為1,則確定該數據標識對應的數據不存在于數據庫中。
[0030]S103:獲取并返回該數據。
[0031]如果服務器確定數據存在,則可從數據庫中查詢該數據標識對應的數據并返回給客戶端。
[0032]S104:確定查詢失敗。
[0033]如果服務器確定數據不存在,則可確定本次查詢為空查,進而確定本次查詢失敗,可將查詢失敗的提示信息返回給客戶端。
[0034]由上述布隆過濾器的生成方法和基于布隆過濾器判斷數據是否存在的方法可見,布隆過濾器并非是真正的把數據都存儲起來,而是僅以一個η位的數字序列來記錄數據是否存在,因此,服務器針對一個查詢請求,只需根據該布隆過濾器,即可判斷出其是否為空查,若不是空查,再從數據庫中查詢數據,否則,可不再從數據庫中查詢,因此可有效避免空查對數據庫造成不必要的壓力,降低了數據庫開銷,提升了查詢效率。
[0035]當然,由上述布隆過濾器的生成方法也可看出,對于存在于數據庫中的數據,通過布隆過濾器必定可以確定出其存在于數據庫中,對于不存在于數據庫中的數據,由于散列函數本身的特性,通過