布隆過濾器也有可能將其誤判為存在于數據庫中,但是,這個誤判率(也稱為假通過率)可以通過上述η和k計算出來,也就是說,通過調整η和k的值,可以使誤判率降低到可以接受的范圍以下,比如使誤判率降低到千分之一以下。
[0036]另外,對于普通的布隆過濾器來說,向布隆過濾器中輸入數據是非常方便的,但是,從布隆過濾器中“刪除”數據是較為困難的,例如,假設數據庫中刪除了某個數據,則相應的,本申請實施例中的第一布隆過濾器中也應“刪除”該數據的數據標識,但如果簡單的將該數據標識在η位數字序列中對應的第Hl位、第Η2位、第Η3位、……第Hk位的數字置為O顯然是不妥的,這是因為其他數據標識輸入k個散列函數后,可能也會對應第Hl位、第H2位、第H3位、……第Hk位中的某一個或者某幾個,因此,在本申請實施例中,還可采用改進型的布隆過濾器,改進型的布隆過濾器主要是對η位數字序列中的每一位數字置I的次數進行記錄,當“刪除” 一個數據時,可將該數據在η位數字序列對應的每一位數字置I的次數減1,對于η位數字序列某一位數字來說,如果該位數據被置I的次數為0,則將該位數字變更為0,這樣即可方便的從布隆過濾器中刪除數據。
[0037]在圖1所示的步驟S103中,服務器確定查詢請求中攜帶的數據標識對應的數據存在于數據庫中后,獲取并返回該數據時,可先在自身的緩存中查找該數據,若查找到,則獲取并返回該數據,若未查找到,則在數據庫中查找該數據,并將查找到的數據返回給客戶端。由于服務器從自身緩存中查找數據的速度要遠快于從數據庫中查找數據的速度,因此,服務器優先從自身的緩存中查找數據,可進一步提高查找數據的效率。
[0038]當然,當服務器在自身的緩存中未查找到數據,但在數據庫中查找到該數據時,還可將查找到的數據寫入到自身的緩存中,以便下次查詢該數據時,可從自身的緩存中直接查找到。
[0039]進一步的,當服務器優先在自身的緩存中查找數據時,也可根據預先保存第二布隆過濾器進行查找,該第二布隆過濾器是預先根據緩存中存儲的所有數據生成的,具體的,服務器可根據查詢請求中攜帶的數據標識,以及預先保存的第二布隆過濾器,判斷該數據標識對應的數據是否存在于緩存中,若是,則從緩存中獲取該數據并返回給客戶端,否則,在數據庫中查找該數據,并將查找到的數據返回給客戶端。當然,如果根據第二布隆過濾器確定該數據不存在于緩存中,并從數據庫中查找到該數據時,為了便于下次查找該數據時可從緩存中直接查找到,服務器還可將查找到的數據寫入到自身的緩存中,并根據寫入該數據后的緩存中存儲的所有數據,更新第二布隆過濾器。
[0040]上述第二布隆過濾器的生成方法和使用方法均與第一布隆過濾器是類似的,二者區別僅在于第一布隆過濾器是根據數據庫中存儲的數據生成的,第二布隆過濾器是根據服務器緩存中存儲的數據生成的,這里就不再對第二布隆過濾器的生成和使用方法進行贅述。
[0041 ] 需要說明的是,本申請實施例提供的數據查詢方法可應用于高并發查詢較多的電子商務場景,則本申請實施例所述的查詢請求包括但不限于商品信息查詢請求、交易記錄查詢請求等,所述的數據標識包括但不限于商品名稱、商品身份識別碼(IDentity,ID)等,所述的服務器包括但不限于電商網站服務器、支付服務器等。
[0042]圖2為本申請實施例提供的數據查詢的詳細過程,具體包括以下步驟:
[0043]S201:服務器接收查詢請求。
[0044]S202:根據查詢請求中攜帶的數據標識,以及預先保存的第一布隆過濾器,判斷該數據標識對應的數據是否存在,若是,執行步驟S203,否則執行步驟S206。
[0045]其中,該第一布隆過濾器是根據數據庫中存儲的所有數據生成的。
[0046]S203:根據該數據標識,以及預先保存的第二布隆過濾器,判斷該數據標識對應的數據是否存在于緩存中,若是,執行步驟S204,否則執行步驟S205。
[0047]S204:從緩存中獲取該數據并返回。
[0048]其中,該第二布隆過濾器是根據緩存中存儲的所有數據生成的。
[0049]S205:在數據庫中查找該數據并返回,將查找到的數據寫入緩存中,并根據寫入該數據后的緩存中存儲的所有數據,更新第二布隆過濾器。
[0050]S206:確定查詢失敗。
[0051]以上為本申請實施例提供的數據查詢方法,基于同樣的思路,本申請實施例還提供了一種數據查詢裝置,如圖3所示。
[0052]圖3為本申請實施例提供的數據查詢裝置結構示意圖,具體包括:
[0053]接收模塊301,用于接收查詢請求;
[0054]存儲模塊302,用于存儲第一布隆過濾器;
[0055]判斷模塊303,用于根據所述查詢請求中攜帶的數據標識,以及預先保存的第一布隆過濾器,判斷所述數據標識對應的數據是否存在;
[0056]查詢模塊304,用于在所述判斷模塊303的判斷結果為是時,獲取并返回所述數據,在所述判斷模塊303的判斷結果為否時,確定查詢失敗。
[0057]所述存儲模塊302具體用于,預先根據數據庫中存儲的所有數據,生成對應的第一布隆過濾器并保存。
[0058]所述查詢模塊304具體用于,在所述判斷模塊303的判斷結果為是時,在緩存中查找所述數據,若查找到,則獲取并返回所述數據,若未查找到,則在數據庫中查找所述數據,并將查找到的數據返回。
[0059]所述查詢模塊304還用于,當在所述數據庫中查找到所述數據時,將查找到的數據寫入所述緩存中。
[0060]所述查詢模塊304具體用于,在所述判斷模塊303的判斷結果為是時,根據所述數據標識,以及預先保存的第二布隆過濾器,判斷所述數據標識對應的數據是否存在于緩存中,若是,則從緩存中獲取所述數據并返回,否則,在數據庫中查找所述數據,并將查找到的數據返回,其中,所述第二布隆過濾器是根據所述緩存中存儲的所有數據生成的。
[0061]所述查詢模塊304還用于,當在所述數據庫中查找到所述數據時,將查找到的數據寫入所述緩存中,根據寫入所述數據后的緩存中存儲的所有數據,更新第二布隆過濾器。
[0062]本申請實施例提供的一種數據查詢方法和裝置,該方法服務器接收到查詢請求時,只需根據預存的布隆過濾器,判斷該查詢請求中攜帶的數據標識對應的數據是否存在,并僅在其存在時查找并返回該數據,而無需對每個查詢請求中攜帶的數據標識都進行查詢,從而可有效過濾空查,避免空查對數據庫造成不必要的壓力,從而達到降低數據庫開銷、提升查詢效率的目的。
[0063]本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0064]本申請是參照根據本申請實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一流程和/或方