使用布隆過濾器檢測(cè)副本之間的偏差的制作方法
【專利摘要】本公開涉及使用布隆過濾器檢測(cè)副本之間的偏差。提供的技術(shù)使用近乎滿的布隆過濾器,用于有效地識(shí)別其中副本之間的偏差足以調(diào)整糾正措施的散列片段。所描述的技術(shù)也用于調(diào)整片段的尺寸和布隆過濾器的尺寸,從而使得布隆過濾器間的比較被用作片段對(duì)的片段內(nèi)容偏差程度的精確指示器。片段尺寸可以在片段對(duì)之間有所不同,從而使得通過相對(duì)大的片段來表示環(huán)的相對(duì)稀少的駐足部分(更少的塊落入存取碼范圍內(nèi)),而通過相對(duì)較小的片段來表示環(huán)的相對(duì)密集的駐足部分(更多的塊落入存取碼范圍內(nèi))。
【專利說明】使用布隆過濾器檢測(cè)副本之間的偏差
[0001]相關(guān)申請(qǐng)的交叉引用
[0002]本申請(qǐng)要求于2012年12月27日提交的美國(guó)專利申請(qǐng)第13/728,133號(hào)的優(yōu)先權(quán),其公開內(nèi)容通過引用結(jié)合于此,猶如在本文中進(jìn)行完整闡述。
【技術(shù)領(lǐng)域】
[0003]本發(fā)明涉及復(fù)制,更具體地,涉及用于有效檢測(cè)以及定位復(fù)制對(duì)象之間的差異的技術(shù)。
【背景技術(shù)】
[0004]用于訪問存儲(chǔ)的數(shù)字項(xiàng)目的信息在此被稱為存儲(chǔ)項(xiàng)目的“存取碼”。在常規(guī)的文件系統(tǒng)中,基于以下來檢索所存儲(chǔ)的項(xiàng)目:(a)項(xiàng)目存儲(chǔ)的位置;以及(b)項(xiàng)目的名稱或者標(biāo)識(shí)符。例如,如果名為“fo0.txt”的文件位于名為“c: \myfiles\text”的目錄中,貝U應(yīng)用可使用路徑名稱“c:\myfiles\text\fo0.txt”作為存取碼從文件系統(tǒng)中檢索文件。因?yàn)閭鹘y(tǒng)存取碼是基于被檢索項(xiàng)目的位置,所以當(dāng)項(xiàng)目移動(dòng)時(shí)存取碼就會(huì)改變。此外,項(xiàng)目的每個(gè)副本具有不同的存取碼,這是因?yàn)槊總€(gè)副本存儲(chǔ)在不同的位置。
[0005]和常規(guī)文件系統(tǒng)相比,內(nèi)容尋址存儲(chǔ)(CAS)系統(tǒng)允許應(yīng)用基于從項(xiàng)目的內(nèi)容所生成的散列值從存儲(chǔ)器中檢索項(xiàng)目。因?yàn)镃AS系統(tǒng)基于為項(xiàng)目生成的散列值對(duì)項(xiàng)目進(jìn)行存儲(chǔ)相關(guān)的操作,并且散列值是基于項(xiàng)目?jī)?nèi)容而不是項(xiàng)目存儲(chǔ)的位置的,請(qǐng)求操作的應(yīng)用程序不需要了解存儲(chǔ)的項(xiàng)目副本的數(shù)量或者位置就可以進(jìn)行此。例如,CAS系統(tǒng)可在位置A、B和C存儲(chǔ)項(xiàng)目X的多個(gè)副本。期望檢索項(xiàng)目X的應(yīng)用程序通過發(fā)送基于項(xiàng)目X內(nèi)容的散列值至CAS系統(tǒng)就可以進(jìn)行此?;诖松⒘兄?,CAS系統(tǒng)將向應(yīng)用程序提供從位置A、B和C之一中檢索到的項(xiàng)目X的副本。因此,應(yīng)用程序不用了解項(xiàng)目X實(shí)際存儲(chǔ)的位置、項(xiàng)目X存在的副本數(shù)量或者檢索到的副本實(shí)際上獲得自的特定位置,就可以獲得項(xiàng)目X。
[0006]使用CAS存儲(chǔ)的數(shù)據(jù)在兩個(gè)或多個(gè)數(shù)據(jù)中心之間被頻繁地復(fù)制。當(dāng)一組區(qū)塊在多個(gè)數(shù)據(jù)中心之間復(fù)制時(shí),區(qū)塊組的許多副本被假設(shè)為保持相同。然而,實(shí)際上,區(qū)塊組的副本具有小量差異。這些差異可由各種原因引起,包括數(shù)據(jù)損壞以及復(fù)制延遲。
[0007]圖1為示出了同一區(qū)塊組的副本包含在兩個(gè)區(qū)塊存儲(chǔ)器100和102中的情況的框圖,其中兩個(gè)區(qū)塊存儲(chǔ)器100和102可以由兩個(gè)數(shù)據(jù)中心保存。存儲(chǔ)在區(qū)塊存儲(chǔ)器100中的副本被示為副本A,而存儲(chǔ)在區(qū)塊存儲(chǔ)器102中的副本被示為副本B。在區(qū)塊存儲(chǔ)器100和102兩者中,副本在兩個(gè)存儲(chǔ)裝置之間分割。具體地,使用橫向分區(qū)在存儲(chǔ)裝置110和120之間分割副本A,而使用縱向分區(qū)在存儲(chǔ)裝置112和122之間分割副本B。
[0008]橫向分區(qū)包括基于其存取碼所落入的范圍選擇存儲(chǔ)區(qū)塊的位置。因此,在區(qū)塊存儲(chǔ)器100中,具有在MIN至N范圍中的存取碼的區(qū)塊存儲(chǔ)在存儲(chǔ)裝置110上,而具有在N+1至MAX范圍中的存取碼的區(qū)塊存儲(chǔ)在存儲(chǔ)裝置120上。
[0009]與之相比,縱向分區(qū)包括在特定裝置上存儲(chǔ)所有區(qū)塊直至特定時(shí)間點(diǎn)(例如,當(dāng)磁盤變滿時(shí)),并且在隨后的時(shí)間點(diǎn)在不同的裝置上存儲(chǔ)所有新的區(qū)塊。因而,在區(qū)塊存儲(chǔ)器102中,MIN至MAX范圍中的整個(gè)存取碼的區(qū)塊在存儲(chǔ)裝置112上存儲(chǔ)直到時(shí)間Tl,以及時(shí)間Tl之后整個(gè)存取碼范圍MIN至MAX的區(qū)塊存儲(chǔ)在存儲(chǔ)裝置122上。
[0010]區(qū)塊存儲(chǔ)器100和102僅為數(shù)據(jù)中心內(nèi)部如何組織區(qū)塊的簡(jiǎn)單實(shí)施例,其中此區(qū)塊屬于存儲(chǔ)器所保存的副本。區(qū)塊數(shù)據(jù)的組織可為任意復(fù)合體,包括水平和垂直分區(qū)的組合,以及系統(tǒng)內(nèi)復(fù)制和高速緩存。在此描述的技術(shù)不限于任何具體的內(nèi)部區(qū)塊存儲(chǔ)組織。
[0011]如上所述,副本A和B會(huì)由于數(shù)據(jù)損壞或者延遲問題而彼此偏差。對(duì)于數(shù)據(jù)損壞,會(huì)出現(xiàn)數(shù)據(jù)損壞造成的副本之間的偏差,例如當(dāng)磁盤損壞時(shí)、當(dāng)磁盤的單獨(dú)扇區(qū)損壞時(shí)或者當(dāng)存儲(chǔ)的數(shù)據(jù)混亂時(shí)。此外,NAND芯片(又名固態(tài)存儲(chǔ)器SSD)逐漸的劣化也會(huì)導(dǎo)致其中存儲(chǔ)的數(shù)據(jù)損壞。
[0012]甚至在沒有任何故障的情況下,副本A和B會(huì)因?yàn)檠舆t制造的偏差而不同。具體地,復(fù)制過程消耗一定時(shí)間,以及在復(fù)制進(jìn)行的同時(shí)副本持續(xù)進(jìn)展(即,新的PUT操作完成)。因此,即使可以執(zhí)行副本A和B的狀態(tài)的瞬時(shí)比較,副本之間也會(huì)不同,這是因?yàn)閰^(qū)塊存儲(chǔ)器100已經(jīng)完成存儲(chǔ)到副本A中的區(qū)塊尚未被區(qū)塊存儲(chǔ)器102存儲(chǔ)到副本B中,反之亦然。
[0013]可以采用試圖預(yù)先主動(dòng)避免損壞造成的偏差的協(xié)議。例如,在一些系統(tǒng)中,PUT操作被發(fā)送至所有副本(例如,所有3個(gè)副本),但是被假定為在大部分副本(例如,3個(gè)中的2個(gè)副本)確認(rèn)收到PUT時(shí)發(fā)送就是成功的。在副本尚未確認(rèn)收到PUT的情況下,復(fù)制系統(tǒng)通常竭盡最大的努力來確保尚未確認(rèn)收到I3UT的副本具有作為PUT的區(qū)塊。
[0014]作為另一實(shí)例,當(dāng)基于區(qū)塊的存取碼發(fā)出檢索區(qū)塊的請(qǐng)求時(shí),系統(tǒng)會(huì)檢查所請(qǐng)求的區(qū)塊是否在所有的副本找得到。如果任一副本不能找到請(qǐng)求的區(qū)塊,則區(qū)塊(從成功發(fā)現(xiàn)區(qū)塊的副本中獲得的)的副本可以是檢索操作失敗所在的每個(gè)副本中的TOT。
[0015]不幸的是,這種預(yù)先主動(dòng)地防止或者恢復(fù)損壞造成的偏差的努力不能確保副本明確地不處于損壞的狀態(tài)中。例如,如果特定的區(qū)塊在副本A中被擾亂,則只要特定的區(qū)塊不是后續(xù)GET或者PUT操作的對(duì)象,該損壞的區(qū)塊將不會(huì)被檢測(cè)到。因此,已經(jīng)開發(fā)了用于定期地檢查區(qū)塊組的副本之間的一致性的方法。
[0016]檢查區(qū)塊組的副本之間一致性的一種方法在此被稱為“ALG01”方法。根據(jù)ALGOl方法,兩個(gè)副本之間的差異通過以下步驟來檢測(cè):比較(a) —個(gè)副本中所有區(qū)塊的存取碼組與(b)另一個(gè)副本中所有區(qū)塊的存取碼組;以及計(jì)算兩組之間的差異。該算法將需要傳輸O (P)存取碼(其中P是區(qū)塊存儲(chǔ)器中的區(qū)塊數(shù)量)。對(duì)于較大數(shù)值P (例如>1012),該算法是不實(shí)用的。
[0017]復(fù)制的區(qū)塊組中的區(qū)塊的存取碼通常被稱作“散列”,這是因?yàn)樗麄兺ǔMㄟ^對(duì)區(qū)塊的內(nèi)容應(yīng)用散列函數(shù)來產(chǎn)生的。區(qū)塊存儲(chǔ)中的所有散列的組可以通過環(huán)來表示,該環(huán)以字典順序表示散列。散列的完整組(即全部范圍內(nèi)的存取碼)通過整個(gè)環(huán)表示,而散列的一范圍可以通過環(huán)的片段(“散列片”)來表示。
[0018]參照?qǐng)D3A,其是示出了分別表示區(qū)塊存儲(chǔ)器100和102使用的存取碼的范圍的環(huán)300和302的框圖。環(huán)300被分割為Al、A2、A3和A4四個(gè)片段。類似地,環(huán)302被分割為B1、B2、B3和B4四個(gè)片段。各個(gè)片段代表一散列值范圍。在示出的實(shí)例中,環(huán)300和302已被分割為環(huán)300中的各個(gè)片段具有相同散列范圍,如環(huán)302中的相應(yīng)片段。從而,片段Al與片段BI對(duì)應(yīng)相同范圍的散列,片段A2與片段B2對(duì)應(yīng)相同范圍的散列,等。兩個(gè)對(duì)應(yīng)相同范圍的散列的片段在此作為片段對(duì)。因而,片段Al與片段BI對(duì)應(yīng)于相同的散列范圍,片段A2和B2對(duì)應(yīng)于相同的散列范圍,等等。片段Al和BI形成片段對(duì),片段A2和B2組成片段對(duì),等。在圖3A中,由片段A2和B2形成的片段對(duì)被標(biāo)識(shí)為片段對(duì)304,而由片段A3和B3形成的片段對(duì)被標(biāo)識(shí)為片段對(duì)306。
[0019]各種技術(shù)可用于將環(huán)分成片段。例如,整個(gè)環(huán)可再分成兩部分,從而使得一個(gè)片段用于MIN至1/2MAX的存取碼以及一個(gè)片段用于1/2MAX+1至MAX的存取碼。如果所產(chǎn)生的片段不夠小,則各個(gè)片段可被進(jìn)一步分成兩個(gè)。再分割片段的該過程可重復(fù)多遍直至片段足夠小。因此,整個(gè)環(huán)可被分成2N個(gè)散列片段,其中N=0、l、2等。在圖3A中,環(huán)已被分成四個(gè)片段(即N=2)。
[0020]通過將區(qū)塊存儲(chǔ)器100和102的環(huán)300和302分割成散列片段,“ALG01”可被精細(xì)化為更加有效。精細(xì)化的“ALG02”包括將環(huán)分成2N個(gè)散列片段,并隨后計(jì)算每個(gè)片段對(duì)的差異。例如,片段Al中的存取碼可以從區(qū)塊存儲(chǔ)器100發(fā)送至區(qū)塊存儲(chǔ)器102,以與片段BI中的存取碼相比較。然后,片段A2中的存取碼可以從區(qū)塊存儲(chǔ)器100發(fā)送至區(qū)塊存儲(chǔ)器102,以與片段B2中的存取碼相比較,等。這將散列存儲(chǔ)傳輸之間分成更小的數(shù)據(jù)包,這是更實(shí)用的并且使其本身是并行的。
[0021]不幸的是,ALG02依然直立著交換O (P)散列,而且并不注意差異所在。例如,在副本A和B之間只有一個(gè)散列不同的極端情況下,使用ALG02完成的工作量依然是O(P)--昂貴的。在正常操作中,P與相對(duì)較少的差異相比是非常大的。
[0022]為了避免交換O (P)散列,另一個(gè)技術(shù)“ALG03”使用Merkle樹(或者散列(哈希)樹)來計(jì)算和保存校驗(yàn)和的樹。校驗(yàn)和產(chǎn)生技術(shù)被選擇為使得如果校驗(yàn)和是相同的,則兩個(gè)相等組不同的幾率極低。一種校驗(yàn)和的實(shí)施例為對(duì)包括組的散列進(jìn)行XOR。ALG03以每個(gè)片段工作,首先產(chǎn)生校驗(yàn)和。如果校驗(yàn)和與副本中的對(duì)應(yīng)片段相同,那么算法認(rèn)為片段是相同的。如果散列不同,則散列被枚舉,如在ALG02中一樣。在最壞的情況下,如ALG02 —樣枚舉O (P)散列,但是在只有一個(gè)散列不同的情況下,只有O (P/ (2N))散列被枚舉。例如,當(dāng)如圖3A中所示分成四個(gè)片段時(shí),片段A2和B2是僅有的校驗(yàn)和不匹配的片段對(duì),然后僅那些落入片段A2和B2 (副本中所有散列的近似1/4)中的散列需要彼此相比較。校驗(yàn)和的比較需要O (2N)個(gè)校驗(yàn)和被傳輸。
[0023]不幸的是,ALG03依然擴(kuò)大了大量不必要的能量。具體地,延遲產(chǎn)生的偏差很可能產(chǎn)生許多“誤報(bào)”,這是因?yàn)樾r?yàn)和被設(shè)計(jì)成捕獲具有高概率的任何差異。實(shí)際上,校驗(yàn)和對(duì)于每個(gè)片段間的比較是不同,除非片段非常薄(高N值)。因?yàn)槠蔚拿杜e為O (2N),所以高N值是不期望的并且增加整個(gè)復(fù)制的延遲。
[0024]ALG03具有的另一個(gè)難題是,對(duì)于散列環(huán)的一些區(qū)域,較小的N就足夠,而一些區(qū)域需要較高的N。沿著環(huán)會(huì)出現(xiàn)上述差異,例如,這是因?yàn)榇鎯?chǔ)某個(gè)散列范圍的磁盤在故障時(shí)減少對(duì)應(yīng)于該片段的片段填充;并且因?yàn)閺?fù)制本身趨向于產(chǎn)生不均勻的片段密度。因?yàn)樘崆安恢缹?duì)深度的需要,所以N很少是理想的選擇。
[0025]此外,Merkle樹對(duì)于保存是相當(dāng)昂貴的。Merkle樹在O (LOG (P))時(shí)間中更新并占據(jù)O (P)存儲(chǔ)器,并且存儲(chǔ)器的恒定因數(shù)是非常高的,這是因?yàn)楸仨毐4嫔⒘?例如,當(dāng)校驗(yàn)和是散列的XOR時(shí))。Merkle樹同樣難以遞增地保存合并的區(qū)塊存儲(chǔ)。例如,區(qū)塊存儲(chǔ)器102代表了重疊合并的情況,其中對(duì)于相同片段的區(qū)塊可以在存儲(chǔ)器112和存儲(chǔ)器122兩者之上。在這些情況下為片段計(jì)算校驗(yàn)和最好的方法是為合并中的存儲(chǔ)裝置枚舉那些片段的散列。
[0026]因此,希望提供一種能夠有效檢測(cè)同一區(qū)塊組的散列環(huán)副本的片段在何時(shí)以及何中停止匹配,使得副本之間的差異可以被快速糾正。
[0027]在本節(jié)中所描述的方法是那些可以被探求的方法,并非必需是那些先前已構(gòu)思或探求的方法。因此除非另有陳述,否則不應(yīng)當(dāng)認(rèn)為任何在本節(jié)中描述的方法僅因?yàn)榘诒竟?jié)中就有資格作為先有技術(shù)。
【專利附圖】
【附圖說明】
[0028]在附圖中:
[0029]圖1是示出了保存同一區(qū)塊組的副本的兩個(gè)區(qū)塊存儲(chǔ)的方框圖;
[0030]圖2A-2B是示出了根據(jù)本發(fā)明實(shí)施方式的用于基于布隆過濾器檢測(cè)被復(fù)制的區(qū)塊組之間的偏差的步驟的流程圖;以及
[0031]圖3A是示出了與在圖1中示出的區(qū)塊存儲(chǔ)關(guān)聯(lián)的環(huán)的框圖。
[0032]圖3B-3E是示出了根據(jù)本發(fā)明實(shí)施方式的被復(fù)制的區(qū)塊存儲(chǔ)的環(huán)如何被再分成片段以使用布隆過濾器檢測(cè)偏差的框圖;
[0033]圖4為可以實(shí)現(xiàn)根據(jù)本發(fā)明的實(shí)施方式的計(jì)算機(jī)系統(tǒng)的框圖;
[0034]圖5為示出了根據(jù)一個(gè)實(shí)施方式的如何確定與片段對(duì)對(duì)應(yīng)的副本部分彼此間的偏差大于特定閾值的流程圖;以及
[0035]圖6為示出了根據(jù)實(shí)施方式的如何計(jì)算dmax(包括片段對(duì)之間不同的區(qū)塊的實(shí)際數(shù)量的特定百分比概率的間隔的上邊界)的流程圖。
【具體實(shí)施方式】
[0036]在以下描述中,為了說明的目的,闡述了許多具體細(xì)節(jié)以提供對(duì)本發(fā)明的徹底理解。然而,顯而易見的是,本發(fā)明不用這些具體細(xì)節(jié)就可以實(shí)行。在其他實(shí)例中,為了避免不必要地模糊本發(fā)明,將眾所周知的結(jié)構(gòu)和裝置以框圖形式示出。
[0037]概述
[0038]提供這些技術(shù)以用于使用布隆過濾器而非Merkle樹,從而有效識(shí)別其中副本之間的偏差足以做出補(bǔ)救措施的散列片段。布隆過濾器是位向量其中各個(gè)位對(duì)應(yīng)散列桶,并且在輸入組中的任何值被散列至散列桶,被設(shè)置為“ I ”。在本文描述的技術(shù)中,用于產(chǎn)生布隆過濾器的輸入組是被復(fù)制的區(qū)塊組的區(qū)塊的存取碼(即散列),該存取碼落入散列環(huán)的特定片段。
[0039]例如,為了對(duì)副本A中的片段Al與對(duì)應(yīng)的副本B的片段BI進(jìn)行比較,為片段對(duì)中的每個(gè)片段產(chǎn)生布隆過濾器。具體地,第一布隆過濾器BFl通過應(yīng)用散列函數(shù)至片段Al中的區(qū)塊的存取碼來生成,以及第二布隆過濾器BF2通過應(yīng)用散列函數(shù)至片段BI中的區(qū)塊的存取碼來生成。兩個(gè)對(duì)應(yīng)片段的布隆過濾器然后可以相互比較以確定屬于片段對(duì)的片段內(nèi)容偏差是否超過特定閾值。
[0040]此后描述的技術(shù)用于調(diào)整片段大小以及布隆過濾器的大小,使得布隆過濾器之間的比較作為片段對(duì)的片段內(nèi)容的偏差是否超過可接受閾值的準(zhǔn)確指示符。根據(jù)一個(gè)實(shí)施方式,片段尺寸在片段對(duì)之間而有所不同,使得環(huán)上相對(duì)稀疏的部分(較少區(qū)塊所落入的存取碼范圍)通過相對(duì)較大的片段表示,而環(huán)上相對(duì)稠密的部分(更多區(qū)塊所落入的存取碼范圍)通過相對(duì)較小的片段表不。
[0041]測(cè)暈偏差的概率
[0042]通過設(shè)計(jì),布隆過濾器之間的比較在片段對(duì)內(nèi)不能獲得任何偏差。例如,如果在副本A中的片段Al的區(qū)塊具有未包括在副本B的相應(yīng)片段BI中的存取碼K1,則片段Al和片段BI的布隆過濾器將會(huì)依然匹配直到片段BI具有至少一個(gè)其它的區(qū)塊,該至少一個(gè)其他的區(qū)塊具有存取碼被散列至與Kl相同的布隆過濾器位。因而,布隆過濾器的使用允許在出現(xiàn)不匹配之前屬于片段對(duì)的區(qū)塊間存在偏差。偏差量可以通過布隆過濾器的比較檢測(cè)到,并且受片段內(nèi)部的散列的數(shù)量(基數(shù))以及布隆過濾器的尺寸的影響。通常,在不匹配出現(xiàn)之間出現(xiàn)于布隆過濾器之間的偏差量隨著片段的基數(shù)而增加,以及響應(yīng)于布隆過濾器的尺寸的增加而減少。
[0043]為說明性目的,布隆過濾器的尺寸在此被稱為M。為創(chuàng)建尺寸為M的布隆過濾器,片段的存取碼被散列至與布隆過濾器內(nèi)的M個(gè)位對(duì)應(yīng)的M個(gè)桶。如果M過小,那么布隆過濾器中的每個(gè)位會(huì)為“ I ”,對(duì)表示片段是無用的。根據(jù)一個(gè)實(shí)施方式,當(dāng)確定M過小時(shí),會(huì)采取以下一種或者兩種方法來解決:
[0044].M被加倍,從而增加布隆過濾器出現(xiàn)零的可能性。
[0045]?片段被劃分成兩半,增加新創(chuàng)建的薄片段的布隆過濾器中出現(xiàn)零的可能性。
[0046]根據(jù)一個(gè)實(shí)施方式,加倍M和/或再分割片段的過程被重復(fù)直至最終的片段產(chǎn)生的布隆過濾器具有一些零。一旦布隆過濾器具有一些零(“Z”表示零的數(shù)目),則生成了布隆過濾器的片段的近似基數(shù)可以使用下述公式估計(jì):
[0047]近似_ 計(jì)數(shù)=-M*L0G (Z/Μ) (公式 I)
[0048]此外,片段的布隆過濾器將響應(yīng)于區(qū)塊存儲(chǔ)的添加而改變,其存取碼落入片段中的D個(gè)條目的概率:
[0049]P=1-(1-Z/M)**D (公式 2)
[0050]此外,對(duì)于尺寸為M的給定片段,如果兩個(gè)副本包括分別具有Zl個(gè)零和Z2個(gè)零的布隆過濾器,則對(duì)于該片段,兩個(gè)副本相差至少D個(gè)元素的概率大致為:
[0051]P=1-(1-Z/M)**D (其中 Z=MIN(Z1,Z2)) (公式 3)
[0052]確定哪個(gè)片段對(duì)是偏差的
[0053]如上所說明的,重要的是,有效地識(shí)別復(fù)制有相同區(qū)塊組的存儲(chǔ)庫中哪些片段對(duì)偏差超過某個(gè)閾值。那些片段對(duì)在此被稱為“偏差片段對(duì)”。基于上述公式,布隆過濾器可用于識(shí)別復(fù)制的區(qū)塊組的偏差片段對(duì)。
[0054]圖2A和圖2B是示出根據(jù)一種實(shí)施方式的使用布隆過濾器如何有效地識(shí)別偏差的片段對(duì)的流程圖。在圖2A和圖2B示出的實(shí)施方式中,在其之上片段對(duì)被認(rèn)為是偏差的閾值由兩個(gè)參數(shù)表示:D和TP。D是在它們被認(rèn)為是偏差之前在兩個(gè)相應(yīng)的片段之間必須不同的條目的最小數(shù)量,以及TP是兩個(gè)片段相差D個(gè)條目的目標(biāo)概率。 [0055]參照?qǐng)D2A,在步驟202,最初整個(gè)環(huán)被確定為“當(dāng)前片段對(duì)”。即,環(huán)本身被視為單個(gè)片段(N=0)。環(huán)300和302的該劃分如圖3B所示,其中環(huán)300和302的每一個(gè)相當(dāng)于單個(gè)片段(分別為片段A和B)。
[0056]在步驟204中,布隆過濾器的初始大小被設(shè)置為相對(duì)較小的值(例如,256)。在初始化步驟202和204之后,控制轉(zhuǎn)到其中為屬于當(dāng)前片段對(duì)的片段生成布隆過濾器的步驟206。
[0057]因?yàn)楫?dāng)前的片段對(duì)最初為整個(gè)環(huán),步驟206的第一次重復(fù)包括(a)基于在副本A中的所有區(qū)塊的存取碼生成256個(gè)位寬度的第一布隆過濾器BFl ;以及(b)基于在副本B中的所有區(qū)塊的存取碼生成256個(gè)位寬度的第二布隆過濾器BF2。
[0058]在步驟208,確定兩個(gè)布隆過濾器是否都可用。例如,如果布隆過濾器中的所有位為ls,則布隆過濾器是不可用的。因?yàn)楫?dāng)前的片段對(duì)是整個(gè)環(huán)(即,覆蓋每個(gè)副本中的所有區(qū)塊)并且布隆過濾器相對(duì)很小,可能在步驟208的第一次重復(fù)中,布隆過濾器是不可用的。SP,每個(gè)副本很可能包括存取碼落入256個(gè)散列桶中每個(gè)散列桶的至少一個(gè)區(qū)塊,256個(gè)散列桶對(duì)應(yīng)于布隆過濾器中的位。
[0059]如果布隆過濾器是不可用的,則在步驟210確定M是否在閾值(M_閾值)之上。M_閾值是布隆過濾器的最大可接受的大小。布隆過濾器的最大可接受的大小將基于相關(guān)系統(tǒng)的能力而改變。為了說明的目的,應(yīng)假SM_閾值是2**20位。然而,本文所描述的技術(shù)并不限于M_閾值的任何特定值。
[0060]在第一次重復(fù)中,M為小于2**20的256位,因此控制從步驟210進(jìn)行到步驟212。在步驟212,M被加倍,并且隨后控制返回到步驟206。因此,步驟206、208、210和212形成循環(huán),該循環(huán)被重復(fù)直至M達(dá)到M_閾值或在步驟206中產(chǎn)生的布隆過濾器是可用的。
[0061]為了說明的目的,應(yīng)假設(shè)在布隆過濾器可用之前,M達(dá)到了 M_閾值。因此,控制轉(zhuǎn)到其中屬于當(dāng)前片段對(duì)的片段被分成兩個(gè)并且將M除以2的步驟214。假設(shè)M_閾值是2**20,則在步驟214它將被設(shè)為2**19。
[0062]在步驟214的第一次重復(fù)中,片段A和B被分成兩個(gè)片段:覆蓋分割片段的存取碼值范圍的前一半的第一片段以及覆蓋分割片段的存取碼值范圍的后一半的第二片段。圖3C示出了其中片段A和B已經(jīng)被分別分割成片段Al、A2以及片段B1、B2的情形。
[0063]當(dāng)前片段對(duì)隨后被確定為覆蓋分割片段的存取碼值范圍的前一半的新創(chuàng)建的片段(來自每個(gè)環(huán)的其中一個(gè))。因此,在本實(shí)例中,片段Al和BI將被確定為當(dāng)前的片段對(duì)??刂齐S后返回到步驟206。
[0064]在步驟206,為屬于當(dāng)前片段對(duì)的片段生成布隆過濾器。因?yàn)楫?dāng)前片段對(duì)現(xiàn)在是環(huán)的前一半,因此步驟206包括基于片段Al (即,副本A中落入存取碼范圍的前一半的區(qū)塊的存取碼)生成布隆過濾器以及基于片段BI (即,副本B中落入存取碼范圍的前一半的的所有區(qū)塊的存取碼)生成布隆過濾器。
[0065]在步驟208,確定兩個(gè)布隆過濾器是否是可用的。如果布隆過濾器是不可用的,則控制轉(zhuǎn)到其中M被加倍(將M返回到M_閾值)的步驟210和212。在步驟206,使用新的M值為片段Al和BI生成新的布隆過濾器。如果在步驟208,布隆過濾器仍是不可用的,則控制轉(zhuǎn)到其中屬于當(dāng)前片段對(duì)的片段被再次分割的步驟210和214。在本實(shí)例中,如圖3D所示,片段Al和BI被分別分割成片段Al.1、Al.2以及B1.1、B1.2。
[0066]因此,步驟206、208、210、212和214形成循環(huán),在此循環(huán)期間,屬于當(dāng)前片段對(duì)的片段被重復(fù)地切成兩半,同時(shí)M在M_閾值與M_閾值/2之間浮動(dòng)直至兩個(gè)布隆過濾器都可用。為了說明的目的,應(yīng)假設(shè)當(dāng)M=M_閾值時(shí),片段Al.1和B1.1的布隆過濾器是可用的。因此,控制從步驟208轉(zhuǎn)到步驟220 (圖2B)。[0067]在步驟220,當(dāng)前對(duì)的布隆過濾器彼此比較以確定布隆過濾器間不同的位的數(shù)量。在步驟250,確定在位的差異是否小于D (在它們被認(rèn)為是偏差之前,在兩個(gè)相應(yīng)的片段之間必須不同的條目的最小數(shù)量)以及P (對(duì)應(yīng)于當(dāng)前片段對(duì)的區(qū)塊彼此相差至少N個(gè)條目的概率)是否小于TP (兩個(gè)片段相差D個(gè)條目的概率)。假定D,則可使用以上闡述的公式3來計(jì)算P的值。
[0068]如果差異〉D并且P〈TP,則當(dāng)前的片段對(duì)不被認(rèn)為是偏差的(步驟258)。隨后完成當(dāng)前片段對(duì)的處理,因此在步驟252確定是否有剩余未被處理的片段。為了說明的目的,應(yīng)假設(shè)Al.1和B1.1的布隆過濾器的比較滿足在步驟250執(zhí)行的測(cè)試,因此在步驟258當(dāng)前片段不被認(rèn)為是偏差的。
[0069]在步驟252,確定需要處理更多的片段對(duì)。具體地,在本實(shí)例中,片段對(duì)Al.2/Β1.2以及片段對(duì)Α2/Β2還未被處理。因此,在步驟280,選擇下一個(gè)片段對(duì)(例如,Al.2/Β1.2)以進(jìn)行處理,并且控制返回到步驟204 (圖2Α)。
[0070]隨后重復(fù)由步驟206至214定義的循環(huán),首先加倍Μ,然后再分割當(dāng)前片段對(duì)直至產(chǎn)生可用的布隆過濾器。為了說明的目的,應(yīng)假設(shè):為了獲得通過近似計(jì)數(shù)測(cè)試的可用布隆過濾器,片段Al.2和B1.2必需再被分割一次,從而產(chǎn)生如圖3Ε所示的片段Al.2.UAl.2.2以及 B1.2.UBl.2.2。
[0071]因此,第二時(shí)間控制從步驟208轉(zhuǎn)到步驟220,當(dāng)前片段對(duì)由片段Al.2.2和B1.2.1組成。在步驟220,比較片段Al.2.2和B1.2.1的布隆過濾器,并且在步驟250確定在布隆過濾器的位中的差異是否小于D以及P是否小于ΤΡ。
[0072]為了說明的目的,假設(shè)片段Al.2.2和B1.2.1的布隆過濾器不滿足在步驟250執(zhí)行的測(cè)試。因此,控制轉(zhuǎn)到步驟230。在步驟230,確定當(dāng)前片段的近似計(jì)數(shù)是否大于特定閾值(八(:_閾值)。在一種實(shí)施方式中,基于以上闡述的公式I確定近似計(jì)數(shù)。如果近似計(jì)數(shù)大于AC_閾值,則屬于當(dāng)前片段對(duì)的片段的基數(shù)太高(S卩,散列范圍覆蓋了太多區(qū)塊的存取碼)。在那些情況下,控制返回到其中屬于當(dāng)前片段對(duì)的片段被分割并且將M除以2的步驟 214。
[0073]另一方面,如果在步驟230,近似計(jì)數(shù)小于閾值,則在步驟254,當(dāng)前片段被認(rèn)為是偏差的,并且在步驟256,采取糾正措施。糾正措施可包括:例如,將落入當(dāng)前片段的副本A的存取碼與落入當(dāng)前片段的副本B的存取碼相比較(如在上面描述的ALG02)。隨后控制轉(zhuǎn)到其中確定是否有剩余要被處理的片段的步驟252。
[0074]通過采用本文描述的技術(shù),對(duì)于散列環(huán)的不同部分,再分割環(huán)的處理可停止在不同級(jí)別。例如,對(duì)于環(huán)的最終分割,可以如圖3E所示,其中一個(gè)片段覆蓋半個(gè)環(huán)、一個(gè)片段覆蓋四分之一環(huán)并且兩個(gè)片段分別覆蓋八分之一環(huán)。例如,這可以是其中副本A和B具有一些散列范圍中比其他散列范圍中存在顯著更多的組塊的情況。
[0075]閾值偏差參數(shù)
[0076]如上所述,圖2A和圖2B示出的偏差片段對(duì)處理被用于檢測(cè)D差異和TP概率的閾值參數(shù)化。因此,處理使副本“忽略”由于將在一點(diǎn)時(shí)間內(nèi)自然消失的微小差異(例如,時(shí)延引起的偏差)引起的噪聲。
[0077]應(yīng)被允許的偏差量可基于諸如復(fù)制組塊組的大小和在正常操作條件下經(jīng)歷的延遲量的特性,而在系統(tǒng)之間有所不同。盡管已經(jīng)描述了將D和TP用作用于指定可接受的偏差量的參數(shù)的具體技術(shù),但替代性實(shí)施方式可使用用于指示閾值的不同參數(shù)。
[0078]再分割片段
[0079]在圖2A和圖2B示出的實(shí)施方式中,當(dāng)片段太大(或者因?yàn)镸設(shè)置于M__值時(shí)片段產(chǎn)生不可用的布隆過濾器或因?yàn)榻朴?jì)數(shù)>AC_閾值)時(shí),片段被分成兩個(gè)并且M被平分,這兩個(gè)操作的結(jié)果在與之前的重復(fù)具有相同“效果”的下一個(gè)重復(fù)中產(chǎn)生布隆過濾器。當(dāng)片段是均勻的時(shí),布隆過濾器的大小將可能為2個(gè)子片段的每一個(gè)再次加倍。然而,當(dāng)子片段與其他副本非均勻地不同時(shí),與更少不同的子片段相比,處理將對(duì)更多不同的子片段進(jìn)行更多的操作。
[0080]當(dāng)確定當(dāng)前片段對(duì)太大時(shí),將當(dāng)前片段對(duì)分割成兩個(gè)并且將M除以2僅是可以采取的動(dòng)作的一個(gè)實(shí)例。例如,在替代性實(shí)施方式中,片段對(duì)可被分割成X個(gè)片段,以及可將M除以X。例如,在其中X是4的情況下,步驟214可包括將當(dāng)前片段對(duì)中的片段分割成四個(gè)片段并且將M除以4。
[0081]在某些實(shí)施方式中,片段被再分割成子片段的數(shù)量與除以M不是相同數(shù)量。例如,片段可被分割成4個(gè),而僅將M除以2。
[0082]在又一實(shí)施方式中,太大的片段被再分割成的片段的數(shù)量可基于各種因素而變化。例如,如果近似計(jì)數(shù)多于AC_閾值的兩倍,則片段可被再分割成4個(gè)。另一方面,如果近似計(jì)數(shù)多于AC_閾值但少于AC_閾值的兩倍,則片段可被再分割成兩個(gè)。
[0083]接近-全滿布隆過濾器
[0084]在圖2A-圖2B示出的實(shí)施方式中,布隆過濾器開始于“無用”(全部Is)并且僅當(dāng)零開始出現(xiàn)時(shí)使用。將布隆過濾器的大小(M)加倍將迅速增加零的數(shù)量,使得布隆過濾器更加有效,但造成更多的傳輸成本。在一種實(shí)施方式中,當(dāng)布隆過濾器具有較少的零時(shí)使用布隆過濾器,這保證了它們保持很小但提供足夠的信息來計(jì)算組的基數(shù)以及兩個(gè)布隆過濾器之間的差異。這從根本上不同于使用布隆過濾器的常規(guī)方式(即,接近-空的)。
[0085]在其中太大的片段被再分割的實(shí)施方式中,實(shí)施方式本質(zhì)上創(chuàng)建了布隆過濾器的層次結(jié)構(gòu),完善它們直至它們成為有用的。因此創(chuàng)建的布隆過濾器可通過對(duì)屬于聯(lián)合(union)的存儲(chǔ)器中的布隆過濾器進(jìn)行“或”運(yùn)算而被有效地計(jì)算。例如,可通過如下步驟計(jì)算副本A的整個(gè)環(huán)的布隆過濾器:(a)基于存儲(chǔ)器110上的區(qū)塊的存取碼生成第一布隆過濾器,(b)基于存儲(chǔ)器120上的區(qū)塊的存取碼生成第二布隆過濾器,以及(c)對(duì)第一和第二布隆過濾器進(jìn)行“或”運(yùn)算。
[0086]當(dāng)沿著環(huán)的分布是均勻的(最壞的情況),對(duì)于所有片段的所有布隆過濾器所需要的位的數(shù)量將是O (P),但相比使用Merkle樹的技術(shù)具有很小的O。
[0087]基于間隔邊界確定偏差
[0088]當(dāng)以上述方式為片段構(gòu)造布隆過濾器時(shí),在片段的布隆過濾器中的每個(gè)零指示片段不包含具有散列到零位的位置的存取碼的區(qū)塊。當(dāng)增加其存取碼(a)落入片段內(nèi)并且(b)散列到當(dāng)前是零的布隆過濾器位的位置的新區(qū)塊時(shí),在該位置的布隆過濾器位從零變?yōu)镮。因此,為片段增加新區(qū)塊最終使得在片段的布隆過濾器中從零跳躍至I。
[0089]為了說明的目的,應(yīng)該使用下列術(shù)語:
[0090].“zO” =在增加區(qū)塊之前,在片段的布隆過濾器中的零位的數(shù)量
[0091] ?“ δ ” =在片段的布隆過濾器中因?yàn)樵黾有聟^(qū)塊而從零變?yōu)镮的位的數(shù)量[0092]?“ζ1’ =在增加區(qū)塊之后,在片段的布隆過濾器中零位的數(shù)量
[0093].“d” =為使布隆過濾器的δ個(gè)位從零跳躍至I而增加的區(qū)塊的數(shù)量
[0094]基于這些定義,Zl=ZO-δ。換而言之,在增加區(qū)塊之后,片段的布隆過濾器相比于組塊增加之前具有“ S ”個(gè)更少的零。
[0095]根據(jù)一種實(shí)施方式,‘d’是片段之間的差異的數(shù)量的主度量,并且可基于zO、zUδ和M來估計(jì)。具體地,可基于d的可能的值的分布來估計(jì)d,d的可能的值導(dǎo)致產(chǎn)生特定δ值。中心(最大概率的)值是d=m.log(l+δ/zl),其中,log是自然對(duì)數(shù)。
[0096]然而,在某些情況下,該中心值不足夠精確,因?yàn)樵谒車嬖谧匀环植?。例如,如果?=0 (即,在布隆過濾器之間沒有出現(xiàn)差異),則d的最大可能值為0,但d=l或d=2或甚至d=100可完全以不同的概率導(dǎo)致觀測(cè)到δ=0差異。
[0097]由于使用d的單個(gè)值的潛在不準(zhǔn)確性,在一種實(shí)施方式中,為d計(jì)算捕捉到情況的目標(biāo)百分比的間隔值。為了說明的目的,使用捕捉到至少99.7%的情況的間隔(平均值的3個(gè)標(biāo)準(zhǔn)偏差)。該間隔的上邊界可隨后被用于驅(qū)動(dòng)用于確定對(duì)應(yīng)于片段對(duì)中的片段的兩個(gè)副本部分彼此相差是否超過特定的閾值的算法。圖5示出了一種這樣的算法。
[0098]參照?qǐng)D5,其是根據(jù)使用上述間隔的上邊界的實(shí)施方式的用于確定對(duì)應(yīng)于片段對(duì)中的片段的兩個(gè)副本部分彼此相差是否超過特定閾值的流程圖。具體地,圖5中示出的步驟確定片段對(duì)的兩個(gè)布隆過 濾器之間的實(shí)際差異d是否99.7%概率小于某些目標(biāo)‘t’,其中給出了 m、z0、zl和δ (其簡(jiǎn)單地是zO-zl)。
[0099]參照?qǐng)D5,在步驟500,確定目標(biāo)t是否<=δ。實(shí)際差異d的數(shù)量通常大于δ,因此t〈=S〈=d。因此,如果已經(jīng)跳過的零的數(shù)量(δ )等于或大于閾值(目標(biāo)t),則實(shí)際偏差必然大于閾值。因此,控制轉(zhuǎn)到其中確定偏差是否大于閾值的步驟502。
[0100]另一方面,如果目標(biāo)t大于δ,則控制轉(zhuǎn)到步驟504。在步驟504,ζ被確定為Min(zl,z2)。在步驟506,將ζ與m-0.875比較。如果ζ小于該值,則確定當(dāng)前的片段對(duì)包括過多的區(qū)塊(即,布隆過濾器具有過少的零而不能給出可靠的信息)。如果布隆過濾器具有過少的零,則增加M和/或分割片段以增加布隆過濾器中的零的密度,如在圖2的有關(guān)的步驟210、212和214中詳細(xì)說明的。
[0101]如果Z大于m-0.875,則控制轉(zhuǎn)到計(jì)算dmax的步驟510。如上所述,Dmax是具有包括實(shí)際值d的特定百分比概率的間隔的上邊界。在一種實(shí)施方式中,目標(biāo)概率被選擇為99.7%。以下參照?qǐng)D6說明計(jì)算dmax的方法。然而,本文描述的技術(shù)并不限于計(jì)算dmax的任何特定方法。
[0102]在步驟512,將t與在步驟510中計(jì)算的dmax比較。如果t〈=dmax,則控制從步驟512進(jìn)行到步驟502,并且對(duì)應(yīng)于當(dāng)前片段對(duì)的區(qū)塊組部分之間的偏差被確定為在閾值之上。另一方面,如果t大于dmax,則控制進(jìn)行到步驟514,并且對(duì)應(yīng)于當(dāng)前片段對(duì)的區(qū)塊組部分之間的偏差被確定為在閾值以下。
[0103]計(jì)算DMAX
[0104]如上所述,dmax是具有包括給定“ δ ”值和給定“Μ”值時(shí)的d的實(shí)際值所選的概率的間隔的上邊界。
[0105]P是假定α和δ個(gè)觀測(cè)到的布隆過濾器之間的差異時(shí),兩個(gè)片段恰好具有d個(gè)差異的概率。在一種實(shí)施方式中,用于該概率的公式是從基本的組合學(xué)(在該情況下,是二項(xiàng)式分布)獲得的。特別地,概率等于c(d,δ)*α~δ*(1-α)~((1-δ)。
[0106]其中C(d,δ)是從d中選擇出δ個(gè)對(duì)象的方式的數(shù)量。根據(jù)一種實(shí)施方式,計(jì)算C(d, δ)的公式是
[0107]C(d, δ )=d!/( δ !*(d-δ ) !)
[0108]其中,η!是η的階乘,即,從I至η的所有整數(shù)的乘積:η! =1*2*3...*η。
[0109]因?yàn)楸磉_(dá)式不具有閉合的數(shù)學(xué)形式,所以在圖6中示出的步驟提供了 dmax在α和δ的值的整個(gè)范圍內(nèi)的良好數(shù)學(xué)近似。特別地,在步驟604,計(jì)算C(d,δ),其中,C(d,δ)是d個(gè)元素中δ個(gè)選擇的組合的數(shù)量。
[0110]參照?qǐng)D6,在步驟600,確定ζ (在布隆過濾器中的零位的數(shù)量)與m的比率。該比率在本文中稱為“α”。α的值在O與I之間,其中對(duì)于不具有零的布隆過濾器,α=0,以及對(duì)于全零的布隆過濾器,α=1。
[0111]在步驟602,dmax最初被確定為δ / α,其四舍五入到最接近的整數(shù)。
[0112]在步驟606, P 被計(jì)算為 C (d, δ ) * α ~ δ * (1-a ) ~ (d_ δ )。
[0113]在步驟608,dmax的當(dāng)前值增加1.31/(α*Ρ)。
[0114]在步驟610,確定α是否大于0.4。如果α大于0.4,則處理完成(步驟612)。 [0115]另一方面,在步驟610,如果確定α不大于0.4,則控制進(jìn)行到其中確定δ是否為零的步驟614。如果δ=0,則在步驟616,為dmax增加(5.59481/α-4.16179)。
[0116]如果在步驟614,δ>0,則在步驟 618,c 被設(shè)為(-518.045 α '4+347.889 α "3-69.2756 α ~2+1.00577 α +4.65148)。
[0117]在步驟620, e 被設(shè)為 3.84+ (c_3.84) / δ 0
[0118]在步驟622, dmax 增加(e/ α )。
[0119]可替換的
[0120]在圖2A和2B中示出的實(shí)施方式僅僅是布隆過濾器用于如何識(shí)別區(qū)塊組的副本之間的偏差的一個(gè)示例。例如,在可替換的實(shí)施方式中,首先進(jìn)行的嘗試為按優(yōu)先順序排序?qū)⒁劢褂谀膫€(gè)子片段,通過使用公式3以排序首先對(duì)哪個(gè)片段進(jìn)行操作。
[0121 ] 在其它的實(shí)施方式中,可以通過決定將M加倍或基于不同的因子將片段分成兩個(gè)的過程來處理過大的片段。在一個(gè)實(shí)施方式中,M可以保持固定,并且只有片段被再分。仍在另一個(gè)實(shí)施方式中,片段的大小可以保持固定,以及根據(jù)需要將M加倍,但沒有限制。
[0122]此外,如上所述,片段不必是散列環(huán)的2分?jǐn)?shù)指數(shù)。因此,當(dāng)再分時(shí),片段可以以任何方式被再分。此外,M可以以其他方式而非兩倍增加。例如,M的尺寸增加可基于為相似尺寸的片段產(chǎn)生可用的布隆過濾器的布隆過濾器尺寸。
[0123]在圖2A和2B中示出的實(shí)施方式,在開始測(cè)試每個(gè)新的片段對(duì)時(shí),M被設(shè)定為同一最小值。然而,在可替換的實(shí)施方式中,在測(cè)試了特定數(shù)量的片段對(duì)之后,可以增加在步驟204中所使用的最小值。例如,假設(shè)在處理環(huán)的四分之一后,最小的可用布隆過濾器具有1024位,那么在步驟204中所使用的最小值可以增加至512 (先前遇到的最小可用布隆過濾器的尺寸的一半)。
[0124]仍作為另一可替換的,在所有片段上D不必保持恒定。因此,過程的不同結(jié)束都是可行的,例如,通過使D隨著片段尺寸來變化。在其它的實(shí)施方式中,近乎滿的布隆過濾器被用來使用不同于上述的那些算法遞歸的不同算法來識(shí)別副本的片段之間的偏差。因此,本文中所描述的技術(shù)不限于任何具體的遞歸算法,但適用于近乎滿的過濾器被用來對(duì)哈希環(huán)的哪部分經(jīng)歷了副本間的足夠偏差以便于進(jìn)行糾正動(dòng)作而做出決定的任意情況。
[0125]硬件概沭
[0126]根據(jù)一個(gè)實(shí)施方式,本文中所描述的技術(shù)通過一個(gè)或多個(gè)特定用途計(jì)算設(shè)備來實(shí)施。該特定用途計(jì)算設(shè)備可以是硬連接的以執(zhí)行該技術(shù),或者可以包括被持續(xù)編程為執(zhí)行該技術(shù)的數(shù)字電子設(shè)備,諸如一個(gè)或多個(gè)專用集成電路(ASIC)或現(xiàn)場(chǎng)可編程門陣列(FPGA),或者可以包括一個(gè)或多個(gè)通用硬件處理器,其可被編程為根據(jù)固件、存儲(chǔ)器,其它存儲(chǔ)或組合中的程序指令來執(zhí)行該技術(shù)。這種特定用途計(jì)算設(shè)備也可以將定制的硬連接邏輯、ASIC或FPGA與自定義編程相組合以完成該技術(shù)。
[0127]該特定目的的計(jì)算設(shè)備可以是臺(tái)式計(jì)算機(jī)系統(tǒng)、便攜式計(jì)算機(jī)系統(tǒng)、手持設(shè)備、聯(lián)網(wǎng)設(shè)備或結(jié)合有用于實(shí)施本技術(shù)的硬連線和/或程序邏輯的任何其它設(shè)備。具有計(jì)算能力的任何便攜式設(shè)備可以被用來實(shí)施本文中所描述的技術(shù),包括但不限于諸如平板電腦,手機(jī),PDA等移動(dòng)設(shè)備。
[0128]圖4是示出了在其上可以實(shí)施本發(fā)明的實(shí)施方式的計(jì)算機(jī)系統(tǒng)400的框圖。計(jì)算機(jī)系統(tǒng)400包括:用于傳送信息的總線402或其他通信裝置;以及與總線402耦接的硬件處理器404,以用于處理信息。例如,硬件處理器404可以是通用微處理器。
[0129]計(jì)算機(jī)系統(tǒng)400還包括耦接至總線402的主存儲(chǔ)器406,諸如隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)單元,以用于存儲(chǔ)信息和由處理器404來執(zhí)行的指令。在通過處理器404執(zhí)行待執(zhí)行的指令期間,主存儲(chǔ)器406還可以被用于存儲(chǔ)臨時(shí)變量或其它中間信息。當(dāng)這種指令被存儲(chǔ)在處理器404可訪問的非臨時(shí)性存儲(chǔ)介質(zhì)中時(shí),這種指令使計(jì)算機(jī)系統(tǒng)400變成被定制用于執(zhí)行指令中指定的操作的特定用途機(jī)器。
[0130]計(jì)算機(jī)系統(tǒng)400進(jìn)一步包括用于存儲(chǔ)靜態(tài)信息和用于處理器404執(zhí)行的指令的、耦接至總線402的只讀存儲(chǔ)器(ROM) 408或其他靜態(tài)存儲(chǔ)單元。諸如磁盤或光盤的存儲(chǔ)單元410被提供用于存儲(chǔ)信息和指令并且耦接至總線402。
[0131]計(jì)算機(jī)系統(tǒng)400可以經(jīng)由總線402耦接至諸如陰極射線管(CRT)的顯示器412,該顯示器412用于將信息顯示給計(jì)算機(jī)用戶。包括字母數(shù)字鍵和其它鍵的輸入設(shè)備414被耦接至總線402,以用于將信息和命令選擇傳送至處理器404。另一種類型的用戶輸入設(shè)備是光標(biāo)控制416,諸如鼠標(biāo)、軌跡球或光標(biāo)方向鍵,以用于將方向信息和命令選擇傳送至處理器404,并且用于在顯示器412控制光標(biāo)移動(dòng)。此輸入設(shè)備通常具有在兩個(gè)軸線(第一軸(例如,X)和第二軸(例如,y))上的兩個(gè)自由度,其允許設(shè)備在平面中指定位置。
[0132]計(jì)算機(jī)系統(tǒng)400可以使用定制的硬線邏輯、一個(gè)或多個(gè)ASIC或FPGA、固件和/或與計(jì)算機(jī)系統(tǒng)組合產(chǎn)生的程序邏輯或者將計(jì)算機(jī)系統(tǒng)400編程成為特定目的的機(jī)器來實(shí)施本文中所描述的技術(shù)。根據(jù)一個(gè)實(shí)施方式,通過對(duì)執(zhí)行包含在主存儲(chǔ)器406中的一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列的處理器404做出響應(yīng),計(jì)算機(jī)系統(tǒng)400來執(zhí)行本文中的技術(shù)。這樣的指令可以從諸如存儲(chǔ)單元410的另一存儲(chǔ)介質(zhì)讀入主存儲(chǔ)器406。執(zhí)行包含在主存儲(chǔ)器406中的指令的序列促使處理器404執(zhí)行本文中所描述的處理步驟。在可替換的實(shí)施方式中,可以使用硬線電路替代軟件指令或與軟件指令組合。
[0133]如本文中所使用的術(shù)語“存儲(chǔ)介質(zhì)”指代用于存儲(chǔ)數(shù)據(jù)和/或使機(jī)器以特定的方式操作的指令的任何非臨時(shí)性介質(zhì)。這樣的存儲(chǔ)介質(zhì)可以包括非易失性介質(zhì)和/或易失性介質(zhì)。例如,非易失性介質(zhì)包括光盤或磁盤,諸如存儲(chǔ)單元410。易失性介質(zhì)包括動(dòng)態(tài)存儲(chǔ)器,諸如主存儲(chǔ)器406。例如,存儲(chǔ)介質(zhì)的常見形式包括軟盤、柔性磁盤、硬盤、固態(tài)驅(qū)動(dòng)器、磁帶、或任何其它磁性數(shù)據(jù)存儲(chǔ)介質(zhì)、CD-ROM、任何其它光學(xué)數(shù)據(jù)存儲(chǔ)介質(zhì)、具有孔圖案的任何物理介質(zhì)、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存儲(chǔ)器芯片或盒式磁帶。
[0134]存儲(chǔ)介質(zhì)不同于傳輸介質(zhì)但可以結(jié)合傳輸介質(zhì)來使用。傳輸介質(zhì)參與在存儲(chǔ)介質(zhì)之間傳遞信息。例如,傳輸介質(zhì)包括同軸電纜、銅線和光纖,包括包含總線402的電線。傳輸介質(zhì)還可以采用聲波或光波的形式,例如在無線電波和紅外數(shù)據(jù)通信期間所生成的那些。
[0135]不同形式的媒體可以包括將一個(gè)或多個(gè)指令的一個(gè)或多個(gè)序列攜帶至用于執(zhí)行的處理器404。例如,最初可以在遠(yuǎn)程計(jì)算機(jī)的固態(tài)驅(qū)動(dòng)器或磁盤上承載指令。遠(yuǎn)程計(jì)算機(jī)可以將指令加載至其動(dòng)態(tài)存儲(chǔ)器中并且使用調(diào)制解調(diào)器通過電話線發(fā)送指令。計(jì)算機(jī)系統(tǒng)400本地的調(diào)制解調(diào)器可以接收電話線上的數(shù)據(jù)并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換為紅外信號(hào)。紅外檢測(cè)器可以接收在紅外信號(hào)中攜帶的數(shù)據(jù)并且適當(dāng)?shù)碾娐房梢詫?shù)據(jù)放置在總線402上。總線402將數(shù)據(jù)攜帶至主存儲(chǔ)器406,處理器404從主存儲(chǔ)器406獲得并執(zhí)行該指令。通過主存儲(chǔ)器406接收的指令在通過處理器404執(zhí)行之前或之后可以可選地存儲(chǔ)在存儲(chǔ)單元410上。
[0136]計(jì)算機(jī)系統(tǒng)400還包括耦接到總線402的通信接口 418。耦接至網(wǎng)絡(luò)鏈路420的通信接口 418提供了雙向數(shù)據(jù)通信,該網(wǎng)絡(luò)鏈路420被連接至本地網(wǎng)絡(luò)422。例如,通信接口 418可以是綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)卡、電纜調(diào)制解調(diào)器、衛(wèi)星調(diào)制解調(diào)器或用于提供連接至相應(yīng)類型的電話線的數(shù)據(jù)通信的調(diào)制解調(diào)器。作為另一示例,通信接口 418可以是局域網(wǎng)(LAN)卡,用于提供數(shù)據(jù)通信連接至兼容的LAN。無線鏈路也可以被實(shí)施。在任何這樣的實(shí)施中,通信接口 418發(fā)送并接收攜帶表示不同類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號(hào)。
[0137]網(wǎng)絡(luò)鏈路420通常通過一個(gè)或多個(gè)網(wǎng)絡(luò)向其他數(shù)據(jù)設(shè)備提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路420可以通過本地網(wǎng)絡(luò)422提供至主機(jī)計(jì)算機(jī)424或通過互聯(lián)網(wǎng)服務(wù)提供商(ISP)426操作的數(shù)據(jù)設(shè)備的連接。ISP426進(jìn)而通過現(xiàn)在通常稱之為“因特網(wǎng)”428的全球分組數(shù)據(jù)通信網(wǎng)絡(luò)提供數(shù)據(jù)通信服務(wù)。本地網(wǎng)絡(luò)422和因特網(wǎng)428兩者均使用承載數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號(hào)。通過不同的網(wǎng)絡(luò)的信號(hào)和網(wǎng)絡(luò)鏈路420上并且通過通信接口 418的信號(hào)是傳輸媒體的示例形式,其中信號(hào)將數(shù)字?jǐn)?shù)據(jù)攜帶至計(jì)算機(jī)系統(tǒng)400并且攜帶來自計(jì)算機(jī)系統(tǒng)400中的信號(hào)。
[0138]計(jì)算機(jī)系統(tǒng)400可以通過網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路420和通信接口 418發(fā)送消息和接收數(shù)據(jù),包括程序代碼。在因特網(wǎng)示例中,服務(wù)器430可通過互聯(lián)網(wǎng)428、ISP 426、本地網(wǎng)絡(luò)422和通信接口 418傳輸應(yīng)用程序的所請(qǐng)求的代碼。
[0139]隨著代碼被接收,所接收的代碼可以由處理器404來執(zhí)行和/或存儲(chǔ)在存儲(chǔ)單元410中或其它非易失性存儲(chǔ)器中以用于稍后執(zhí)行。
[0140]在前述說明中,參照可以在實(shí)施方式之間變化的大量的特定細(xì)節(jié)已描述了本發(fā)明的實(shí)施方式。因此,本說明書和附圖被認(rèn)為是說明性的,而非限制性含義。本發(fā)明的范圍的唯一和排他的指示是從申請(qǐng)所公布的權(quán)利要求書的字面上和等同的范圍,并且其是 申請(qǐng)人:想要的本發(fā)明的范圍,在這樣的權(quán)利要求發(fā)布的特性形式中,包括任意后續(xù)的修改。
【權(quán)利要求】
1.一種方法,包括: 基于落入第一片段中的存取碼生成第一布隆過濾器; 其中,所述第一片段與區(qū)塊組的第一副本的第一部分相對(duì)應(yīng); 基于落入第二片段中的存取碼生成第二布隆過濾器; 其中,所述第二片段與所述區(qū)塊組的第二副本的第二部分相對(duì)應(yīng); 在所述第一布隆過濾器與所述第二布隆過濾器之間執(zhí)行比較;以及基于所述比較,確定所述第一副本的所述第一部分與所述第二副本的所述第二部分之間偏差是否超過特定閾值; 其中,所述方法通過一個(gè)或多個(gè)計(jì)算設(shè)備來執(zhí)行。
2.根據(jù)權(quán)利要求1所述的方法 ,進(jìn)一步包括: 確定屬于特定片段對(duì)的片段過大; 對(duì)確定出屬于特定片段對(duì)的片段過大做出響應(yīng),將屬于所述特定片段對(duì)中的每個(gè)片段分成多個(gè)子片段; 其中,所述多個(gè)子片段包括所述第一片段和所述第二片段。
3.根據(jù)權(quán)利要求2所述的方法,其中,確定屬于所述特定片段對(duì)的片段過大的步驟包括確定由屬于所述特定片段對(duì)的所述片段產(chǎn)生的布隆過濾器具有過少的零。
4.根據(jù)權(quán)利要求2所述的方法,其中,確定屬于所述特定片段對(duì)的所述片段過大的步驟包括: 估計(jì)屬于所述特定片段對(duì)的所述片段的基數(shù);以及 確定所述基數(shù)超過特定閾值。
5.根據(jù)權(quán)利要求1所述的方法,其中,確定所述第一副本的所述第一部分與所述第二副本的所述第二部分之間是否偏差至少部分基于在所述第一布隆過濾器與所述第二布隆過濾器之間存在多少個(gè)不同的位。
6.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 基于為特定片段對(duì)生成的布隆過濾器來確定屬于所述特定片段對(duì)的片段過大; 其中,為所述特定片段對(duì)生成的所述布隆過濾器具有第一尺寸; 對(duì)確定出屬于所述特定片段對(duì)的片段過大做出響應(yīng),將屬于所述特定片段對(duì)的每個(gè)所述片段分為多個(gè)子片段; 其中,所述多個(gè)子片段包括所述第一片段和所述第二片段;以及 其中,所述第一布隆過濾器和所述第二布隆過濾器具有小于所述第一尺寸的第二尺寸。
7.根據(jù)權(quán)利要求6所述的方法,其中,基于為所述特定片段對(duì)生成的所述布隆過濾器具有過少的零,確定屬于所述特定片段對(duì)的所述片段過大。
8.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 基于落入所述第一片段中的存取碼生成第三布隆過濾器; 基于落入所述第二片段中的存取碼生成第四布隆過濾器; 基于所述第三布隆過濾器和所述第四布隆過濾器,確定用來比較所述第一片段與所述第二片段的布隆過濾器的尺寸是否增加; 其中,對(duì)確定出用來比較所述第一片段與所述第二片段的布隆過濾器的尺寸應(yīng)該增加作出響應(yīng),生成所述第一布隆過濾器和所述第二布隆過濾器; 其中,所述第一布隆過濾器和所述第二布隆過濾器大于所述第三布隆過濾器和所述第四布隆過濾器。
9.根據(jù)權(quán)利要求8所述的方法,其中,確定用來比較所述第一片段與所述第二片段的所述布隆過濾器的尺寸是否增加至少部分基于在所述第三布隆過濾器和所述第四布隆過濾器中有多少個(gè)零。
10.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括:對(duì)確定出所述第一副本的所述第一部分與所述第二副本的所述第二部分間的偏差超過了特定閾值做出響應(yīng),執(zhí)行糾正措施以減少所述第一部分與所述第二部分之間的偏差。
11.根據(jù)權(quán)利要求10所述的方法,其中,所述糾正措施包括將屬于所述第一部分的區(qū)塊的存取碼與屬于所述第二部分的區(qū)塊的存取碼進(jìn)行比較。
12.—種非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),所述非臨時(shí)性計(jì)算機(jī)可讀介質(zhì)存儲(chǔ)有被一個(gè)或多個(gè)處理器執(zhí)行時(shí)使方法被執(zhí)行的指令,所述方法包括: 基于落入第一片段中的存取碼生成第一布隆過濾器; 其中,所述第一片段與區(qū)塊組的第一副本的第一部分相對(duì)應(yīng); 基于落入第二片段中的存取碼生成第二布隆過濾器; 其中,所述第二片段與所述區(qū)塊組的第二副本的第二部分相對(duì)應(yīng); 在所述第一布隆過濾器與所述第二布隆過濾器之間執(zhí)行比較;以及基于所述比較,確定所述第一副本的所述第一部分與所述第二副本的所述第二部分之間的偏差是否超過特定閾值。
13.根據(jù)權(quán)利要求12所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,所述方法進(jìn)一步包括: 確定屬于特定片段對(duì)的片段過大; 對(duì)確定出屬于特定片段對(duì)的片段過大做出響應(yīng),將屬于所述特定片段對(duì)的每個(gè)所述片段分為多個(gè)子片段; 其中,所述多個(gè)子片段包括所述第一片段和所述第二片段。
14.根據(jù)權(quán)利要求13所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,確定屬于所述特定片段對(duì)的片段過大的步驟包括確定由屬于所述特定片段對(duì)的所述片段產(chǎn)生的布隆過濾器具有過少的零。
15.根據(jù)權(quán)利要求13所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,確定屬于所述特定片段對(duì)的片段過大的步驟包括: 估計(jì)屬于所述特定片段對(duì)的所述片段的基數(shù);以及 確定所述基數(shù)超過特定閾值。
16.根據(jù)權(quán)利要求12所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,確定所述第一副本的所述第一部分與所述第二副本的所述第二部分偏差至少部分基于在所述第一布隆過濾器與所述第二布隆過濾器之間有多少個(gè)不同的位。
17.根據(jù)權(quán)利要求12所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,所述方法進(jìn)一步包括: 基于為特定片段對(duì)生成的布隆過濾器來確定屬于所述特定片段對(duì)的片段過大; 其中,為所述特定片段對(duì)生成的所述布隆過濾器具有第一尺寸; 對(duì)確定出屬于特定片段對(duì)的片段過大做出響應(yīng),將屬于所述特定片段對(duì)的每個(gè)所述片段分為多個(gè)子片段; 其中,所述多個(gè)子片段包括所述第一片段和所述第二片段;以及 其中,所述第一布隆過濾器和所述第二布隆過濾器具有小于所述第一尺寸的第二尺寸。
18.根據(jù)權(quán)利要求17所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,基于為所述特定片段對(duì)生成的所述布隆過濾器具有過少零,確定屬于所述特定片段對(duì)的所述片段過大。
19.根據(jù)權(quán)利要求12所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,所述方法進(jìn)一步包括: 基于落入所述第一片段中的存取碼生成第三布隆過濾器; 基于落入所述第二片段中的存取碼生成第四布隆過濾器; 基于所述第三布隆過濾器和所述第四布隆過濾器,確定用來比較所述第一片段與所述第二片段的布隆過濾器的尺寸是否增加; 其中,響應(yīng)于確定出用來比較所述第一片段與所述第二片段的布隆過濾器的尺寸應(yīng)該增加,生成所述第一布隆過濾器和所述第二布隆過濾器; 其中,所述第一布隆過濾器與所述第二布隆過濾器大于所述第三布隆過濾器和所述第四布隆過濾器。
20.根據(jù)權(quán)利要求19所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,確定用來比較所述第一片段與所述第二片段的所述布隆過濾器的尺寸是否增加至少部分基于在所述第三布隆過濾器和所述第四布隆過濾器中有多少個(gè)零。
21.根據(jù)權(quán)利要求12所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,所述方法進(jìn)一步包括:對(duì)確定出所述第一副本的所述第一部分與所述第二副本的所述第二部分間的偏差超過特定閾值做出響應(yīng),執(zhí)行糾正措施以減少所述第一部分與所述第二部分之間的偏差。
22.根據(jù)權(quán)利要求21所述的非臨時(shí)性計(jì)算機(jī)可讀介質(zhì),其中,所述糾正措施包括將屬于所述第一部分的區(qū)塊的存取碼與屬于所述第二部分的區(qū)塊的存取碼進(jìn)行比較。
23.—種系統(tǒng),包括: 一個(gè)或多個(gè)存儲(chǔ)設(shè)備,存儲(chǔ)區(qū)塊組的第一副本和所述區(qū)塊組的第二副本; 一個(gè)或多個(gè)計(jì)算設(shè)備,被配置為通過執(zhí)行以下步驟來檢測(cè)所述第一副本與所述第二副本之間的偏差何時(shí)超過特定閾值: 基于落入第一片段中的存取碼生成第一布隆過濾器; 其中,所述第一片段與所述區(qū)塊組的所述第一副本的第一部分相對(duì)應(yīng); 基于落入第二片段中的存取碼生成第二布隆過濾器; 其中,所述第二片段與所述區(qū)塊組的所述第二副本的第二部分相對(duì)應(yīng);
在所述第一布隆過濾器與所述第二布隆過濾器之間執(zhí)行比較;以及基于所述比較,確定所述第一副本的第一部分與所述第二副本的所述第二部分的偏差是否超過所述特定閾值。
【文檔編號(hào)】G06F11/14GK103902408SQ201310741125
【公開日】2014年7月2日 申請(qǐng)日期:2013年12月27日 優(yōu)先權(quán)日:2012年12月27日
【發(fā)明者】伯特蘭·塞爾勒特, 路易斯·莫尼耶 申請(qǐng)人:阿普賽爾有限公司