本發(fā)明涉及軟件技術領域,特別涉及一種數(shù)據(jù)索引構建、數(shù)據(jù)讀取的方法、裝置及電子設備。
背景技術:
隨著科學技術的不斷發(fā)展,處理設備如cpu的數(shù)據(jù)處理能力得到了飛速的發(fā)展,然而,能夠大量存儲數(shù)據(jù)的數(shù)據(jù)庫的讀寫速度遠低于處理設備的數(shù)據(jù)處理速度,使得處理設備的高速計算能力得不到充分體現(xiàn)。
為了彌補這一不足,現(xiàn)有技術在處理設備與數(shù)據(jù)庫之間設置緩存,作為高并發(fā)系統(tǒng)常用的中間件。緩存的運行速度比內存快得多,用于提升數(shù)據(jù)讀取效率和系統(tǒng)吞吐量。常見的做法是,在數(shù)據(jù)庫中維護一份完整數(shù)據(jù),緩存用于存放常用數(shù)據(jù),訪問時,先到緩存中讀取數(shù)據(jù),緩存中無法命中的數(shù)據(jù),再到數(shù)據(jù)庫中讀取。
由于該緩存機制存在缺陷,攻擊者可以構造大量的非法數(shù)據(jù)(如數(shù)據(jù)庫中不存在的數(shù)據(jù)),造成大量的訪問無法從緩存讀取導致緩存被穿透,直接命中數(shù)據(jù)庫,大量訪問數(shù)據(jù)庫,占用數(shù)據(jù)庫讀資源,數(shù)據(jù)庫資源寶貴,并發(fā)訪問能力有限,在極大的并發(fā)訪問情況下,可能出現(xiàn)延遲、無法訪問,甚至系統(tǒng)卡死的情況。
技術實現(xiàn)要素:
本申請實施例提供一種數(shù)據(jù)索引構建、數(shù)據(jù)讀取的方法、裝置及電子設備,用于解決現(xiàn)有技術中緩存容易被穿透的技術問題,降低緩存被穿透的幾率。
本申請的第一方面,提供一種數(shù)據(jù)索引構建方法,所述方法包括:
在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;
在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;
其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
可選的,所述方法還包括:在向所述存儲器中存入數(shù)據(jù)時,將與所述第一數(shù)據(jù)索引相同的所述第二數(shù)據(jù)索引從所述刪除數(shù)據(jù)索引中刪除。
可選的,所述生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引,包括:
將所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立所述刪除數(shù)據(jù)索引;或者
將所述第二數(shù)據(jù)索引添加到布隆過濾器中建立所述刪除數(shù)據(jù)索引。
可選的,所述方法還包括:在預設時間周期后,對所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引進行初始化。
可選的,所述存儲器包括緩存和/或數(shù)據(jù)庫。
本申請的第二方面,提供一種數(shù)據(jù)讀取方法,所述方法包括:
在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引;
若所述待讀取數(shù)據(jù)不在所述存儲器中,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
可選的,所述存儲器包含緩存和/或數(shù)據(jù)庫。
可選的,所述方法還包括:
若所述待讀取數(shù)據(jù)在所述存儲器中,所述存儲器為數(shù)據(jù)庫,從緩存中對所述待讀取數(shù)據(jù)進行讀??;
若從所述緩存中讀取數(shù)據(jù)失敗,從所述數(shù)據(jù)庫中讀取所述待讀取數(shù)據(jù)。
可選的,所述通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在所述存儲器中,包括:
判斷所述刪除數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;
若所述刪除數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)不在所述存儲器中。
可選的,若所述刪除數(shù)據(jù)索引中不存在所述待讀取數(shù)據(jù)的索引,所述方法還包括:
判斷所述全量數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;
若所述全量數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)在所述存儲器中;反之,確定所述待讀取數(shù)據(jù)不在所述存儲器中。
可選的,所述方法還包括:在預設時間周期后,對所述全量數(shù)據(jù)索引和/或所述刪除數(shù)據(jù)索引進行初始化。
可選的,所述刪除數(shù)據(jù)索引由所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立;或者,所述刪除數(shù)據(jù)索引由所述第二數(shù)據(jù)索引添加到布隆過濾器中建立。
本申請的第三方面,提供一種數(shù)據(jù)索引構建裝置,所述裝置包括:
第一生成單元,用于在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;
第二生成單元,用于在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;
其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
可選的,所述裝置還包括:更新單元,用于在向所述存儲器中存入數(shù)據(jù)時,將與所述第一數(shù)據(jù)索引相同的所述第二數(shù)據(jù)索引從所述刪除數(shù)據(jù)索引中刪除。
可選的,所述第二生成單元,用于:
將所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立所述刪除數(shù)據(jù)索引;或者
將所述第二數(shù)據(jù)索引添加到布隆過濾器中建立所述刪除數(shù)據(jù)索引。
可選的,所述裝置還包括:初始單元,用于在預設時間周期后,對所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引進行初始化。
可選的,所述存儲器包括緩存和/或數(shù)據(jù)庫。
本申請的第四方面,提供一種數(shù)據(jù)讀取裝置,所述裝置包括:
判斷單元,用于在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引;
禁止單元,用于在所述待讀取數(shù)據(jù)不在所述存儲器中時,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
可選的,所述存儲器包含緩存和/或數(shù)據(jù)庫。
可選的,所述裝置還包括:
讀取單元,用于在所述待讀取數(shù)據(jù)在所述存儲器中,所述存儲器為數(shù)據(jù)庫時,從緩存中對所述待讀取數(shù)據(jù)進行讀??;
若從所述緩存中讀取數(shù)據(jù)失敗,從所述數(shù)據(jù)庫中讀取所述待讀取數(shù)據(jù)。
可選的,所述判斷單元,用于:
判斷所述刪除數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;
若所述刪除數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)不在所述存儲器中。
可選的,所述判斷單元還用于:
在所述刪除數(shù)據(jù)索引中不存在所述待讀取數(shù)據(jù)的索引時,判斷所述全量數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;
若所述全量數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)在所述存儲器中;反之,確定所述待讀取數(shù)據(jù)不在所述存儲器中。
可選的,所述裝置還包括:初始單元,用于在預設時間周期后,對所述全量數(shù)據(jù)索引和/或所述刪除數(shù)據(jù)索引進行初始化。
可選的,所述刪除數(shù)據(jù)索引由所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立;或者,所述刪除數(shù)據(jù)索引由所述第二數(shù)據(jù)索引添加到布隆過濾器中建立。
本申請的第五方面,提供一種電子設備,包括有存儲器,以及一個或者一個以上的程序,其中一個或者一個以上程序存儲于存儲器中,且經配置以由一個或者一個以上處理器執(zhí)行所述一個或者一個以上程序包含用于進行以下操作的指令:
在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;
在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;
其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
本申請的第六方面,提供一種電子設備,包括有存儲器,以及一個或者一個以上的程序,其中一個或者一個以上程序存儲于存儲器中,且經配置以由一個或者一個以上處理器執(zhí)行所述一個或者一個以上程序包含用于進行以下操作的指令:
在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引;
若所述待讀取數(shù)據(jù)不在所述存儲器中,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
本申請實施例中的上述一個或多個技術方案,至少具有如下技術效果:
本申請實施例在向存儲中存入數(shù)據(jù)、刪除數(shù)據(jù)時,分別生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并添加到刪除數(shù)據(jù)索引中,通過建立好的全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引,在進行數(shù)據(jù)讀取之前判斷待讀取數(shù)據(jù)是否在存儲器中,若不在,則禁止執(zhí)行從存儲器中讀取待讀取數(shù)據(jù)的操作,有效避免了非法數(shù)據(jù)對緩存、數(shù)據(jù)庫的訪問,解決了現(xiàn)有技術中因大量非法數(shù)據(jù)的訪問導致緩存容易被穿透的技術問題,降低了緩存被穿透的幾率,達到了對緩存、數(shù)據(jù)庫進行有效保護的有益效果。
附圖說明
圖1為本申請實施例一提供的一種數(shù)據(jù)索引構建方法的流程圖;
圖2為本申請實施例一提供的一種數(shù)據(jù)讀取方法的流程圖;
圖3為本申請實施例一提供的數(shù)據(jù)索引構建的交互示意圖;
圖4為本申請實施例一提供的數(shù)據(jù)讀取的交互示意圖;
圖5為本申請實施例二提供的一種數(shù)據(jù)索引構建裝置的示意圖;
圖6為本申請實施例二提供的一種數(shù)據(jù)讀取裝置的示意圖;
圖7為本申請實施例二提供的一種電子設備的示意圖。
具體實施方式
在本申請實施例提供的技術方案中,通過對存入數(shù)據(jù)和刪除數(shù)據(jù)構建數(shù)據(jù)索引,用于對待讀取數(shù)據(jù)進行預判,禁止對存儲器中不存在的數(shù)據(jù)進行讀取操作,有效避免非法數(shù)據(jù)對緩存、數(shù)據(jù)庫的訪問,以解決現(xiàn)有技術中因大量非法數(shù)據(jù)的訪問導致緩存容易被穿透的技術問題,降低緩存被穿透的幾率。
下面結合附圖對本申請實施例技術方案的主要實現(xiàn)原理、具體實施方式及其對應能夠達到的有益效果進行詳細的闡述。
實施例一
請參考圖1,本申請實施例提供一種數(shù)據(jù)索引構建方法,應用于一電子設備,該電子設備可以是客戶終端,也可以是服務器,該方法包括:
s11:在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;
s12:在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;
其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作,反之,則執(zhí)行讀取待讀取數(shù)據(jù)的操作。
具體實施過程中,存儲器可以是電子設備中的緩存和/或數(shù)據(jù)庫,即本申請實施例可以針對緩存和/或數(shù)據(jù)庫構建全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引。作為一種可選的實施方式,由于緩存中數(shù)據(jù)變化較為頻繁、數(shù)據(jù)存儲量也不大,可以只對數(shù)據(jù)庫中的數(shù)據(jù)構建全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引。
執(zhí)行s10時,電子設備可以先生成存入數(shù)據(jù)的第一數(shù)據(jù)索引,第一數(shù)據(jù)索引是對存入數(shù)據(jù)具有檢索意義的事項,如存入數(shù)據(jù)的屬性特征、名稱、數(shù)據(jù)結構、數(shù)據(jù)本身等;接著將第一數(shù)據(jù)索引添加到布隆過濾器中,以建立全量數(shù)據(jù)索引。
布隆過濾器是由一個很長的二進制向量和一系列隨機映射函數(shù)組成,可以用于檢索一個元素是否在一個集合中,具有空間效率高和查詢時間短的優(yōu)點,但是具有誤識率(將不存在的數(shù)據(jù)識別為存在)、刪除困難的缺點,可以往布隆過濾器中添加數(shù)據(jù)但是不易刪除,而存儲器中的數(shù)據(jù)變更具有雙向性,即會存入數(shù)據(jù)也會刪除數(shù)據(jù),所以本申請實施例使用布隆過濾器對存入數(shù)據(jù)構建全量數(shù)據(jù)索引,提高存入數(shù)據(jù)的查詢效率的同時,還執(zhí)行s12對刪除數(shù)據(jù)構建刪除數(shù)據(jù)索引,進而可以通過刪除數(shù)據(jù)索引來輔助判斷數(shù)據(jù)是否在存儲器中,來彌補布隆過濾器的誤識率、刪除的缺陷,在提高數(shù)據(jù)查詢效率的同時提高數(shù)據(jù)查詢的準確率。
在執(zhí)行s12時,同樣可以先生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引,然后建立刪除數(shù)據(jù)索引,包括:將第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立刪除數(shù)據(jù)索引,或者,將第二數(shù)據(jù)索引添加到布隆過濾器中建立刪除數(shù)據(jù)索引,即刪除數(shù)據(jù)索引即可以采用隊列的方式構建,也可以采用布隆過濾器的方式構建。當然,刪除數(shù)據(jù)索引還可以采用其它方式進行構建,本申請實施例并不限制其構建方式。
為了進一步提高數(shù)據(jù)查詢、讀取的準確性,當刪除數(shù)據(jù)索引采用隊列的方式構建時,本申請實施例還在向存儲器中存入數(shù)據(jù)時,將與第一數(shù)據(jù)索引相同的第二數(shù)據(jù)索引從刪除數(shù)據(jù)索引中刪除,避免在判斷數(shù)據(jù)是否在存儲器中時出現(xiàn)誤判。例如:當數(shù)據(jù)a存入存儲器中后被刪除,此時,數(shù)據(jù)a的索引已寫入到刪除數(shù)據(jù)索引中,若刪除后再次被存入,不將其索引從刪除數(shù)據(jù)索引中刪除,則會因其索引在刪除數(shù)據(jù)索引中而被誤判為不存在于存儲器中,而本申請將再次被存入的數(shù)據(jù)a的索引從刪除數(shù)據(jù)索引中刪除后,則能避免上述出現(xiàn)誤判的情況。
為了使構建的數(shù)據(jù)索引始終保持較高的準確性,本申請實施例還在預設時間周期后,對全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引進行初始化。如將存儲器中現(xiàn)有的所有數(shù)據(jù)的第一數(shù)據(jù)索引重新添加到布隆過濾器中建立新的全量數(shù)據(jù)索引,新的全量數(shù)據(jù)索引建立好后刪除原來的全量數(shù)據(jù)索引并清空刪除數(shù)據(jù)索引。預設時間周期可以為系統(tǒng)默認值如一周、半個月、一個月等,也可以由電子設備根據(jù)cpu是否空閑、數(shù)據(jù)索引中的數(shù)據(jù)量是否大于設定閾值等實際情況進行自動調節(jié),還可以由用戶進行個性化設置等,本申請并不限制預設時間周期的具體時長。
基于上述實施例構建的數(shù)據(jù)索引,本申請實施例還提供一種數(shù)據(jù)讀取方法,如圖2所示,該數(shù)據(jù)讀取方法包括:
s21:在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引。
具體的,可以通過判斷全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引中是否存在待讀取數(shù)據(jù)的索引來判斷待讀取數(shù)據(jù)是否在存儲器中,若待讀取數(shù)據(jù)的索引在全量數(shù)據(jù)索引中但不在刪除數(shù)據(jù)索引中,則可以判斷出待讀取數(shù)據(jù)在存儲器中,反之,待讀取數(shù)據(jù)不在存儲器中。
進一步的,為了提高判斷效率,可以先判斷刪除數(shù)據(jù)索引中是否存在待讀取數(shù)據(jù)的索引;若刪除數(shù)據(jù)索引中存在待讀取數(shù)據(jù)的索引,表明待讀取數(shù)據(jù)已被刪除,確定待讀取數(shù)據(jù)不在存儲器中,本次判斷過程結束;若刪除數(shù)據(jù)索引中不存在待讀取數(shù)據(jù)的索引,進一步判斷全量數(shù)據(jù)索引中是否存在待讀取數(shù)據(jù)的索引;若全量數(shù)據(jù)索引中存在待讀取數(shù)據(jù)的索引,確定待讀取數(shù)據(jù)在存儲器中;反之,確定待讀取數(shù)據(jù)不在存儲器中,本次判斷過程結束。當然,也可以先判斷全量數(shù)據(jù)索引中是否存在待讀取數(shù)據(jù)的索引,若不存在,表明待讀取數(shù)據(jù)未存入到存儲器中,確定待讀取數(shù)據(jù)不在存儲器中,本次判斷過程結束;在全量數(shù)據(jù)索引中存在待讀取數(shù)據(jù)的索引時,進一步判斷刪除數(shù)據(jù)索引中是否存在待讀取數(shù)據(jù)的索引,若不存在,確定待讀取數(shù)據(jù)在存儲器中,反之則不在存儲器中。
s22:若所述待讀取數(shù)據(jù)不在所述存儲器中,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。由此避免異常數(shù)據(jù)對緩存、數(shù)據(jù)庫的訪問,減小了緩存被穿透的幾率,進而減少數(shù)據(jù)庫被大量并發(fā)訪問的幾率,并且,即使緩存被穿透,異常數(shù)據(jù)也無法對數(shù)據(jù)庫進行訪問,實現(xiàn)了對數(shù)據(jù)庫的有效保護。
若所述待讀取數(shù)據(jù)在所述存儲器中,執(zhí)行讀取所述待讀取數(shù)據(jù)的操作。具體的,當電子設備中分別針對緩存和數(shù)據(jù)庫構建了全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引時,可以對緩存和數(shù)據(jù)庫進行數(shù)據(jù)讀取前均執(zhí)行s21~s22。當電子設備中只對數(shù)據(jù)庫構建了全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引時,執(zhí)行讀取待讀取數(shù)據(jù)的操作時,可以先從緩存中對待讀取數(shù)據(jù)進行讀取,若從緩存中讀取數(shù)據(jù)失敗,再從數(shù)據(jù)庫中讀取待讀取數(shù)據(jù)。
下面通過一個具體實例來對本申請實施例提供的數(shù)據(jù)讀取過程進行舉例說明,如圖3、4所示:
假設在商品數(shù)據(jù)(尤其是大量商品數(shù)據(jù))存儲及讀取過程中,在數(shù)據(jù)庫中商品數(shù)據(jù)(下述簡稱商品)變更時,包含商品新增和商品刪除,執(zhí)行如下步驟:
向數(shù)據(jù)庫中存入商品
步驟1:商品新增到數(shù)據(jù)庫中進行存儲;
步驟1.1:對新增的商品,添加商品索引到全量商品數(shù)據(jù)索引(即全量商品索引),具體可以通過步驟1.1.1往布隆過濾器添加該商品名稱來實現(xiàn)。
從數(shù)據(jù)庫中刪除商品
步驟2:從數(shù)據(jù)庫中進行商品刪除;
步驟2.1:對刪除的商品,添加商品索引到刪除數(shù)據(jù)索引,具體可以通過執(zhí)行步驟2.1.1將刪除商品名稱加入刪除數(shù)據(jù)索引來實現(xiàn)。
讀取商品
步驟1:通過全量數(shù)據(jù)索引判斷商品是否存在,即:判斷全量數(shù)據(jù)索引中是否存在待讀取商品的索引,如果不存在,執(zhí)行步驟1.1返回商品不存在,不進行商品讀取,反之,如果存在,執(zhí)行步驟2。
步驟2:步驟2.1通過刪除數(shù)據(jù)索引判斷商品是否已刪除,即:判斷刪除數(shù)據(jù)索引中是否存在待讀取商品的索引,如果存在,表明商品已刪除,執(zhí)行步驟2.2返回商品已刪除,不進行商品讀取,反之,如果存在,執(zhí)行步驟3。
步驟3:進行商品讀?。合葟木彺嬷羞M行待讀取商品的讀取,若讀取成功直接返回商品,若讀取失敗即緩存中取不存在該商品,執(zhí)行步驟3.1訪問數(shù)據(jù)庫;接著,執(zhí)行步驟3.2將商品讀入到緩存中,再從緩存中讀取商品。
在上述實施例中,針對存儲器中存入的數(shù)據(jù)采用布隆過濾器建立全量數(shù)據(jù)索引的同時,對存儲器中刪除的數(shù)據(jù)建立刪除數(shù)據(jù)索引,用以彌補布隆過濾器刪除數(shù)據(jù)不友好、對不存在的數(shù)據(jù)誤判的問題,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引能夠對存儲器中是否存在待讀取數(shù)據(jù)進行準確的判斷,將不存在的數(shù)據(jù)訪問攔截掉,解決了現(xiàn)有技術中緩存容易被穿透的技術問題,同時減小了對底層數(shù)據(jù)庫的查詢壓力。
實施例二
基于同一發(fā)明構思,針對實施例一提供的一種數(shù)據(jù)索引構建方法,本申請實施例還對應提供一種數(shù)據(jù)索引構建裝置,請參考圖5,該裝置包括:
第一生成單元51,用于在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;
第二生成單元52,用于在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;
其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。具體的,所述存儲器可以包括緩存和/或數(shù)據(jù)庫。
作為一種可選的實施例,所述裝置還包括:更新單元53,用于在向所述存儲器中存入數(shù)據(jù)時,將與所述第一數(shù)據(jù)索引相同的所述第二數(shù)據(jù)索引從所述刪除數(shù)據(jù)索引中刪除。
在具體實施過程中,所述第二生成單元52,用于:將所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立所述刪除數(shù)據(jù)索引;或者,將所述第二數(shù)據(jù)索引添加到布隆過濾器中建立所述刪除數(shù)據(jù)索引。
作為一種可選的實施例,所述裝置還包括:初始單元54,用于在預設時間周期后,對所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引進行初始化。
同樣的,針對實施例一提供的一種數(shù)據(jù)讀取裝置,本申請實施例對應提供一種數(shù)據(jù)讀取裝置,請參考圖6,該裝置包括:
判斷單元61,用于在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引;
禁止單元62,用于在所述待讀取數(shù)據(jù)不在所述存儲器中時,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
其中,所述存儲器可以包含緩存和/或數(shù)據(jù)庫。所述刪除數(shù)據(jù)索引可以由所述第二數(shù)據(jù)索引添加到刪除數(shù)據(jù)隊列中建立;或者,所述刪除數(shù)據(jù)索引由所述第二數(shù)據(jù)索引添加到布隆過濾器中建立。
作為一種可選的實施方式,所述裝置還包括:
讀取單元63,用于在所述待讀取數(shù)據(jù)在所述存儲器中,所述存儲器為數(shù)據(jù)庫時,從緩存中對所述待讀取數(shù)據(jù)進行讀?。蝗魪乃鼍彺嬷凶x取數(shù)據(jù)失敗,從所述數(shù)據(jù)庫中讀取所述待讀取數(shù)據(jù)。
在具體實施過程中,所述判斷單元61,用于:判斷所述刪除數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;若所述刪除數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)不在所述存儲器中。進一步的,所述判斷單元61還用于:在所述刪除數(shù)據(jù)索引中不存在所述待讀取數(shù)據(jù)的索引時,判斷所述全量數(shù)據(jù)索引中是否存在所述待讀取數(shù)據(jù)的索引;若所述全量數(shù)據(jù)索引中存在所述待讀取數(shù)據(jù)的索引,確定所述待讀取數(shù)據(jù)在所述存儲器中;反之,確定所述待讀取數(shù)據(jù)不在所述存儲器中。
作為一種可選的實施方式,所述裝置還包括:初始單元64,用于在預設時間周期后,對所述全量數(shù)據(jù)索引和/或所述刪除數(shù)據(jù)索引進行初始化。
關于上述實施例中的裝置,其中各個單元、模塊執(zhí)行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
圖7是根據(jù)一示例性實施例示出的一種用于實現(xiàn)數(shù)據(jù)存儲和/或處理方法的電子設備800的框圖。例如,電子設備800可以是移動電話,計算機,數(shù)字廣播終端,消息收發(fā)設備,游戲控制臺,平板設備,醫(yī)療設備,健身設備,個人數(shù)字助理等。
參照圖7,電子設備800可以包括以下一個或多個組件:處理器802,存儲器804,以及輸入/輸出(i/o)的接口806。處理器802通??刂齐娮釉O備800的整體操作。處理器802可以包括一個或多個,以完成上述的方法的全部或部分步驟。存儲器804被配置為存儲各種類型的數(shù)據(jù)以支持在設備800的操作。這些數(shù)據(jù)的示例包括用于在電子設備800上操作的任何應用程序或方法的指令,可以是rom、隨機存取存儲器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲設備等。i/o接口806為處理器802和外圍接口模塊之間提供接口,該外圍接口模塊可以是鍵盤,點擊輪,按鈕等。這些按鈕可包括但不限于:主頁按鈕、音量按鈕、啟動按鈕和鎖定按鈕。
在示例性實施例中,當存儲器804中的指令由電子設備的處理器執(zhí)行時,使得電子設備能夠執(zhí)行一種數(shù)據(jù)索引構建方法,所述方法包括:在向存儲器中存入數(shù)據(jù)時,生成存入數(shù)據(jù)的第一數(shù)據(jù)索引并添加到布隆過濾器中建立全量數(shù)據(jù)索引;在從所述存儲器中刪除數(shù)據(jù)時,生成刪除數(shù)據(jù)的第二數(shù)據(jù)索引并建立刪除數(shù)據(jù)索引;其中,所述全量數(shù)據(jù)索引和所述刪除數(shù)據(jù)索引用于在進行數(shù)據(jù)讀取前,判斷待讀取數(shù)據(jù)是否在所述存儲器中,若所述待讀取數(shù)據(jù)不在所述存儲器中禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
在示例性實施例中,當存儲器804中的指令由電子設備的處理器執(zhí)行時,使得電子設備能夠執(zhí)行一種數(shù)據(jù)讀取方法,所述方法包括:
在進行數(shù)據(jù)讀取之前,通過全量數(shù)據(jù)索引和刪除數(shù)據(jù)索引判斷待讀取數(shù)據(jù)是否在存儲器中,其中,所述全量數(shù)據(jù)索引用于通過布隆過濾器存儲存入數(shù)據(jù)的第一數(shù)據(jù)索引,所述刪除數(shù)據(jù)索引用于存儲刪除數(shù)據(jù)的第二數(shù)據(jù)索引;
若所述待讀取數(shù)據(jù)不在所述存儲器中,禁止執(zhí)行從所述存儲器中讀取所述待讀取數(shù)據(jù)的操作。
應當理解的是,本發(fā)明并不局限于上面已經描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本發(fā)明的范圍僅由所附的權利要求來限制
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。