數(shù)據(jù)掃描方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,更具體的說是涉及一種數(shù)據(jù)掃描方法及裝置。
【背景技術(shù)】
[0002] 在Key-Value(鍵-鍵值)分布式存儲系統(tǒng)中,一種常用的數(shù)據(jù)存儲結(jié)構(gòu)為 LSM(X〇g-St;ruc1:ured Merge Tree,日志結(jié)構(gòu)合并)樹。
[0003] LSM樹通常由多級結(jié)構(gòu)組成,每一對Key-Value數(shù)據(jù)首先存儲在LSM樹的第一級, 在數(shù)據(jù)存儲過程,若任一級的數(shù)據(jù)大小超出預(yù)設(shè)闊值時,即將該任一級中的數(shù)據(jù)寫入下一 級中,并與下一級中相同Key范圍的鍵值進行合并(compact)。
[0004] 由上述描述可知,Key-Value數(shù)據(jù)是按照合并的方式逐級存儲,因此將存在大量的 Key-Value數(shù)據(jù)具有兩個或更多版本。
[0005] 在進行數(shù)據(jù)讀取操作時,特別是讀取某一參數(shù)范圍的數(shù)據(jù)掃描(SCAN)操作,為了 獲得最新版本的數(shù)據(jù),現(xiàn)有技術(shù)中通常是需要將所有版本的Key-Value數(shù)據(jù)依次全部讀 出,W最終得到每個Key-Value數(shù)據(jù)的最新版本。而由于多個版本的存在,將會讀取大量舊 版本的數(shù)據(jù),從而造成I/O資源的浪費。
【發(fā)明內(nèi)容】
[0006] 有鑒于此,本申請?zhí)峁┝艘环N數(shù)據(jù)獲取方法、布隆過濾器生成方法及裝置,實現(xiàn)了 數(shù)據(jù)獲取時節(jié)省I/O資源的發(fā)明目的。
[0007] 為實現(xiàn)上述目的,本申請?zhí)峁┤缦录夹g(shù)方案:
[000引本申請的第一方面,提供了一種數(shù)據(jù)掃描方法,用于讀取鍵-值Key-Value分布式 存儲系統(tǒng)中的數(shù)據(jù),所述Key-Value分布式存儲系統(tǒng)采用日志結(jié)構(gòu)合并LSM樹的數(shù)據(jù)結(jié)構(gòu) 存儲數(shù)據(jù),所述方法包括:
[0009] 掃描在所述LSM樹第一級存儲的Key-Value數(shù)據(jù);
[0010] 依次針對不包括所述第一級的每一級中的每一個存儲塊,執(zhí)行如下操作:
[0011] 獲取Ifey集合,所述Ifey集合包含有已掃描的Key-Value數(shù)據(jù)中的全部Key ;
[0012] 根據(jù)所述存儲塊存儲的起始Key-Value數(shù)據(jù)中的Key W及結(jié)束Key-Value數(shù)據(jù)中 的Key,獲得所述存儲塊的Key取值范圍;
[0013] 獲取由所述Key集合W及所述Key取值范圍得到的Key交集;
[0014] 根據(jù)為所述存儲塊建立的Bloom Filter中存儲的所述Key交集中的Key的數(shù)量, 獲得所述存儲塊的掃描精確度,其中,所述Bloom Filter用于存儲所述存儲塊中的key ;
[0015] 在所述存儲塊的掃描精確度小于預(yù)設(shè)的掃描精確度時,掃描所述存儲塊存儲的 Ifey-Value 數(shù)據(jù);
[0016] 在所述存儲塊的掃描精確度不小于預(yù)設(shè)的掃描精確度時,不掃描所述存儲塊存儲 的 Key-Value 數(shù)據(jù)。
[0017] 在所述第一方面的第一種可能實現(xiàn)方式中,還包括:
[0018] 在所述Key交集為空集或者所述Key的數(shù)量為0時,掃描所述存儲塊存儲的 Key-Value 數(shù)據(jù)。
[0019] 結(jié)合所述第一方面或所述第一方面的第一種可能實現(xiàn)方式,在所述第一方面的第 二種可能實現(xiàn)方式中,所述根據(jù)為所述存儲塊建立的Bloom Filter中存儲的所述Key交集 中的Key的數(shù)量,獲得所述存儲塊的掃描精確度包括:
[0020] 在所述Key交集不為空集時,獲得所述Bloom Filter中存儲的所述Key交集中的 Key的數(shù)量;
[0021] 在所述Key的數(shù)量不為0時,根據(jù)所述Key的數(shù)量,獲得所述存儲塊的掃描精確 度。
[0022] 結(jié)合所述第一方面或所述第一方面的第一種可能實現(xiàn)方式,在所述第一方面的第 Η種可能實現(xiàn)方式中,所述根據(jù)為所述存儲塊建立的Bloom Filter中存儲的所述Key交集 中的Key的數(shù)量,獲得所述存儲塊的掃描精確度包括:
[0023] 獲得為所述存儲塊建立的Bloom Filter中存儲的所述Key交集中的Key的數(shù)量;
[0024] 根據(jù)所述Key的數(shù)量,按照下述公式計算所述存儲塊的掃描精確度:
[00 巧]
[0026] 其中,P表示掃描精確度,IV」表示所述交集中的Ifey數(shù)量,ISTiil表示第i級第j 個存儲塊中的Ifey數(shù)量,IV」表示在所述Bloom Filter中存儲的所述交集中的Ifey數(shù)量, 所述F表示所述Bloom Filter的誤判率;其中,i為大于1的整數(shù),j為大于0的整數(shù)。
[0027] 結(jié)合所述第一方面的上述任一種可能實現(xiàn)方式,在所述第一方面的第四種可能實 現(xiàn)方式中,所述根據(jù)所述存儲塊存儲的起始Key-Value數(shù)據(jù)中的Key W及結(jié)束Key-Value 數(shù)據(jù)中的Key,獲得所述存儲塊的Key取值范圍包括:
[0028] 獲取內(nèi)存中已保存的所述存儲塊存儲的起始Key-Value數(shù)據(jù)W及結(jié)束Key-Value 數(shù)據(jù);
[0029] 根據(jù)所述起始Key-Value數(shù)據(jù)中的Ifey W及所述結(jié)束Key-Value數(shù)據(jù)中的Key,獲 得所述存儲塊的Key取值范圍。
[0030] 第二方面,提供了一種數(shù)據(jù)掃描裝置,用于讀取鍵-值Key-Value分布式存儲系統(tǒng) 中的數(shù)據(jù),所述Key-Value分布式存儲系統(tǒng)采用日志結(jié)構(gòu)合并LSM樹的數(shù)據(jù)結(jié)構(gòu)存儲數(shù)據(jù), 所述裝置包括:
[0031] 第一掃描模塊,用于掃描在所述LSM樹第一級存儲的Key-Value數(shù)據(jù);
[0032] 第一獲取模塊,用于依次針對不包括所述第一級的每一級中的每一個存儲塊,獲 取Key集合,所述Key集合包含有已掃描的Key-Value數(shù)據(jù)中的全部Key ;
[0033] Key范圍獲取模塊,用于根據(jù)所述存儲塊存儲的起始Key-Value數(shù)據(jù)中的Key W及 結(jié)束Key-Value數(shù)據(jù)中的Key,獲得所述存儲塊的Key取值范圍;
[0034] Key交集獲取模塊,用于獲取由所述Key集合W及所所述Key取值范圍得到的Key 交集;
[0035] 掃描精確度獲取模塊,用于根據(jù)為所述存儲塊建立的Bloom Filter中存儲的所述 Key交集中的Key的數(shù)量,獲得所述存儲塊的掃描精確度,其中,所述Bloom Filter用于存 儲所述存儲塊中的key ;
[0036] 第二掃描模塊,用于在所述存儲塊的掃描精確度小于預(yù)設(shè)的掃描精確度時,掃描 所述存儲塊存儲的Key-Value數(shù)據(jù);在所述存儲塊的掃描精確度不小于預(yù)設(shè)的掃描精確度 時,不掃描所述存儲塊存儲的Key-Value數(shù)據(jù)。
[0037] 在所述第二方面的第一種可能實現(xiàn)方式中,所述第二掃描模塊,還用于在在所述 Key交集為空集或者所述Key的數(shù)量為0時,掃描所述存儲塊存儲的Key-Value數(shù)據(jù)。
[0038] 結(jié)合所述第二方面或所述第二方面的第一種可能實現(xiàn)方式,在所述第二方面的第 Η種可能實現(xiàn)方式中,所述掃描精確度獲取模塊具體用于:
[0039] 在所述Key交集不為空集時,獲得為所述存儲塊建立的Bloom Filter中存儲的所 述Key交集中的Key的數(shù)量;
[0040] 在所述Key的數(shù)量不為0時,根據(jù)所述Key的數(shù)量,計算所述存儲塊的掃描精確 度。
[0041] 結(jié)合所述第二方面或所述第二方面的第一種可能實現(xiàn)方式,在所述第二方面的第 Η種可能實現(xiàn)方式中,所述掃描精確度獲取模塊具體用于:
[0042] 獲得為所述存儲塊建立的Bloom Filter中存儲的所述Key交集中的Key的數(shù)量;
[0043] 根據(jù)所述Key的數(shù)量,按照下述公式計算所述存儲塊的掃描精確度:
[0044]
[0045] 其中,P表示掃描精確度,IV」表示所述交集中的Ifey數(shù)量,|STi,|表示第i級第j 個存儲塊中的K巧數(shù)量,|v」表示在所述Bloom Filter中存儲的所述交集中的Ifey數(shù)量, 所述F表示所述Bloom Filter的誤判率;其中,i為大于1的整數(shù),j為大于0的整數(shù)。
[0046] 結(jié)合所述第二方面的上述任一種可能實現(xiàn)方式,在所述第二方面的第四種可能實 現(xiàn)方式中,所述Key范圍獲取模塊具體用于:
[0047] 獲取內(nèi)存中已保存的所述存儲塊存儲的起始Key-Value數(shù)據(jù)W及結(jié)束Key-Value 數(shù)據(jù);
[0048] 根據(jù)所述起始Key-Value數(shù)據(jù)中的Ifey W及所述結(jié)束Key-Value數(shù)據(jù)中的Key,獲 得所述存儲塊的Key取值范圍。
[0049] 經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本申請?zhí)峁┝艘环N數(shù)據(jù)掃描及裝置, 在掃描數(shù)據(jù)時,首先掃描LSM樹第一級存儲的Key-Value數(shù)據(jù),之后,針對不包括所述第一 級的每一級中的每一個存儲,獲得由已掃描Key-Value數(shù)據(jù)中的全部Key得到的Key集合, W及根據(jù)所述存儲塊存儲的起始Key-Value數(shù)據(jù)中的Key W及結(jié)束Key-Value數(shù)據(jù)中的