建立搜索引擎的組合算符的制作方法
【專利摘要】本發(fā)明涉及建立搜索引擎的組合算符。管理數(shù)據(jù)庫(kù)系統(tǒng)的方法包括搜索引擎。該數(shù)據(jù)庫(kù)系統(tǒng)從數(shù)據(jù)庫(kù)系統(tǒng)中的一個(gè)或多個(gè)節(jié)點(diǎn)接收N個(gè)請(qǐng)求。在開始操作之前組合該N個(gè)請(qǐng)求,以處理請(qǐng)求。減少處理請(qǐng)求的操作的數(shù)量,并執(zhí)行減少了數(shù)量的操作。該搜索引擎包括利用了蜂群算法的分散的蜂群系統(tǒng)。該N個(gè)請(qǐng)求包括N個(gè)增加請(qǐng)求,以向存儲(chǔ)在數(shù)據(jù)庫(kù)系統(tǒng)中的行增加一個(gè)值。組合N個(gè)請(qǐng)求包括將增加請(qǐng)求組合到數(shù)據(jù)庫(kù)系統(tǒng)中存儲(chǔ)的行;以及執(zhí)行該減少了數(shù)量的操作包括執(zhí)行下述操作,即對(duì)于少于N個(gè)處理中的N個(gè)增加請(qǐng)求,增加數(shù)據(jù)庫(kù)系統(tǒng)中存儲(chǔ)的行中的值。
【專利說明】建立搜索引擎的組合算符
[0001]本申請(qǐng)是申請(qǐng)?zhí)枮?01080037040.3、申請(qǐng)日為2010年06月21日、發(fā)明名稱為“可
擴(kuò)展的集群數(shù)據(jù)庫(kù)”的PCT國(guó)際發(fā)明專利申請(qǐng)的分案申請(qǐng)。
【技術(shù)領(lǐng)域】
[0002]本應(yīng)用涉及數(shù)字計(jì)算或數(shù)據(jù)處理的領(lǐng)域,其包括數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫(kù)/文件訪問和管理,尤其是用于分布式數(shù)據(jù)庫(kù)系統(tǒng)中的傳播,搜索和檢索數(shù)據(jù)。
【背景技術(shù)】
[0003]分布式數(shù)據(jù)庫(kù)系統(tǒng)可以用于存儲(chǔ)和訪問聯(lián)網(wǎng)結(jié)構(gòu),例如大型集群,分布式計(jì)算系統(tǒng),局域網(wǎng),互聯(lián)網(wǎng)和其他信息檢索系統(tǒng)中的大規(guī)模數(shù)據(jù)。分布式數(shù)據(jù)庫(kù)系統(tǒng)包括存儲(chǔ)和處理設(shè)備,其典型地由中央數(shù)據(jù)庫(kù)管理系統(tǒng)管理和控制。中央數(shù)據(jù)庫(kù)管理系統(tǒng)可以存儲(chǔ)在位于相同物理位置的多個(gè)計(jì)算機(jī)中,也可以分散在互聯(lián)的計(jì)算機(jī)網(wǎng)絡(luò)中。
[0004]由中央數(shù)據(jù)庫(kù)管理系統(tǒng)控制的分布式數(shù)據(jù)庫(kù)系統(tǒng)受多種原因限制。如果主機(jī)故障,即使主機(jī)是容錯(cuò)的,中央主機(jī)控制管理功能的事實(shí)也會(huì)導(dǎo)致暫時(shí)不可用。并且,諸如網(wǎng)絡(luò)分區(qū)的問題經(jīng)常引起集群中至少一部分不可用。最后,用于主機(jī)容錯(cuò)的算法,例如Paxos,經(jīng)常需要大量的時(shí)間從故障中恢復(fù),在此期間,系統(tǒng)部分或全部不可用。具有中央主機(jī)也可能損害可擴(kuò)展性。
[0005]在大規(guī)模分布式系統(tǒng)中,由于異常情況,例如網(wǎng)絡(luò)斷開和電源故障,系統(tǒng)設(shè)備會(huì)頻繁故障或失去網(wǎng)絡(luò)連接。面對(duì)這些頻繁故障,確保連續(xù)的系統(tǒng)可用性對(duì)于提供良好、等待時(shí)間短的操作是非常重要的。
[0006]分布式數(shù)據(jù)庫(kù)系統(tǒng)的另一個(gè)問題是支持高寫速率的困難。即使像在具有許多網(wǎng)絡(luò)服務(wù)器的網(wǎng)站上計(jì)算點(diǎn)擊次數(shù)這樣簡(jiǎn)單的事情在今天看來也是個(gè)難題。由于記錄文件分析非常昂貴,導(dǎo)致其經(jīng)常不能實(shí)時(shí)完成。統(tǒng)計(jì)數(shù)據(jù),例如訪問網(wǎng)站的獨(dú)特顧客的數(shù)量的產(chǎn)生是
非常昂貴的。
[0007]今天在應(yīng)用的尤其是應(yīng)答搜索查詢中的分布式數(shù)據(jù)庫(kù)中,存在許多問題。搜索引擎對(duì)于在大型的文檔數(shù)據(jù)庫(kù)中定位文檔,例如萬維網(wǎng)(WWW)上的文檔,或局域網(wǎng)的計(jì)算機(jī)上存儲(chǔ)的文檔,提供了有力的工具。響應(yīng)于用戶提交的搜索查詢,定位文檔。搜索查詢由一個(gè)或多個(gè)搜索詞組成。需要的是用于從數(shù)據(jù)庫(kù)有效地和更智能地抽取相關(guān)信息的創(chuàng)新型技術(shù)。比僅僅是輸入幾個(gè)搜索詞更智能的查詢搜索引擎的能力對(duì)于今天的搜索引擎來說是更大的進(jìn)步。查詢結(jié)果的顯示也可以使用這種改進(jìn)。
【發(fā)明內(nèi)容】
[0008]根據(jù)本公開的一個(gè)方面,涉及一種在數(shù)據(jù)庫(kù)系統(tǒng)中計(jì)數(shù)項(xiàng)目的方法,包括:在具有一個(gè)或多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)系統(tǒng)處,包括,一個(gè)或多個(gè)處理器和存儲(chǔ)器,所述一個(gè)或多個(gè)節(jié)點(diǎn)的存儲(chǔ)器存儲(chǔ)要由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序;識(shí)別1個(gè)項(xiàng)目;計(jì)數(shù)M個(gè)項(xiàng)目中獨(dú)特的項(xiàng)目;確定用于M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的記錄計(jì)數(shù);和存儲(chǔ)獨(dú)特項(xiàng)目的記錄計(jì)數(shù),其中確定記錄計(jì)數(shù)包括:將M個(gè)項(xiàng)目中每個(gè)獨(dú)特的項(xiàng)目分為N個(gè)部分的集合,其中每個(gè)N個(gè)部分包括M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的子集,其中獨(dú)特項(xiàng)目的每個(gè)子集表述為位值;對(duì)于M個(gè)項(xiàng)目的每個(gè)子集,找到N個(gè)部分中每一個(gè)的最低未設(shè)定位;對(duì)于N個(gè)部分的集合中獨(dú)特項(xiàng)目的每個(gè)子集,設(shè)定N個(gè)中間值中的最低位;對(duì)于N個(gè)部分的每個(gè)集合,將N個(gè)中間值的最低未設(shè)定位的值進(jìn)行平均;以及將平均值作為二次冪表達(dá)的對(duì)數(shù)值進(jìn)行應(yīng)用。
[0009]該方法還包括:將平均值作為二次冪表達(dá)的對(duì)數(shù)值進(jìn)行應(yīng)用之后,在數(shù)據(jù)庫(kù)的存儲(chǔ)器中存儲(chǔ)所述N個(gè)中間值。
[0010]其中,確定記錄計(jì)數(shù)還包括確定該組獨(dú)特項(xiàng)目的近似計(jì)數(shù)的精度近似等于正負(fù)50%。
[0011]其中,N個(gè)中間值中較大的位值相對(duì)于較小的位值,更不可能被設(shè)置。
[0012]其中,N個(gè)部分的集合中每個(gè)N個(gè)部分包括32位,所需的總共的記錄計(jì)數(shù)存儲(chǔ)器包括128位。
[0013]其中,M個(gè)項(xiàng)目包括網(wǎng)站的導(dǎo)入鏈接的URL。
[0014]其中,M個(gè)項(xiàng)目包括具有給定簽名,用于檢測(cè)垃圾郵件的電子郵件的收件人-
[0015]其中,M個(gè)項(xiàng)目包括具有給定簽名,用于檢測(cè)來自僵尸網(wǎng)絡(luò)的垃圾郵件的電子郵件發(fā)件人的C類IP網(wǎng)絡(luò)。
[0016]其中,M個(gè)項(xiàng)目包括鏈接網(wǎng)頁的網(wǎng)頁的地理位置。
[0017]其中,M個(gè)項(xiàng)目包括互聯(lián)網(wǎng)服務(wù)器的IP子網(wǎng),其中該互聯(lián)網(wǎng)服務(wù)器包含鏈接網(wǎng)頁的網(wǎng)頁。
[0018]根據(jù)本公開的另一個(gè)方面,涉及一種在數(shù)據(jù)庫(kù)系統(tǒng)中計(jì)數(shù)項(xiàng)目的方法,包括:在具有一個(gè)或多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)系統(tǒng)處,包括一個(gè)或多個(gè)處理器和存儲(chǔ)器,所述一個(gè)或多個(gè)節(jié)點(diǎn)的存儲(chǔ)器存儲(chǔ)要由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序;識(shí)別1個(gè)項(xiàng)目;計(jì)數(shù)M個(gè)項(xiàng)目中獨(dú)特的項(xiàng)目;確定用于M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的記錄計(jì)數(shù);存儲(chǔ)獨(dú)特項(xiàng)目的記錄計(jì)數(shù),其中確定記錄計(jì)數(shù)包括:將M個(gè)項(xiàng)目中每個(gè)獨(dú)特的項(xiàng)目分為N個(gè)部分的集合,其中每個(gè)N個(gè)部分包括M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的子集,和其中獨(dú)特項(xiàng)目的每個(gè)子集表述為位值;對(duì)于M個(gè)項(xiàng)目的每個(gè)子集,找到N個(gè)部分中每一個(gè)的最低未設(shè)定位;利用任意指數(shù)式衰減因數(shù),選擇在N個(gè)中間值中設(shè)定哪個(gè)位,對(duì)于N個(gè)部分的每個(gè)集合來說,將N個(gè)中間值的最低未設(shè)定位的值進(jìn)行平均;以及將平均值作為以與任意指數(shù)衰減因數(shù)相關(guān)的任意底數(shù)表達(dá)的對(duì)數(shù)值進(jìn)行應(yīng)用。
[0019]其中,N個(gè)中間值中較大的位值相對(duì)于較小的位值,更不可能被設(shè)置。
[0020]其中,N個(gè)部分的集合中每個(gè)N個(gè)部分包括32位,所需的總共的記錄計(jì)數(shù)存儲(chǔ)器包括128位。
[0021 ] 其中,M個(gè)項(xiàng)目包括網(wǎng)站的導(dǎo)入鏈接的URL。
[0022]其中,M個(gè)項(xiàng)目包括具有給定簽名,用于檢測(cè)垃圾郵件的電子郵件的收件人。
【專利附圖】
【附圖說明】
[0023]為了更好的理解本申請(qǐng)中所述的實(shí)施例,應(yīng)當(dāng)結(jié)合附圖,參照下面的【具體實(shí)施方式】,其中在所有附圖中,相似的參考標(biāo)記表示對(duì)應(yīng)的部分。
[0024]圖1是根據(jù)一些實(shí)施例的分布式網(wǎng)絡(luò)系統(tǒng)的框圖;[0025]圖2是根據(jù)一些實(shí)施例的具有多個(gè)集群的分布式數(shù)據(jù)庫(kù)系統(tǒng)的框圖;
[0026]圖3A是用于示意分布式數(shù)據(jù)庫(kù)系統(tǒng)中主機(jī)系統(tǒng)的框圖;
[0027]圖3B是根據(jù)一些實(shí)施例的分布式數(shù)據(jù)庫(kù)系統(tǒng)中蜂群(swarm)系統(tǒng)的框圖;
[0028]圖4是根據(jù)一些實(shí)施例,用于示意向蜂群系統(tǒng)中節(jié)點(diǎn)的集群增加新節(jié)點(diǎn)的框圖;
[0029]圖5A和5B是根據(jù)一些其他實(shí)施例,用于示意分布式數(shù)據(jù)庫(kù)的蜂群系統(tǒng)的框圖;
[0030]圖5C是根據(jù)一些實(shí)施例,用于示意集群中節(jié)點(diǎn)網(wǎng)架(rack)的框圖;
[0031]圖6A-6C是根據(jù)一些實(shí)施例的蜂群系統(tǒng)中映射和分配存儲(chǔ)桶(bucket)的框圖;
[0032]圖7A-7C是根據(jù)一些實(shí)施例的如何在分布式數(shù)據(jù)庫(kù)中組織和存儲(chǔ)數(shù)據(jù)的框圖;
[0033]圖8是根據(jù)一些實(shí)施例,用于示意蜂群系統(tǒng)中數(shù)據(jù)交換的框圖;
[0034]圖9是根據(jù)一些實(shí)施例的分布式數(shù)據(jù)庫(kù)系統(tǒng)中獲取操作的框圖;
[0035]圖10是根據(jù)一些實(shí)施例的分布式數(shù)據(jù)庫(kù)系統(tǒng)中處理獲取請(qǐng)求的流程圖;
[0036]圖11是根據(jù)一些其他實(shí)施例的在分布式數(shù)據(jù)庫(kù)系統(tǒng)中處理請(qǐng)求的流程圖;
[0037]圖12是根據(jù)一些實(shí)施例的在分布式數(shù)據(jù)庫(kù)系統(tǒng)中修復(fù)和管理存儲(chǔ)桶的過程的流程圖;
[0038]圖13A是根據(jù)一些實(shí)施例,用于示意在蜂群系統(tǒng)350,500中如何刪除文件的框圖;
[0039]圖13B是根據(jù)一些實(shí)施例,用于示意并行映射作業(yè)過程的框圖;
[0040]圖14A是根據(jù)一些實(shí)施例的組合算符(combinator)工具的集合;
[0041]圖14B是根據(jù)一些實(shí)施例,用于示意在分布式數(shù)據(jù)庫(kù)系統(tǒng)中用于節(jié)點(diǎn)的加法組合算符的框圖;
[0042]圖15是根據(jù)一些實(shí)施例,示意在分布式數(shù)據(jù)庫(kù)系統(tǒng)中用于寫入三個(gè)存儲(chǔ)桶復(fù)制的組合算符的框圖;
[0043]圖16A是根據(jù)一些實(shí)施例,用于示意TopN排名的數(shù)據(jù)結(jié)構(gòu)的圖示;
[0044]圖16B是根據(jù)一些實(shí)施例,用于示意在分布式數(shù)據(jù)庫(kù)系統(tǒng)中概念性的記錄計(jì)數(shù)(Logcount)結(jié)構(gòu)和過程的圖示;
[0045]圖16C是根據(jù)一些實(shí)施例的,利用記錄計(jì)數(shù)對(duì)一組獨(dú)特的項(xiàng)目進(jìn)行計(jì)數(shù)的過程的流程圖;
[0046]圖17A是根據(jù)一些實(shí)施例,用于示意映射數(shù)據(jù)位置的數(shù)據(jù)結(jié)構(gòu)的框圖;
[0047]圖17B是根據(jù)一些實(shí)施例的映射的本地化子集的框圖;
[0048]圖18是根據(jù)一些實(shí)施例的服務(wù)器的框圖;
[0049]圖19是根據(jù)一些實(shí)施例的,在圖17的服務(wù)器中守護(hù)進(jìn)程(daemon)工具的集合;
[0050]圖20是根據(jù)一些實(shí)施例的客戶端計(jì)算機(jī)的框圖;
[0051]圖21是根據(jù)一些實(shí)施例的搜索查詢框的屏幕顯示的示例;
[0052]圖22A是根據(jù)一些實(shí)施例的搜索結(jié)果的屏幕顯示的示例;
[0053]圖22B-22C是根據(jù)一些實(shí)施例的在搜索結(jié)果中列出的搜索結(jié)果項(xiàng)目的示例;
[0054]圖23是根據(jù)一些實(shí)施例的用于搜索結(jié)果的RSS頁面的屏幕顯示的示例;
[0055]圖24A-24B是根據(jù)一些實(shí)施例的用于搜索結(jié)果的鏈接頁面的屏幕顯示的示例;
[0056]圖25是根據(jù)一些實(shí)施例的用于搜索結(jié)果的高速緩存頁面的屏幕顯示的示例;
[0057]圖26是根據(jù)一些實(shí)施例的用于搜索結(jié)果的源頁面的屏幕顯示的示例;[0058]圖27是根據(jù)一些實(shí)施例的擴(kuò)展的搜索結(jié)果列表的屏幕顯示的示例;
[0059]圖28是根據(jù)一些實(shí)施例的用于搜索結(jié)果的SEO頁面的屏幕顯示的示例;
[0060]圖29A-29B是根據(jù)一些其他實(shí)施例的搜索結(jié)果的屏幕顯示的示例;
[0061]圖30A-30B是根據(jù)一些其他實(shí)施例的搜索結(jié)果的屏幕顯示的示例;
[0062]圖31和32是根據(jù)一些實(shí)施例的用于搜索數(shù)據(jù)庫(kù)系統(tǒng)的可視化工具的屏幕顯示的示例。
【具體實(shí)施方式】
[0063]現(xiàn)在詳細(xì)參照實(shí)施例,其示例結(jié)合附圖示意。在下述的詳細(xì)描述中,為了充分理解這里提供的發(fā)明主題,提出了許多特定的細(xì)節(jié)。但是對(duì)于本領(lǐng)域技術(shù)人員顯而易見的是該主題在沒有這些特定細(xì)節(jié)的情況下也可以實(shí)施。并且,通過示例提供這里描述的特殊的實(shí)施例,其不應(yīng)將本發(fā)明的保護(hù)范圍限制在這些特殊實(shí)施例中。在其他情況下,沒有詳細(xì)描述公知的數(shù)據(jù)結(jié)構(gòu)、時(shí)間協(xié)議、軟件操作、程序和組件,以避免不必要地混淆本發(fā)明實(shí)施例的方面。
[0064]A.結(jié)構(gòu)概況
[0065]圖1是根據(jù)實(shí)施例的分布式網(wǎng)絡(luò)系統(tǒng)100的框圖。具有多個(gè)節(jié)點(diǎn)(服務(wù)器)142A-N的一個(gè)或多個(gè)集群140A-N和客戶端110連接至通信網(wǎng)絡(luò)130。
[0066]客戶端110可以是任意數(shù)量的設(shè)備(例如,計(jì)算機(jī),互聯(lián)網(wǎng)展示亭,個(gè)人數(shù)字助手,移動(dòng)電話,游戲設(shè)備,臺(tái)式計(jì)算機(jī),平板電腦或手提計(jì)算機(jī))。客戶端110可以包括客戶端應(yīng)用132,客戶端助手134,和/或客戶端存儲(chǔ)器136??蛻舳藨?yīng)用132可以是軟件應(yīng)用,其允許用戶和客戶端110和/或網(wǎng)絡(luò)資源交互以執(zhí)行一個(gè)或多個(gè)任務(wù)。例如,客戶端應(yīng)用132可以是網(wǎng)絡(luò)瀏覽器或其他類型的應(yīng)用(例如,搜索引擎應(yīng)用),其允許用戶搜索,瀏覽,和/或使用位于集群140A-N中節(jié)點(diǎn)142的資源(例如,網(wǎng)頁和網(wǎng)絡(luò)服務(wù))。節(jié)點(diǎn)142的資源可以由客戶端110經(jīng)由通信網(wǎng)絡(luò)130訪問??蛻舳酥?34可以是軟件應(yīng)用,其針對(duì)客戶端應(yīng)用132和/或其他應(yīng)用,執(zhí)行一個(gè)或多個(gè)涉及監(jiān)視或輔助用戶活動(dòng)的任務(wù)。例如,客戶端助手134輔助用戶在客戶端110瀏覽由網(wǎng)站上的資源(例如,文件);處理由節(jié)點(diǎn)142產(chǎn)生的信息項(xiàng)目(例如,搜索結(jié)果);和/或監(jiān)視用戶對(duì)于搜索結(jié)果的活動(dòng)。在一些實(shí)施例中,客戶端助手134是客戶端應(yīng)用132的一部分,用作客戶端應(yīng)用132的插件或擴(kuò)展部分(例如,從各種在線資源提供),而在其他一些實(shí)施例中,客戶端助手134是與客戶端應(yīng)用132分離的獨(dú)立的程序。在一些實(shí)施例中,客戶端助手134嵌入在一個(gè)或多個(gè)網(wǎng)頁中,或嵌入在從一個(gè)或多個(gè)服務(wù)器,例如節(jié)點(diǎn)142下載的文檔中??蛻舳舜鎯?chǔ)器136可以存儲(chǔ)信息,例如網(wǎng)頁,從節(jié)點(diǎn)142接收的搜索結(jié)果,系統(tǒng)信息,和/或有關(guān)用戶的信息。
[0067]在一些實(shí)施例中,每個(gè)集群140包括用于存儲(chǔ),組織和訪問信息的多個(gè)節(jié)點(diǎn)142,其中所述信息例如是從網(wǎng)頁和互聯(lián)網(wǎng)中提取的信息。但是,信息可以任何類型的數(shù)據(jù)或元數(shù)據(jù),其包括但不限于,文檔,文件,表格,日志,媒體文件,數(shù)字?jǐn)?shù)據(jù),等等。在一些實(shí)施例,節(jié)點(diǎn)142由其所屬的集群140組織,但是,在其他實(shí)施例中,節(jié)點(diǎn)142可以成組和類別的組織和訪問,該組和類別不依賴于其所屬的集群140。在一些實(shí)施例中,每個(gè)集群140A-N中的節(jié)點(diǎn)142在每個(gè)集群140內(nèi)被分類或組織為子組。每個(gè)集群140A-N可以位于單個(gè)地理位置。但是,單個(gè)集群140A可以擴(kuò)展到多個(gè)地理位置,或者多個(gè)集群140A-N可以擴(kuò)展到多個(gè)地理位置。因此,集群和節(jié)點(diǎn)的概念與節(jié)點(diǎn)142的物理組織相關(guān),也與節(jié)點(diǎn)142的抽象或虛擬組織相關(guān)。
[0068]在一些實(shí)施例中,節(jié)點(diǎn)142利用蜂群算法在離散系統(tǒng)中自行組織。在其他實(shí)施例中,實(shí)施蜂群算法以組織一個(gè)或多個(gè)集群140或節(jié)點(diǎn)142使得節(jié)點(diǎn)142在本地彼此交互,以及與它們的環(huán)境交互。蜂群算法允許節(jié)點(diǎn)142彼此通信并通過通信鏈路150彼此合作以在數(shù)據(jù)庫(kù)環(huán)境內(nèi)完成各種任務(wù),而不依賴主機(jī)節(jié)點(diǎn)。
[0069]通信網(wǎng)絡(luò)130可以是任意有線或無線的本地局域網(wǎng)(LAN),城市局域網(wǎng),和/或廣域網(wǎng)(WAN),例如內(nèi)部互聯(lián)網(wǎng),外聯(lián)網(wǎng),或互聯(lián)網(wǎng),或者它可以是這些網(wǎng)絡(luò)的組合。由通信網(wǎng)絡(luò)130在集群140、節(jié)點(diǎn)142之間,以及在集群140和客戶端110之間提供通信能力是足夠的。在一些實(shí)施例中,通信網(wǎng)絡(luò)130通過傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(TCP/IP),使用超文本傳輸協(xié)議(HTTP)傳送信息。HTTP允許客戶端計(jì)算機(jī)通過通信網(wǎng)絡(luò)130訪問各種可用的文件。但是,本發(fā)明的各種實(shí)施例不限于使用任何特殊協(xié)議。在本說明書中使用的術(shù)語“文檔”是指可以從集群140訪問的任何信息或服務(wù),其可以是,例如,網(wǎng)頁,某種格式的文件,數(shù)據(jù)庫(kù)記錄,圖像,計(jì)算目標(biāo),或其他信息項(xiàng)目。
[0070]圖2是根據(jù)一些實(shí)施例的分布式數(shù)據(jù)庫(kù)系統(tǒng)200的框圖,其包括多個(gè)集群240。與集群140類似,每個(gè)集群240A-N包括一組節(jié)點(diǎn)242A-N。在一些實(shí)施例中,集群240通過集群連接器220彼此耦合,其中集群連接器可以是有線的或無線的。集群連接器220具有在系統(tǒng)200的集群240之間通信的能力。由集群連接器220建立的連接可以是內(nèi)聯(lián)網(wǎng)或外聯(lián)網(wǎng),它可以使得本地系統(tǒng)200經(jīng)由通信網(wǎng)絡(luò)130連接至互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)或外聯(lián)網(wǎng),或者它可以構(gòu)造為允許這些網(wǎng)絡(luò)的組合。系統(tǒng)200可以包括幾個(gè)集群240A-B或許多集群240A-N。集群240可以位于單個(gè)地理位置或擴(kuò)展至多個(gè)地理位置。在其他實(shí)施例,系統(tǒng)200中的單個(gè)集群240可以擴(kuò)展至多個(gè)地理位置。如圖1和2所示,本發(fā)明的各種實(shí)施例不限于任何特殊的網(wǎng)絡(luò)系統(tǒng)。
[0071]B.結(jié)構(gòu)級(jí)別
[0072]蜂群vs.主機(jī)
[0073]圖3A是用于示意分布式數(shù)據(jù)庫(kù)系統(tǒng)(未示出)中主機(jī)節(jié)點(diǎn)310的框圖。大多集群數(shù)據(jù)庫(kù)系統(tǒng)選擇單個(gè)節(jié)點(diǎn)312 (利用例如Paxos的系統(tǒng))作為“主機(jī)”。主機(jī)節(jié)點(diǎn)312典型地保留了數(shù)據(jù)庫(kù)中的所有文件,包括表格,控制/狀態(tài)信息,映射,以及當(dāng)前文件位置。主機(jī)節(jié)點(diǎn)312也控制全系統(tǒng)活動(dòng),并管理其他節(jié)點(diǎn)314a-e以通信指令,管理復(fù)制,請(qǐng)求更新,以及其他管理任務(wù)??蛻舳?未示出)典型地必須通過主機(jī)節(jié)點(diǎn)312以訪問存儲(chǔ)在其他節(jié)點(diǎn)314a_e的數(shù)據(jù),或者向其他節(jié)點(diǎn)314a_e發(fā)送請(qǐng)求。主機(jī)系統(tǒng)310中的數(shù)據(jù)庫(kù)操作非常耗時(shí),這是因?yàn)閷?duì)于節(jié)點(diǎn)314的每個(gè)指令都必須通過主機(jī)節(jié)點(diǎn)312。例如,為了發(fā)送讀取(或獲取)操作的指令,時(shí)間花費(fèi)在,在主機(jī)節(jié)點(diǎn)312從客戶端(未示出)接收請(qǐng)求后,需要將指令通過通信鏈接320發(fā)送至服務(wù)節(jié)點(diǎn),例如節(jié)點(diǎn)4314d。在請(qǐng)求提供至客戶端之前,當(dāng)節(jié)點(diǎn)4314d通過通信鏈路324向主機(jī)節(jié)點(diǎn)312返回請(qǐng)求響應(yīng)時(shí),要花費(fèi)更多的時(shí)間。另夕卜,進(jìn)一步的延遲會(huì)由于節(jié)點(diǎn)故障引起,在節(jié)點(diǎn)故障期間,讀取或?qū)懭霐?shù)據(jù)庫(kù)必須典型地等到故障被解決或者資源重新分配以彌補(bǔ)故障。延遲的一部分包括主機(jī)節(jié)點(diǎn)312確定故障位置的時(shí)間,以及與其他節(jié)點(diǎn)314通信指令以彌補(bǔ)故障的時(shí)間。
[0074]圖3B是根據(jù)一些實(shí)施例的分布式數(shù)據(jù)庫(kù)系統(tǒng)(未示出)中蜂群系統(tǒng)350的框圖。通常,蜂群系統(tǒng)350中的蜂群算法產(chǎn)生許多節(jié)點(diǎn)352a-e彼此協(xié)作而沒有主機(jī)節(jié)點(diǎn)例如主機(jī)節(jié)點(diǎn)312的環(huán)境。蜂群系統(tǒng)350是可擴(kuò)展的集群數(shù)據(jù)庫(kù),其中該數(shù)據(jù)庫(kù)的許多算法是蜂群算法。蜂群系統(tǒng)350中的獨(dú)立節(jié)點(diǎn)352在不利用主機(jī)節(jié)點(diǎn),例如主機(jī)節(jié)點(diǎn)312協(xié)調(diào)的情況下,可以做出群體決定。蜂群環(huán)境的生物示例是昆蟲群。取代依賴來自主機(jī)或一些中央智能機(jī)的引導(dǎo)或?qū)颍ハx群能夠以在使用其環(huán)境時(shí)優(yōu)化可用的資源的方式彼此指引。群體做出決定,而不是單獨(dú)地或通過組內(nèi)某一單個(gè)成員做出決定。例如,蟻群利用信息素來開發(fā)它們的環(huán)境并彼此指引至資源。蜜蜂同時(shí)在多個(gè)方向飛行很長(zhǎng)的距離尋找食物。類似地,蜂群系統(tǒng)350中的節(jié)點(diǎn)352可以展示復(fù)雜的群體行為,無論其構(gòu)成的有限智力和有限協(xié)調(diào)。蜂群系統(tǒng)350具有高容錯(cuò)性和高可用性,這部分地由于缺少主機(jī)節(jié)點(diǎn),其中主機(jī)節(jié)點(diǎn)的故障會(huì)引起其他系統(tǒng)中斷。
[0075]蜂群數(shù)據(jù)庫(kù)系統(tǒng)350實(shí)施“寬松的最終一致性”方法。這代表普通的數(shù)據(jù)庫(kù)一致性的ACID模型(原子性、一致性、分離和對(duì)偶性)的一些取舍,用以提供更高的性能。對(duì)于其他具有“最終一致性”的數(shù)據(jù)庫(kù)來說,在寫入后立即回讀數(shù)據(jù)經(jīng)常產(chǎn)生穩(wěn)定的應(yīng)答,或者延遲后的新數(shù)據(jù)的最終讀取。但是,蜂群數(shù)據(jù)庫(kù)系統(tǒng)350在一定意義上是“寬松的”,使得其不能對(duì)于數(shù)據(jù)庫(kù)中的一小部分?jǐn)?shù)據(jù)變得一致。盡管有小部分失效,但是蜂群系統(tǒng)350是高性能的數(shù)據(jù)檢索和管理系統(tǒng),其也可以在沒有顯著的人為干涉的情況下自動(dòng)運(yùn)行。具有寬松的最終一致性的蜂群數(shù)據(jù)庫(kù)系統(tǒng)350是恰當(dāng)?shù)挠糜谥T如搜索引擎應(yīng)用的數(shù)據(jù)庫(kù)模型。
[0076]在一些實(shí)施例中,節(jié)點(diǎn)352a_e中的每一個(gè)構(gòu)造為具有相似的容量和功能使得沒有單個(gè)節(jié)點(diǎn)352統(tǒng)治任意其他節(jié)點(diǎn)352。在其他實(shí)施例中,節(jié)點(diǎn)352構(gòu)造為具有可變的容量,不過,蜂群350中的每個(gè)節(jié)點(diǎn)352具有相等的功能。在一些實(shí)施例中,節(jié)點(diǎn)352通過通信鏈路354,356彼此直接通信。每個(gè)節(jié)點(diǎn)352能夠和蜂群350中的任意一個(gè)節(jié)點(diǎn)352通信。每個(gè)節(jié)點(diǎn)352能夠接收寫入指令,并當(dāng)從例如客戶端(未示出)接收讀取請(qǐng)求時(shí),能夠響應(yīng)該請(qǐng)求。在一些實(shí)施例中,節(jié)點(diǎn)352彼此通過通信鏈路354,356發(fā)送狀態(tài)報(bào)告以報(bào)告文件數(shù)量,文件類型,接收新文件的可行性,修補(bǔ)項(xiàng)目以及其他與群體組相關(guān)的狀況。因此,蜂群350群體地獲知每個(gè)文件的位置,以響應(yīng)讀取請(qǐng)求,以及獲知每個(gè)節(jié)點(diǎn)352的可用性以確定節(jié)點(diǎn)352中的哪個(gè)可以接收寫入請(qǐng)求。
[0077]蜂群操作:映射
[0078]在一些實(shí)施例中,通過所有已知節(jié)點(diǎn)352經(jīng)由通信鏈路354,356進(jìn)行一系列一對(duì)一的數(shù)據(jù)交換來分配映射信息,識(shí)別在各個(gè)節(jié)點(diǎn)352中所有行的位置。交換的映射數(shù)據(jù)包括位于每個(gè)節(jié)點(diǎn)352的存儲(chǔ)桶。在節(jié)點(diǎn)352從其他所有節(jié)點(diǎn)接聽后,節(jié)點(diǎn)352具有完整的可以找到任意行的映射。
[0079]蜂群操作:增加節(jié)點(diǎn)
[0080]圖4是根據(jù)一些實(shí)施例,用于示意增加至蜂群小區(qū)400中集群節(jié)點(diǎn)412的新節(jié)點(diǎn)416的結(jié)構(gòu)框圖。在一些實(shí)施例中,通信鏈路150,354,356是標(biāo)準(zhǔn)的以太網(wǎng)廣播,其在蜂群小區(qū)400的有線以太網(wǎng)上傳播。在其他實(shí)施例中,通信鏈路150,354,356可以是任意無線通信,例如無線LAN,其他RF通信,或任意前述的通信方法。節(jié)點(diǎn)412a-n通過廣播420交流它們各自的狀態(tài)信息。廣播420可以遵循任意數(shù)量的通信協(xié)議。例如,廣播420可以是短距離的廣播協(xié)議,其用于查找局域網(wǎng)系統(tǒng)中的設(shè)備。但是,本發(fā)明的各種實(shí)施例不限于適用于任何特殊的通信鏈路或任意類型的協(xié)議。[0081]當(dāng)新節(jié)點(diǎn)416增加至蜂群小區(qū)400時(shí),廣播420用于定位新節(jié)點(diǎn)416。新節(jié)點(diǎn)416通過廣播422宣告“我在這里”,指示其已經(jīng)加入蜂群小區(qū)400。節(jié)點(diǎn)412a-n通過廣播420確認(rèn)接收宣告,新節(jié)點(diǎn)416準(zhǔn)備好接收蜂群小區(qū)400的工作。廣播機(jī)制允許所有節(jié)點(diǎn)412通過單個(gè)網(wǎng)絡(luò)包的傳輸發(fā)現(xiàn)新節(jié)點(diǎn)416。用于接收增加至小區(qū)的新節(jié)點(diǎn),例如節(jié)點(diǎn)416的廣播協(xié)議,不需要向新節(jié)點(diǎn)416裝載列出了所有節(jié)點(diǎn)的配置文件。因此,配置增加至小區(qū)400的任意新節(jié)點(diǎn)所需的僅是該廣播協(xié)議,即“零配置”。另外,零配置協(xié)議不需要為小區(qū)400中的所有節(jié)點(diǎn)412更新或分配更新的配置文件。因此,節(jié)點(diǎn)412,416不受下述發(fā)生在配置文件中的一般錯(cuò)誤的影響,其中該一般錯(cuò)誤例如為編碼錯(cuò)誤,上載延遲,運(yùn)行和保留配置文件,以及剩余有效節(jié)點(diǎn)未使用。
[0082]由于在沒有配置文件和附加編碼的情況下,多個(gè)新節(jié)點(diǎn),例如節(jié)點(diǎn)416可以增加至小區(qū)400,因此,蜂群小區(qū)400的群體特征允許更大的可擴(kuò)展性。由于在最小人為干涉(例如工程師和技工)的情況下,設(shè)備可以并入蜂群小區(qū)400,因此,當(dāng)增加更多節(jié)點(diǎn)時(shí),蜂群小區(qū)400允許均勻安裝。蜂群小區(qū)400也被配置為處理更大的容錯(cuò)以處理節(jié)點(diǎn)故障,并恰當(dāng)?shù)鼐哂邢率霾糠置枋龅膹?fù)制和修復(fù)協(xié)議。因此,盡管存在常規(guī)故障,蜂群小區(qū)400中的節(jié)點(diǎn)412可以更連續(xù)和可靠的運(yùn)行。
[0083]蜂群操作:數(shù)據(jù)復(fù)制
[0084]圖5A和5B是根據(jù)一些其他實(shí)施例,用于示意分布式數(shù)據(jù)庫(kù)的蜂群系統(tǒng)500的框圖。在一些實(shí)施例中,蜂群系統(tǒng)500包括復(fù)制協(xié)議,用于將任何信息(例如,接收或產(chǎn)生的信息)復(fù)制到至少三個(gè)不同的位置,其中每個(gè)位置稱為“存儲(chǔ)桶”。每當(dāng)表格的一行被寫入或更新時(shí),其被寫入或更新至所有恰當(dāng)?shù)拇鎯?chǔ)桶的副本。系統(tǒng)500中每個(gè)表都有其應(yīng)當(dāng)具有多少副本的目標(biāo)。在寫入時(shí),寫入這些表中的行被發(fā)送至所有副本。這個(gè)目標(biāo)可以隨時(shí)改變,如果需要的話,守護(hù)進(jìn)程會(huì)處理制作行的額外拷貝。例如,在蜂群系統(tǒng)500a中,第一個(gè)數(shù)據(jù)復(fù)制Rl被拷貝到節(jié)點(diǎn)1552a,第二個(gè)數(shù)據(jù)復(fù)制R2被拷貝到節(jié)點(diǎn)3552c,第三個(gè)數(shù)據(jù)復(fù)制R3被拷貝到節(jié)點(diǎn)2552b。在一些實(shí)施例中,當(dāng)接收信息時(shí),自動(dòng)發(fā)生信息復(fù)制。在其他實(shí)施例中,當(dāng)符合某種參數(shù)或條件時(shí),發(fā)生信息復(fù)制。在一些實(shí)施例中,蜂群系統(tǒng)500具有恰當(dāng)?shù)膮f(xié)議或分配的守護(hù)進(jìn)程,以檢查和保持副本R1-R3,以至于在所有時(shí)間,有效的、可利用的信息復(fù)制是可用的。可以理解的是,節(jié)點(diǎn)552a-e能夠如通信鏈路554,556所示的彼此直接通信。每個(gè)節(jié)點(diǎn)552能夠與蜂群500a中的任何一個(gè)節(jié)點(diǎn)552通信信息,以及從任何一個(gè)節(jié)點(diǎn)552接收信息。但是,為了簡(jiǎn)單起見,沒有示出所有可能的通信鏈路。例如,雖然未示出,節(jié)點(diǎn)1552a可以從節(jié)點(diǎn)5552e接收信息和發(fā)送信息至節(jié)點(diǎn)5552e,節(jié)點(diǎn)3552c可以從節(jié)點(diǎn)4552d接收信息和發(fā)送信息至節(jié)點(diǎn)4552d。
[0085]在一些實(shí)施例中,節(jié)點(diǎn)552中的每一個(gè)被分割為存儲(chǔ)元素或“存儲(chǔ)桶”,由節(jié)點(diǎn)552中每一個(gè)存儲(chǔ)和保留的表映射該分割。在一些實(shí)施例中,存儲(chǔ)桶的分配是指節(jié)點(diǎn)552中每一個(gè)的行空間的分割。在其他實(shí)施例中,存儲(chǔ)桶的分配是多個(gè)節(jié)點(diǎn)552的物理空間概念上的分割。蜂群系統(tǒng)500中的存儲(chǔ)桶的位置使得沒有兩個(gè)相同的存儲(chǔ)桶的副本位于相同的節(jié)點(diǎn)552上。如前所述,集群140,240通??梢允且唤M概念上的設(shè)備,但是不總對(duì)應(yīng)于節(jié)點(diǎn)142,242,552 (例如,服務(wù)器或其他存儲(chǔ)設(shè)備)的物理分組。該存儲(chǔ)桶(其復(fù)制三次)存儲(chǔ)在三個(gè)不同的節(jié)點(diǎn)552a,552b,552c。該定位使得每個(gè)節(jié)點(diǎn)至多具有一個(gè)特殊存儲(chǔ)桶的副本。這允許在不影響任何信息的兩個(gè)以上副本的情況下,在節(jié)點(diǎn)552上每次執(zhí)行一個(gè)系統(tǒng)管理任務(wù)(例如重啟動(dòng))。
[0086]圖5C是根據(jù)一些實(shí)施例,用于示意集群570中節(jié)點(diǎn)580-584的網(wǎng)架572-576的框圖。在一些實(shí)施例中,節(jié)點(diǎn)580-584被分組,稱為網(wǎng)架572-576,其將節(jié)點(diǎn)580-584的物理位置對(duì)應(yīng)于物理網(wǎng)架,或不對(duì)應(yīng)(例如,網(wǎng)架的邏輯組織,虛擬節(jié)點(diǎn)的組織,等等)。存儲(chǔ)桶的副本,例如將存儲(chǔ)桶B放置在節(jié)點(diǎn)580a,582c, 584a,使得存儲(chǔ)桶B僅有一個(gè)副本落在網(wǎng)架572-576中。這允許每次在集群570的一個(gè)網(wǎng)架上執(zhí)行系統(tǒng)管理任務(wù),且確保任意數(shù)據(jù)的兩個(gè)副本可用。
[0087]在一些實(shí)施例中,一組節(jié)點(diǎn)對(duì)應(yīng)于一個(gè)以上的物理網(wǎng)架,這稱為“存儲(chǔ)區(qū)(zone)”。換言之,與單個(gè)網(wǎng)架相關(guān)聯(lián)的節(jié)點(diǎn)也可以和存儲(chǔ)區(qū)關(guān)聯(lián),該存儲(chǔ)區(qū)包括屬于其他物理網(wǎng)架的其他節(jié)點(diǎn)。存儲(chǔ)區(qū)對(duì)于將節(jié)點(diǎn)分組來說很方便,其使得用于一個(gè)以上物理網(wǎng)架的物理組件的故障僅引起每個(gè)存儲(chǔ)桶的至多一個(gè)副本損失。例如,在一些情況下,單個(gè)網(wǎng)絡(luò)交換機(jī)服務(wù)于3個(gè)網(wǎng)架。實(shí)際上,為了使得每次完成的系統(tǒng)管理工作量最大,可以使用目標(biāo)復(fù)制等級(jí)3將數(shù)據(jù)庫(kù)的節(jié)點(diǎn)組織為4個(gè)存儲(chǔ)區(qū)。可以理解,一個(gè)存儲(chǔ)區(qū)可以替換為多個(gè)邏輯網(wǎng)架的分組。
[0088]在一些實(shí)施例中,蜂群系統(tǒng)500可以復(fù)制信息多于或少于三次,信息的復(fù)制次數(shù)取決于,但不限于,系統(tǒng)設(shè)計(jì),容量,設(shè)備類型,或者其他因素。換言之,每個(gè)存儲(chǔ)桶可以有三個(gè)以上或以下的副本。蜂群系統(tǒng)500允許節(jié)點(diǎn)552讀取數(shù)據(jù),或?qū)⒋鎯?chǔ)桶復(fù)制到新節(jié)點(diǎn)552,而不考慮網(wǎng)絡(luò)拓?fù)洹9?jié)點(diǎn)552可以從相鄰節(jié)點(diǎn)552讀取或復(fù)制到相鄰節(jié)點(diǎn)552。在一些實(shí)施例中,4-副本集群140,240取代3-副本集群140,240是可能的,其中兩個(gè)副本的每一個(gè)都位于兩個(gè)不同的位置。
[0089]在一些實(shí)施例中,當(dāng)單個(gè)集群,例如集群140,240跨越兩個(gè)地理區(qū)域,并且在這兩個(gè)區(qū)域之間具有較窄的網(wǎng)絡(luò)管道時(shí),那么例如,在確定存儲(chǔ)桶應(yīng)當(dāng)去哪,以及在取讀操作中哪個(gè)存儲(chǔ)桶應(yīng)當(dāng)被訪問時(shí),拓?fù)淇梢允侵匾摹?yōu)選從附近的存儲(chǔ)桶副本讀取。另外,由于故障原因,有利的是每個(gè)存儲(chǔ)桶具有四個(gè)副本,其中每個(gè)地理區(qū)域有兩個(gè)。如果一個(gè)故障,仍然有一個(gè)附近的存儲(chǔ)桶副本可以讀取,修復(fù)守護(hù)進(jìn)程(在下述部分描述)可以總是從附近的存儲(chǔ)桶副本制造一個(gè)新的拷貝。
[0090]蜂群操作:尋址故障
[0091]圖5B的系統(tǒng)500b根據(jù)一些實(shí)施例,示意了蜂群系統(tǒng)500b尋址故障的方式。通常,系統(tǒng)500b設(shè)計(jì)為具有一定程度的容錯(cuò),允許正常的故障事件發(fā)生,而不中斷從數(shù)據(jù)庫(kù)讀取或?qū)懭霐?shù)據(jù),并且該故障不需要人為干涉。如果存儲(chǔ)桶的一個(gè)副本故障,那么在存儲(chǔ)桶的另外兩個(gè)副本的一個(gè)上可以獲得相同的信息。因此,在蜂群系統(tǒng)500中復(fù)制的信息存儲(chǔ)在磁盤中用于容錯(cuò)。磁盤故障包括可能出現(xiàn)的很廣范圍的錯(cuò)誤,這包括由蜂群系統(tǒng)500b或客戶端的操作系統(tǒng)(未示出)報(bào)告的“讀取錯(cuò)誤”,或者數(shù)據(jù)沒能通過誤差檢測(cè)測(cè)試,例如校驗(yàn)和,CRC(循環(huán)冗余碼校驗(yàn)),或者其他用于檢查數(shù)據(jù)或數(shù)據(jù)塊故障以及校正檢測(cè)到的任何存儲(chǔ)在存儲(chǔ)桶中的錯(cuò)誤(例如,寫入磁盤)的程序。當(dāng)在存儲(chǔ)桶中檢測(cè)到錯(cuò)誤時(shí),沒能通過測(cè)試的存儲(chǔ)桶的副本將被丟棄,并讀取或處理來自存儲(chǔ)桶另一副本的數(shù)據(jù)。磁盤故障會(huì)引起節(jié)點(diǎn)562停止對(duì)該節(jié)點(diǎn)562上的存儲(chǔ)桶的請(qǐng)求提供服務(wù),節(jié)點(diǎn)562將停止宣告其為映射中的這些存儲(chǔ)桶提供服務(wù)。隨后,其他節(jié)點(diǎn)552和可用的節(jié)點(diǎn)552,而不是故障節(jié)點(diǎn)562繼續(xù)通信564,566直到節(jié)點(diǎn)562的問題解決。在一些實(shí)施例中,如下述部分所述,磁盤故障會(huì)引起調(diào)用修復(fù)協(xié)議,例如修復(fù)守護(hù)進(jìn)程,如下所述,這最終決定復(fù)制具有三個(gè)以下有效副本的那些存儲(chǔ)桶。例如,修復(fù)守護(hù)進(jìn)程診斷節(jié)點(diǎn)562的問題,并使得系統(tǒng)500b重新拷貝另一個(gè)可用節(jié)點(diǎn)552d或552e的副本,以替代節(jié)點(diǎn)562上不可用的副本R3。
[0092]在一些實(shí)施例中,整個(gè)節(jié)點(diǎn)562故障,或者節(jié)點(diǎn)562上的存儲(chǔ)桶或存儲(chǔ)桶的子集故障,例如“存儲(chǔ)桶B上的副本3”,這將停止發(fā)送更新(例如其他節(jié)點(diǎn)552的映射更新)。最終,所有節(jié)點(diǎn)552將識(shí)別出由故障節(jié)點(diǎn)562服務(wù)的存儲(chǔ)桶,或者存儲(chǔ)桶的故障的副本“存儲(chǔ)桶B的副本3”在節(jié)點(diǎn)562不再可用。這將使得修復(fù)守護(hù)進(jìn)程(未示出)復(fù)制具有三個(gè)以下有效復(fù)制的存儲(chǔ)桶。在一些實(shí)施例中,在故障節(jié)點(diǎn)562或節(jié)點(diǎn)562上的存儲(chǔ)桶副本“存儲(chǔ)桶B的副本3”被認(rèn)定不可用之前,需要三個(gè)設(shè)備故障同時(shí)發(fā)生。在其他實(shí)施例中,在節(jié)點(diǎn)562或存儲(chǔ)桶的“存儲(chǔ)桶B的副本3”被確定不可用之前,需要三個(gè)以上或以下的故障同時(shí)發(fā)生。在一些實(shí)施例中,如果節(jié)點(diǎn)562上的存儲(chǔ)桶副本“存儲(chǔ)桶B的副本3”確定不可用,那么節(jié)點(diǎn)552將彼此通信(如通信564,566所示),使得節(jié)點(diǎn)562上不可用的存儲(chǔ)桶副本被回避,作為替代,訪問其他兩個(gè)存儲(chǔ)桶副本(例如,在節(jié)點(diǎn)552a和節(jié)點(diǎn)552c)。和前述示例一樣,其他節(jié)點(diǎn)552將和其他有效節(jié)點(diǎn)552繼續(xù)通信554,556,并停止和故障節(jié)點(diǎn)562通信。
[0093]蜂群運(yùn)行:分配存儲(chǔ)桶和散列操作
[0094]圖6A-C是根據(jù)一些實(shí)施例的蜂群系統(tǒng)300,500中映射和分配存儲(chǔ)桶620的框圖。在一些實(shí)施例中,分布式數(shù)據(jù)庫(kù),例如蜂群系統(tǒng)300,500中的“存儲(chǔ)桶”的分配由散列函數(shù)映射,該函數(shù)是將大塊數(shù)據(jù)轉(zhuǎn)為小塊、有組織的信息,例如元數(shù)據(jù)、行、表、索引等的程序或數(shù)學(xué)函數(shù)。利用散列函數(shù)將隨意大小的密 鑰轉(zhuǎn)換為固定大小的二進(jìn)制散列輸出,可以實(shí)現(xiàn)行到存儲(chǔ)桶的映射。在一個(gè)示例中,通過來自散列表610的行密鑰的散列函數(shù),可以識(shí)別特殊存儲(chǔ)桶中存儲(chǔ)的信息或信息位置,其中散列表指向存儲(chǔ)桶620所在的特殊的位置。用于所有行密鑰的散列函數(shù),例如散列表610中列出的散列函數(shù),映射至位于分布式數(shù)據(jù)庫(kù),例如系統(tǒng)300,500每個(gè)節(jié)點(diǎn)的表中(未示出),并在本地由每個(gè)節(jié)點(diǎn)保留和更新。行密鑰在稱為“一致性散列”的方案中包括位置碼,例如位置=(hash modrunodes),或者可以是位于表,例如散列表610中的存儲(chǔ)槽。
[0095]在任一情況中,每個(gè)行密鑰或存儲(chǔ)槽指向存儲(chǔ)桶620a_g。在一些實(shí)施例中,散列密鑰的位前綴(例如,散列表610中的OOX至IlX……)用于產(chǎn)生或分配存儲(chǔ)桶,其可以是變化大小的,密鑰的前綴由存儲(chǔ)桶的名稱確定。因此,存儲(chǔ)桶大小的變化允許在分配數(shù)據(jù)庫(kù)的存儲(chǔ)空間中具有靈活性和可擴(kuò)展性。在一些實(shí)施例中,散列表610是前綴列表,其使用位模式散列來為存儲(chǔ)桶620a-n(存儲(chǔ)桶Bl-Bn)分派或分配行密鑰。如上所述,分布式數(shù)據(jù)庫(kù),例如系統(tǒng)300,500的映射中一條數(shù)據(jù)的位置由其行密鑰的散列確定。散列的最高位,稱為散列表610中的前綴,確定數(shù)據(jù)位于哪個(gè)存儲(chǔ)桶。
[0096]在一些實(shí)施例中,存儲(chǔ)桶620a_n是嵌套的。例如,一個(gè)存儲(chǔ)桶B1620a可以包括所有行。存儲(chǔ)桶B1620a的前綴是X,其中X可以是O或I。存儲(chǔ)桶B2620b和B3620c嵌套在存儲(chǔ)桶B1620a的內(nèi)部??梢詷?gòu)造散列密鑰使得如果行的散列以O(shè)開始,那么其在存儲(chǔ)桶B2620b中,以及如果行的散列以I開始,那么其在存儲(chǔ)桶B3620c中,如圖6B所示。如圖6C所示,附加的存儲(chǔ)桶B4620d和B5620c可以嵌套在圖6B的存儲(chǔ)桶B2620b中。如果行的散列以00開始,那么其在存儲(chǔ)桶B4620d中,如果行的散列以01開始,那么其在存儲(chǔ)桶B5620e中。因此,根據(jù)散列表610的散列結(jié)構(gòu)指示行密鑰的散列以01開始時(shí),其位于存儲(chǔ)桶 B5620e, B2620b 以及 B1620a 中。
[0097]根據(jù)該散列結(jié)構(gòu),如圖6B所示,存儲(chǔ)桶B2620b是存儲(chǔ)桶B 1620a的一半大小。如圖6C所示,存儲(chǔ)桶B4620d是存儲(chǔ)桶B2620b的一半大小,存儲(chǔ)桶的分配由雙數(shù)位前綴00,01,10,11識(shí)別。也就是說,存儲(chǔ)桶B2620b包括存儲(chǔ)桶B1620a —半的散列范圍,存儲(chǔ)桶B4620d包含存儲(chǔ)桶B2620b包含的散列范圍的一半。如果散列函數(shù)成功將行密鑰平均分配至散列空間,那么存儲(chǔ)桶B2620b將大概是存儲(chǔ)桶B1620a物理尺寸的一半。
[0098]如果理想的是數(shù)據(jù)庫(kù)中的存儲(chǔ)桶大小基本相同,那么存儲(chǔ)桶應(yīng)該被相應(yīng)地選擇為具有一個(gè)范圍的存儲(chǔ)桶,例如圖6B中的存儲(chǔ)桶B2-B3620b-c和圖6C中的存儲(chǔ)桶B4-B7620d-g,而不是其他的。在該系統(tǒng)中,行精確地存在于一個(gè)存儲(chǔ)桶中。
[0099]根據(jù)散列密鑰限定映射具有幾個(gè)益處。首先,存儲(chǔ)桶的名稱,一個(gè)小整數(shù),確定存儲(chǔ)桶中存儲(chǔ)的密鑰散列的范圍。這與記錄存儲(chǔ)桶中任意范圍的散列值相比,更方便調(diào)試和管理。第二,該方法允許不同大小的存儲(chǔ)桶同時(shí)存在于系統(tǒng)中。給定行密鑰的散列,結(jié)果是指示特殊行的映射可能會(huì)存在于一個(gè)以上的存儲(chǔ)桶中,這在考慮存儲(chǔ)桶的多個(gè)副本存在于數(shù)據(jù)庫(kù)系統(tǒng)時(shí)是方便的。讀取/寫入行將會(huì)從所有這些存儲(chǔ)桶讀取或?qū)懭胨羞@些存儲(chǔ)桶。許可不同大小的存儲(chǔ)桶會(huì)允許各種靈活和可擴(kuò)展的動(dòng)作,例如在數(shù)據(jù)庫(kù)運(yùn)行時(shí)分割或組合存儲(chǔ)桶。
[0100]假設(shè)單個(gè)散列函數(shù)用于所有行至存儲(chǔ)桶的映射,那么給定行對(duì)于所有包含該行的表來說,位于相同存儲(chǔ)桶內(nèi)。這在執(zhí)行并行映射作業(yè)時(shí)是有效的技術(shù)。訪問節(jié)點(diǎn)的存儲(chǔ)桶中表的所有行的程序確保訪問不同表中的行,但是相同的行密鑰是本地訪問。
[0101]綜上所述,如下定位行所在的特殊存儲(chǔ)桶和節(jié)點(diǎn)的整個(gè)順序:首先,散列行密鑰。然后,利用該散列的前綴以及系統(tǒng)中存在的存儲(chǔ)桶列表來確定哪個(gè)存儲(chǔ)桶包含該行。最終,查看哪個(gè)節(jié)點(diǎn)已經(jīng)宣布它們存儲(chǔ)了這些存儲(chǔ)桶。
[0102]C.組件級(jí)別
[0103]數(shù)據(jù)寫入
[0104]圖7A-7C是根據(jù)一些實(shí)施例,用于示出蜂群數(shù)據(jù)庫(kù)系統(tǒng)100-300中如何組織和存儲(chǔ)數(shù)據(jù)的框圖。存儲(chǔ)桶包含用于存儲(chǔ)和管理數(shù)據(jù)的多個(gè)表。該數(shù)據(jù)需要以一種方式存儲(chǔ)使得在多個(gè)表的行中讀取和寫入會(huì)比較便宜。并且,配置在每個(gè)各自存儲(chǔ)桶中存儲(chǔ)的表,使得改變一張表不會(huì)變動(dòng)另一張表的任何內(nèi)容。另外,該分隔降低了程序缺陷或存儲(chǔ)錯(cuò)誤的影響。
[0105]數(shù)據(jù)存儲(chǔ)在底層存儲(chǔ)器,其示例包括,但不限于,硬盤,閃存,或隨機(jī)存儲(chǔ)器。一個(gè)實(shí)施例涉及在Linux文件系統(tǒng)的文件中存儲(chǔ)數(shù)據(jù)。存儲(chǔ)桶內(nèi)的每張表由一組分等級(jí)的文件734組成。一個(gè)實(shí)施例使用了三個(gè)級(jí)別,稱為“big”,“mid”和“inc”。每個(gè)文件734具有索引,用于將行密鑰散列映射至磁盤文件中的位置。該索引裝載于RAM中,確保提取行涉及單個(gè)的磁盤尋找和讀取。“big”文件包括表中最老的數(shù)據(jù),“mid”文件中包含稍新的數(shù)據(jù),“inc”文件包含最新的數(shù)據(jù)。
[0106]當(dāng)應(yīng)用希望寫入表中的一行時(shí),寫入操作發(fā)送至本地節(jié)點(diǎn)或遠(yuǎn)程節(jié)點(diǎn)的“寫入器守護(hù)進(jìn)程”(未示出)。寫入器守護(hù)進(jìn)程將該數(shù)據(jù)寫入交易記錄(未示出),其在本地節(jié)點(diǎn)或遠(yuǎn)程節(jié)點(diǎn)崩潰,或者與遠(yuǎn)程節(jié)點(diǎn)通信失敗之后,為了容錯(cuò)而重新播放。在一些實(shí)施例中,如前所述,給定的行寫入需要被傳送至存儲(chǔ)桶的一個(gè)或多個(gè)(典型地是3)個(gè)副本中,其通常位于三個(gè)不同的節(jié)點(diǎn)。在一些實(shí)施例中,寫入器守護(hù)進(jìn)程將延遲給定寫入一段時(shí)間,以希望找到更多的需要傳送至相同的遠(yuǎn)程存儲(chǔ)桶的寫入。
[0107]在一些實(shí)施例中,“存儲(chǔ)桶守護(hù)進(jìn)程”(未示出)從寫入器守護(hù)進(jìn)程接收寫入。存儲(chǔ)桶守護(hù)進(jìn)程記憶并組合寫入任務(wù)直到已經(jīng)過去一段時(shí)間或者已經(jīng)到達(dá)某些數(shù)據(jù)量(例如,N秒或者M(jìn)兆字節(jié)的數(shù)據(jù)到達(dá)各個(gè)節(jié)點(diǎn)142,352的特殊的表)。然后該數(shù)據(jù)寫入磁盤的Inc文件中。Inc文件最終組合為Mid文件,多個(gè)Mid文件組合為Big文件。在一些實(shí)施例中,另一個(gè)守護(hù)進(jìn)程,存儲(chǔ)桶維護(hù)守護(hù)進(jìn)程完成該組合。
[0108]操作系統(tǒng)參與向磁盤讀取和寫入的活動(dòng)。在許多操作系統(tǒng)中,例如Unix或Linux,寫入磁盤的數(shù)據(jù)變?yōu)椤芭K頁”(例如,存儲(chǔ)頁具有需要被寫入但是還沒有被寫入的數(shù)據(jù))。本地操作系統(tǒng)(未示出)通常每N秒,或者如果臟頁數(shù)量太大,每主要存儲(chǔ)器(未示出)的一定百分比,來安排臟頁的寫入。因此,一次寫入大塊數(shù)據(jù),通常是優(yōu)選的,這是因?yàn)榇髩K寫入比許多小塊寫入更有效。但是,大塊寫入對(duì)于其他試圖完成小塊讀取的過程來說是個(gè)問題。因此,在一些實(shí)施例中,寫入操作被“計(jì)量”以打破大塊的寫入操作。換言之,系統(tǒng)寫入受計(jì)量的限制,以留下磁盤容量用于快速應(yīng)答讀取。例如,可以以50MB/S寫入數(shù)據(jù)的磁盤會(huì)被降低至將以8MB/s計(jì)量寫入。因此,計(jì)量包含將任務(wù)分割成較小的塊,然后每秒執(zhí)行不超過N個(gè)。在另一示例中,通過將100兆字節(jié)劃分為25個(gè)4兆字節(jié)的塊并且每秒向磁盤寫入兩個(gè)4兆字節(jié)的塊,以每秒8兆字節(jié)寫入100兆字節(jié)的數(shù)據(jù)。
[0109]另外,可以依靠操作系統(tǒng)的特征,例如fsync()函數(shù),其允許系統(tǒng)300,500強(qiáng)制立即寫入,而不是N秒后寫入。函數(shù)fsyncO通常用于在崩盤的情況下將數(shù)據(jù)損失降到最小。例如,Unix/Linux/POSIX fsyncO函數(shù)強(qiáng)制寫入立即寫入磁盤,而不是保存在存儲(chǔ)器緩沖中,使得數(shù)據(jù)不會(huì)承擔(dān)丟失的危險(xiǎn)。因此,寫入操作可以更有效地執(zhí)行。
[0110]利用“寫入映射”增加讀取和寫入的速度
[0111]如前所述,這里所述的數(shù)據(jù)庫(kù)存儲(chǔ)每個(gè)存儲(chǔ)桶的多個(gè)副本。另一種加快磁盤讀取和寫入速度的方式是在給定時(shí)刻將每個(gè)存儲(chǔ)桶的給定副本專門用于寫入或讀取。如果在短時(shí)間(少于I秒)物理磁盤或存儲(chǔ)系統(tǒng)僅讀取或僅寫入,而不是在給定的物理磁盤或存儲(chǔ)系統(tǒng)執(zhí)行讀取和寫入的混合,那么磁盤運(yùn)行會(huì)更快。例如,可以產(chǎn)生“寫入映射”,其包含每個(gè)存儲(chǔ)桶中哪個(gè)副本可以用于讀取以及哪個(gè)可以用于寫入的信息。包含多個(gè)副本的物理磁盤或存儲(chǔ)系統(tǒng)需要具有用于讀取或?qū)懭氲乃写鎯?chǔ)桶副本,以獲得利益。
[0112]每N秒產(chǎn)生新的寫入映射,例如N=30秒。這個(gè)稍長(zhǎng)的時(shí)間允許有大量時(shí)間來將寫入映射分配至集群的所有節(jié)點(diǎn)。這些節(jié)點(diǎn)將它們的時(shí)鐘同步至幾毫秒內(nèi),當(dāng)每個(gè)節(jié)點(diǎn)的時(shí)鐘到達(dá)N秒邊界時(shí),采用新的寫入映射。重要的是,所有節(jié)點(diǎn)同意哪個(gè)磁盤專用于讀取或?qū)懭?,這是因?yàn)樗凶x取器必須知道哪個(gè)節(jié)點(diǎn)發(fā)送獲取和下一行的操作。
[0113]必須允許給定存儲(chǔ)桶的給定副本最終寫入,或者來自存儲(chǔ)桶守護(hù)進(jìn)程的寫入數(shù)據(jù)會(huì)在存儲(chǔ)器產(chǎn)生堆積(資源不足)。因此,每個(gè)存儲(chǔ)桶副本都會(huì)給予在R=3的系統(tǒng)中至少寫入1/3時(shí)間的機(jī)會(huì)。實(shí)際上,挑選用于寫入的副本的算法考慮了從最后一次寫入開始所經(jīng)過的時(shí)間作為挑選哪個(gè)副本可以寫入的主要因素。
[0114]通過該算法,給定存儲(chǔ)桶的至少一個(gè)副本必須可以用于讀取,讀取算法必須在截?cái)唳谴芜\(yùn)行“寫入副本”之前,試圖從“讀取副本”讀取。
[0115]挑選哪個(gè)磁盤用于寫入的算法的示例包括:[0116]?從最早寫入的存儲(chǔ)設(shè)備至最近寫入的存儲(chǔ)設(shè)備循環(huán)。
[0117]?對(duì)于該存儲(chǔ)設(shè)備上的每個(gè)存儲(chǔ)桶副本來說,查看這些存儲(chǔ)桶中的任一個(gè)是否需要成為該存儲(chǔ)桶的I個(gè)讀取副本。
[0118]?如果沒有存儲(chǔ)桶的副本需要成為讀取器,那么將該存儲(chǔ)設(shè)備設(shè)定為寫入器。
[0119]挑選哪個(gè)磁盤寫入的另一方法是利用數(shù)據(jù)庫(kù)分為存儲(chǔ)區(qū)的組織。簡(jiǎn)單地旋轉(zhuǎn)通過存儲(chǔ)區(qū),每N秒挑選I個(gè)存儲(chǔ)區(qū)寫入。由于r3集群通常具有3個(gè)或3個(gè)以上存儲(chǔ)區(qū),該方法經(jīng)常提供比前述方法更小的寫入帶寬。
[0120]數(shù)據(jù)組織
[0121]圖7A示意了如何將數(shù)據(jù)寫入分布式數(shù)據(jù)庫(kù),例如蜂群系統(tǒng)300,500中的各個(gè)節(jié)點(diǎn)。如前所述,存儲(chǔ)桶守護(hù)進(jìn)程從寫入器守護(hù)進(jìn)程接收寫入。存儲(chǔ)桶守護(hù)進(jìn)程將寫入712保持一段時(shí)間,希望接收到相同表的更多寫入,但是最終對(duì)于每張表寫出所有其擁有的寫入712,作為新的Inc文件718。這些Inc文件激增,如Inc文件716…718所示意的,最終存儲(chǔ)桶維護(hù)守護(hù)進(jìn)程通知,并決定將一批Inc文件716…718合并為單個(gè)的Mid文件720。然后移除Inc文件716…718。在一些實(shí)施例中,多個(gè)Mid文件激增,在其他實(shí)施例中,具有至多I個(gè)Mid文件720,當(dāng)Inc文件合并時(shí),它們與現(xiàn)有的Mid文件720 (如果存在的話)進(jìn)行組合,以形成新的Mid文件。最終,存儲(chǔ)桶維護(hù)守護(hù)進(jìn)程將Mid文件720和Big文件722組合形成新的Big文件728。在一些實(shí)施例中,Big文件728是將類似Big文件722的多個(gè)Big文件合并的結(jié)果。
[0122]相同的存儲(chǔ)桶,例如存儲(chǔ)桶2730中的不同的表,每張都具有其自己的文件組。在圖7B中,我們看到三張表732,736,740。表Foo732和表Bar738最近已經(jīng)被寫入,因此,在等級(jí)734,738的所有三個(gè)級(jí)別都具有文件。表Nap740很長(zhǎng)時(shí)間沒有寫入,存儲(chǔ)桶維護(hù)守護(hù)進(jìn)程將該表中的所有數(shù)據(jù)合并為`單個(gè)的Big文件742。
[0123]當(dāng)從這些文件732,736,740中讀取數(shù)據(jù)時(shí),應(yīng)答的成本和精確性取決于存在多少個(gè)文件。為了獲得對(duì)于行的讀取請(qǐng)求的完美應(yīng)答,查看表的每個(gè)文件。對(duì)于表Nap740來說,這是精確的一個(gè)文件,因此有I個(gè)磁盤尋找。對(duì)于表Foo732來說,必須出現(xiàn)許多磁盤尋找,以確保定位正確的應(yīng)答。例如,與要尋找的數(shù)據(jù)相關(guān)聯(lián)的行可能存在于Big文件中,但是該行可能已經(jīng)在Mid或Inc文件中被修改。因此,所有文件需要被查閱以獲得精確的應(yīng)答。如果假設(shè)這樣,每個(gè)磁盤尋找需要2ms (毫秒)至10ms,具有200個(gè)文件的表可能需要一會(huì)來應(yīng)答讀取請(qǐng)求。
[0124]分布式數(shù)據(jù)庫(kù),例如系統(tǒng)300,500允許為了速度犧牲精度。圖7C示意了此情況。用于限制精度的值的名稱是“尋找深度”。這是要完成的磁盤尋找的最大數(shù)量。在表Fool752中,進(jìn)行行的讀取,其中尋找深度=1。在這種情況下,僅查閱Big文件758,忽略Mid和Inc文件中的數(shù)據(jù)。在表Foo2760中,將行的讀取設(shè)定為尋找深度=3。在這種情況下,查閱至多三個(gè)文件764。因此,表Fool752的讀取將比表Foo2760的讀取更快,但比其精度差。以每張表為基礎(chǔ),或者在單獨(dú)的讀取請(qǐng)求中,可以將尋找深度設(shè)定為默認(rèn)值。
[0125]將Inc合并為Mid,將Mid合并為Big減少了表中文件的數(shù)量。該文件的數(shù)量也被稱為尋找深度。為了確定多少合并工作需要完成以將所有數(shù)據(jù)留在Big文件中,計(jì)算系統(tǒng)中最差的尋找深度,該值命名為尋找100。也確定系統(tǒng)中所有存儲(chǔ)桶的所有副本的尋找深度的計(jì)數(shù),并且尋找深度的值在第50和第90個(gè)百分點(diǎn)計(jì)算。這些數(shù)值分別稱為尋找50和尋找90。這些值可以繪制為時(shí)間的函數(shù),以將寫入和合并數(shù)據(jù)的相互作用可視化(例如,發(fā)生多少次寫入,多少次合并是必要的)。
[0126]在一些實(shí)施例中,布隆過濾器保存在存儲(chǔ)器中,并且如果布隆過濾器指示特殊的行密鑰不在該文件中,那么其可以用于避免查閱磁盤上的文件。這尤其有助于具有大的尋找深度的路徑。
[0127]組件數(shù)據(jù)讀取/寫入概述
[0128]圖8是根據(jù)一些實(shí)施例的,在集群810中向節(jié)點(diǎn)812寫入804或從節(jié)點(diǎn)812讀取806的數(shù)據(jù)802交換的框圖。集群810包括節(jié)點(diǎn)812A-812G。如圖3B所示,節(jié)點(diǎn)812A-812G直接彼此通信,每個(gè)節(jié)點(diǎn)812可以和集群810中節(jié)點(diǎn)812A-812G中任意一個(gè)通信。集群810中的節(jié)點(diǎn)812通過通信設(shè)備820廣播它們的狀態(tài)更新和其他信息。如前所述,通信設(shè)備820可以通過有線啟動(dòng)或者用于無線通信。在一些實(shí)施例中,不是所有節(jié)點(diǎn)812都響應(yīng)正在接收的數(shù)據(jù)802,或者作為替換都響應(yīng)于獲取數(shù)據(jù)的請(qǐng)求。例如,當(dāng)接收804數(shù)據(jù)802時(shí),一些節(jié)點(diǎn),例如節(jié)點(diǎn)812B,812C,812E,812F響應(yīng),這是因?yàn)檫@些節(jié)點(diǎn)具有可用的存儲(chǔ)桶,用于存儲(chǔ)接收的數(shù)據(jù)。如果接收到數(shù)據(jù)請(qǐng)求,一個(gè)響應(yīng)的節(jié)點(diǎn)會(huì)向其他節(jié)點(diǎn)812廣播:它具有請(qǐng)求的信息。在一些實(shí)施例中,廣播節(jié)點(diǎn)812B,812C,812E,812F可以發(fā)送或更新狀態(tài)報(bào)告以及更新它們各自的表,信息,廣播修復(fù)請(qǐng)求或者任何其他管理任務(wù)。在一些實(shí)施例中,廣播節(jié)點(diǎn)812B,812C,812E,812F中的一個(gè)或多個(gè)可以是新節(jié)點(diǎn),可以向其他節(jié)點(diǎn)812廣播以幫助完成任務(wù)或接收用于存儲(chǔ)的數(shù)據(jù)。
[0129]一旦節(jié)點(diǎn)812成為集群810的一部分,則在集群810中的所有節(jié)點(diǎn)812共用或?qū)嵤┐罅康墓芾砉ぞ吆蛥f(xié)議。例如,節(jié)點(diǎn)812上的修復(fù)守護(hù)進(jìn)程(未示出)將開始運(yùn)行。如果節(jié)點(diǎn)812是新節(jié)點(diǎn)并且沒有存儲(chǔ)桶,那么開始自愿復(fù)制位于過載節(jié)點(diǎn)812上的存儲(chǔ)桶,直到新節(jié)點(diǎn)達(dá)到其存儲(chǔ)桶的目標(biāo)。節(jié)點(diǎn)812中的每一個(gè)包括多個(gè)程序或守護(hù)進(jìn)程以執(zhí)行與數(shù)據(jù)庫(kù)系統(tǒng)相關(guān)的多個(gè)任務(wù)。這些程序包括,但不限于,網(wǎng)絡(luò)服務(wù)器,爬取器(crawler),圖像爬取器,垃圾守護(hù)進(jìn)程,全球守護(hù)進(jìn)程,記錄器守護(hù)進(jìn)程,文件服務(wù)器守護(hù)進(jìn)程,映射作業(yè)守護(hù)進(jìn)程,修復(fù)守護(hù)進(jìn)程,隨機(jī)存儲(chǔ)守護(hù)進(jìn)程,存儲(chǔ)桶守護(hù)進(jìn)程,存儲(chǔ)桶_維護(hù)守護(hù)進(jìn)程,讀取器守護(hù)進(jìn)程,寫入器守護(hù)進(jìn)程,心跳守護(hù)進(jìn)程,監(jiān)視守護(hù)進(jìn)程:存儲(chǔ)器溢出(oom)守護(hù)進(jìn)程,以及check-r守護(hù)進(jìn)程。一些守護(hù)進(jìn)程將進(jìn)一步詳細(xì)討論。
[0130]讀取(獲取數(shù)據(jù)):一般和高速緩沖存儲(chǔ)
[0131]圖9是根據(jù)一些實(shí)施例,示意在分布式數(shù)據(jù)庫(kù)系統(tǒng)中用于獲取請(qǐng)求任務(wù)的兩個(gè)節(jié)點(diǎn)910,940之間合作的框圖。在節(jié)點(diǎn)1910接收獲取數(shù)據(jù)的請(qǐng)求912。獲取數(shù)據(jù)的請(qǐng)求912對(duì)應(yīng)于從數(shù)據(jù)庫(kù),例如集群810獲取行的請(qǐng)求。當(dāng)進(jìn)行了請(qǐng)求時(shí),行密鑰首先被散列,以確定行出現(xiàn)在哪個(gè)存儲(chǔ)桶中。在節(jié)點(diǎn)1910通過讀取器守護(hù)進(jìn)程914接收獲取數(shù)據(jù)請(qǐng)求912,其執(zhí)行g(shù)et()請(qǐng)求。在一些實(shí)施例中,讀取器守護(hù)進(jìn)程914散列行密鑰。
[0132]除了存儲(chǔ)在磁盤上的信息,其中該信息被存儲(chǔ)復(fù)制用于容錯(cuò),一些用于快速訪問的信息位于高速緩沖存儲(chǔ)器中,例如高速緩沖存儲(chǔ)器916。在一些實(shí)施例中,高速緩沖存儲(chǔ)器916由讀取器守護(hù)進(jìn)程914管理,但是在其他實(shí)施例中,高速緩沖存儲(chǔ)器916也可以位于節(jié)點(diǎn)1910內(nèi)的本地磁盤或節(jié)點(diǎn)1910的外部,并且可以由其他守護(hù)進(jìn)程管理。在一些實(shí)施例,高速緩沖存儲(chǔ)器916可以在RAM內(nèi),在服務(wù)器上,在固態(tài)驅(qū)動(dòng)(SSD)的閃存中,或者在周邊元件擴(kuò)展接口(PCI)快速卡的閃存中。在一些實(shí)施例中,RAM/Flash中存儲(chǔ)的數(shù)據(jù)可能不是副本,但是作為替換,是在磁盤上存儲(chǔ)、復(fù)制的數(shù)據(jù)的拷貝。在一些實(shí)施例中,讀取器守護(hù)進(jìn)程914用于從高速緩沖存儲(chǔ)器916讀取數(shù)據(jù)。讀取器守護(hù)進(jìn)程914首先檢查高速緩沖存儲(chǔ)器916以確定請(qǐng)求的數(shù)據(jù)912是否已經(jīng)存儲(chǔ)在高速緩沖存儲(chǔ)器916中。在一些實(shí)施例中,除了高速緩沖存儲(chǔ)器916之外,讀取器守護(hù)進(jìn)程914可以包括RAM高速緩沖存儲(chǔ)器(未示出),或者節(jié)點(diǎn)910可以包括RAM高速緩沖存儲(chǔ)器守護(hù)進(jìn)程,其構(gòu)造為存儲(chǔ)來自存儲(chǔ)桶的數(shù)據(jù),用于更快速地響應(yīng)查詢。在一些實(shí)施例中,如果第一個(gè)副本總是在搜索信息的第二個(gè)或第三個(gè)復(fù)制的位置之前,首先被請(qǐng)求,那么,第一個(gè)副本存儲(chǔ)在RAM高速緩沖存儲(chǔ)器或者高速緩沖存儲(chǔ)器916中。在一些實(shí)施例中,數(shù)據(jù)的第一個(gè)副本鎖在RAM高速緩沖存儲(chǔ)器或者高速緩沖存儲(chǔ)器916中,使得其響應(yīng)于查詢可以被快速提供。在一些實(shí)施例中,RAM高速緩沖存儲(chǔ)器或者高速緩沖存儲(chǔ)器916對(duì)于程序員來說是透明的,以至于如果由于節(jié)點(diǎn)910中的部分存儲(chǔ)桶還沒有上載,導(dǎo)致對(duì)于查詢的響應(yīng)不能快速提供,那么其可以從RAM高速緩沖存儲(chǔ)器或高速緩沖存儲(chǔ)器916讀取應(yīng)答。
[0133]如果獲取數(shù)據(jù)請(qǐng)求912的應(yīng)答不在RAM高速緩沖存儲(chǔ)器或高速緩沖存儲(chǔ)器916中,那么讀取器守護(hù)進(jìn)程914可以通過通信924向另一個(gè)節(jié)點(diǎn)940,節(jié)點(diǎn)2,發(fā)出請(qǐng)求,該節(jié)點(diǎn)2公知為包含對(duì)應(yīng)于散列行密鑰的存儲(chǔ)桶。如果節(jié)點(diǎn)940不能快速回答,將向具有該存儲(chǔ)桶的第三個(gè)節(jié)點(diǎn)(未示出)發(fā)出第二次請(qǐng)求,等等。
[0134]在一些實(shí)施例中,下一個(gè)節(jié)點(diǎn)940,節(jié)點(diǎn)2中的存儲(chǔ)桶守護(hù)進(jìn)程942從讀取器守護(hù)進(jìn)程914接收獲取請(qǐng)求。存儲(chǔ)桶守護(hù)進(jìn)程,例如存儲(chǔ)桶守護(hù)進(jìn)程942,管理各個(gè)節(jié)點(diǎn)的一個(gè)或多個(gè)存儲(chǔ)桶,以完成包括處理請(qǐng)求,從磁盤944上存儲(chǔ)的存儲(chǔ)桶檢索信息,或者向磁盤944寫入信息的任務(wù)。存儲(chǔ)桶守護(hù)進(jìn)程942根據(jù)行密鑰散列檢查948本地磁盤944,用于請(qǐng)求的行。如果磁盤944包含請(qǐng)求行,那么將信息返回至存儲(chǔ)桶守護(hù)進(jìn)程946用于傳送。在一些實(shí)施例中,檢索的信息經(jīng)由通信922返回至讀取器守護(hù)進(jìn)程914用于最終傳送至請(qǐng)求器。在一些實(shí)施例中,存儲(chǔ)桶守護(hù)進(jìn)程942直接將檢索的信息傳送至請(qǐng)求器。
[0135]在一些實(shí)施例中,在行密鑰被散列后,獲取數(shù)據(jù)請(qǐng)求912同時(shí)發(fā)送至兩個(gè)或多個(gè)節(jié)點(diǎn)910,940。當(dāng)獲取數(shù)據(jù)請(qǐng)求912正在節(jié)點(diǎn)1910被處理時(shí),請(qǐng)求也經(jīng)由通信920發(fā)送至節(jié)點(diǎn)2940。在一些實(shí)施例中,獲取數(shù)據(jù)請(qǐng)求912可以被類似處理,遵守用于所有節(jié)點(diǎn)910,940的公共協(xié)議。例如,獲取數(shù)據(jù)請(qǐng)求912可以由本地讀取器守護(hù)進(jìn)程首先接收以檢查本地高速緩沖存儲(chǔ)器或ram高速緩沖存儲(chǔ)器。如果本地高速緩沖存儲(chǔ)器或ram高速緩沖存儲(chǔ)器不包含該行,那么本地存儲(chǔ)桶守護(hù)進(jìn)程可以處理請(qǐng)求912。在一些實(shí)施例中,獲取數(shù)據(jù)912可以被獨(dú)立處理,例如讀取器守護(hù)進(jìn)程914可以首先檢查節(jié)點(diǎn)1910中的高速緩沖存儲(chǔ)器916,而節(jié)點(diǎn)2940中的獲取數(shù)據(jù)請(qǐng)求912首先由存儲(chǔ)桶守護(hù)進(jìn)程942接收和處理。因此,集群810中的節(jié)點(diǎn)遵守處理和管理信息的公共協(xié)議;節(jié)點(diǎn)可以彼此獨(dú)立,在本地處理和管理信息;或者節(jié)點(diǎn)可以遵守兩者組合的協(xié)議。
[0136]讀取(獲取數(shù)據(jù)):截取和運(yùn)行
[0137]圖10是根據(jù)一些實(shí)施例的處理請(qǐng)求的流程圖。系統(tǒng)810可以從任意數(shù)量的源接收請(qǐng)求,這些源包括,但不限于,諸如客戶端110的客戶端,集群810的另一節(jié)點(diǎn)812,另一集群140,240的另一節(jié)點(diǎn)142,242等等。請(qǐng)求可以是,但不限于,讀取請(qǐng)求,獲取請(qǐng)求,下一行請(qǐng)求,進(jìn)行狀態(tài)更新的請(qǐng)求,更新本地表和映射的請(qǐng)求,或者集群810內(nèi)或來自集群810的外部源的任意類型的遠(yuǎn)程程序呼叫(RPC)。在步驟1010基于接收到請(qǐng)求,在步驟1020散列行密鑰以確定存儲(chǔ)桶是否能夠服務(wù)于請(qǐng)求。在步驟1030,一旦確定一個(gè)或多個(gè)存儲(chǔ)桶,具有其中一個(gè)存儲(chǔ)桶的第一節(jié)點(diǎn)被要求服務(wù)于請(qǐng)求。如果在節(jié)點(diǎn)1040,第一節(jié)點(diǎn)快速響應(yīng),并且沒有延遲,那么在步驟1050從第一節(jié)點(diǎn)接收請(qǐng)求的答復(fù),第一節(jié)點(diǎn)處理請(qǐng)求,該過程停止。在一些實(shí)施例中,如果第一節(jié)點(diǎn)不響應(yīng)或延遲響應(yīng),那么在步驟1060,具有一個(gè)確定存儲(chǔ)桶的第二節(jié)點(diǎn)被要求服務(wù)于該請(qǐng)求。再次,在步驟1070,如果第二節(jié)點(diǎn)的響應(yīng)沒有延遲,那么在步驟1050,由第二節(jié)點(diǎn)接收請(qǐng)求的答復(fù),在第二節(jié)點(diǎn)處理請(qǐng)求,并且該過程結(jié)束。在一些實(shí)施例中,在步驟1070,如果第二節(jié)點(diǎn)延遲響應(yīng),那么在步驟1080,具有一個(gè)確定存儲(chǔ)桶的第三節(jié)點(diǎn)被要求服務(wù)于該請(qǐng)求。該過程重復(fù),其中在步驟1090,如果第三節(jié)點(diǎn)的響應(yīng)沒有延遲,那么在步驟1050,接收請(qǐng)求的答復(fù),服務(wù)于該請(qǐng)求并且該過程結(jié)束。在步驟1090,如果具有另一延遲,那么重復(fù)請(qǐng)求過程,第一節(jié)點(diǎn)再次在步驟1030被請(qǐng)求。在一些實(shí)施例中,尤其是如果由多于三個(gè)存儲(chǔ)桶保留數(shù)據(jù)的多于三個(gè)的復(fù)制,那么該過程繼續(xù)直到由集群810中可用的節(jié)點(diǎn)812為請(qǐng)求提供服務(wù),或者由另一集群140,240中的另一節(jié)點(diǎn)142,242提供服務(wù)。
[0138]圖11是根據(jù)一些其他實(shí)施例的處理請(qǐng)求的流程圖。與圖11的步驟1010和1020類似,在步驟1110,基于接收的請(qǐng)求(例如,RPC),在步驟1120,行密鑰被散列以確定存儲(chǔ)桶是否能夠?yàn)檎?qǐng)求提供服務(wù)。在步驟1130,一旦確定一個(gè)或多個(gè)存儲(chǔ)桶,那么具有存儲(chǔ)桶的所有節(jié)點(diǎn)被要求向請(qǐng)求提供服務(wù)。第一個(gè)答復(fù)的可用節(jié)點(diǎn)為請(qǐng)求提供服務(wù)。當(dāng)?shù)谝粋€(gè)可用的節(jié)點(diǎn)在步驟1140答復(fù)請(qǐng)求時(shí),該過程停止。在一些實(shí)施例中,節(jié)點(diǎn)來自相同的集群810或不同的集群140,240。
[0139]Nextrow ()
[0140]在一些實(shí)施例中,第二種讀取操作,nextiOwO,用于以散列順序讀取表中所有行。這典型地用于映射作業(yè)任務(wù),其為表中每一行進(jìn)行計(jì)算。例如在映射作業(yè)(下述部分將描述)中,NextrowO靜靜地從網(wǎng)絡(luò)上的調(diào)用變?yōu)閺谋镜卮疟P讀取的調(diào)用,這是更有效的過程。在一些實(shí)施例中,與映射作業(yè)和非映射作業(yè)相同的代碼可以用于NextrowO操作,其使測(cè)試和調(diào)試變得很容易。但是,映射作業(yè)的版本在大量數(shù)據(jù)上運(yùn)行更快。
[0141]在一些實(shí)施例中,在存儲(chǔ)器中保留表中一些密鑰(不是散列密鑰)和/或一些列的索引。當(dāng)nextrowingO有效地訪問一定范圍的密鑰或列的值時(shí),使用該索引。
[0142]修復(fù)
[0143]圖12是根據(jù)一些實(shí)施例的在分布式數(shù)據(jù)庫(kù)中自我修復(fù)和管理存儲(chǔ)桶的過程的流程圖。集群810的每個(gè)節(jié)點(diǎn)812包括修復(fù)守護(hù)進(jìn)程,其在當(dāng)一個(gè)節(jié)點(diǎn)增加至集群810時(shí)開始被調(diào)用。修復(fù)守護(hù)進(jìn)程在不利用主機(jī)節(jié)點(diǎn)的情況下,利用蜂群算法來調(diào)整。修復(fù)守護(hù)進(jìn)程是容錯(cuò)基礎(chǔ)結(jié)構(gòu)的一部分,并修復(fù)來自故障主機(jī),故障磁盤,以及破壞的存儲(chǔ)桶的損害。該修復(fù)守護(hù)進(jìn)程也通過將具有太多存儲(chǔ)桶的節(jié)點(diǎn)上的存儲(chǔ)桶移動(dòng)至具有很少存儲(chǔ)桶的節(jié)點(diǎn),來幫助平衡負(fù)荷。例如,可以通過修復(fù)守護(hù)進(jìn)程給開始沒有存儲(chǔ)桶的新節(jié)點(diǎn)一些存儲(chǔ)桶。
[0144]在步驟1210,利用下述信息,例如每個(gè)節(jié)點(diǎn)812的磁盤數(shù),CPU (中央處理單元)功率,磁盤使用,等等,修復(fù)守護(hù)進(jìn)程計(jì)算每個(gè)節(jié)點(diǎn)存儲(chǔ)桶的目標(biāo)數(shù)。利用全球可用的信息,由每個(gè)節(jié)點(diǎn)為每個(gè)節(jié)點(diǎn)計(jì)算這些目標(biāo)。例如,如果一個(gè)節(jié)點(diǎn)故障,那么剩余節(jié)點(diǎn)的存儲(chǔ)桶的目標(biāo)將稍微增加。如果增加了新節(jié)點(diǎn),那么它將接收恰當(dāng)?shù)哪繕?biāo),所有其他節(jié)點(diǎn)的目標(biāo)將稍下降。在一些實(shí)施例中,每個(gè)節(jié)點(diǎn)812利用相同的數(shù)據(jù),以計(jì)算這些目標(biāo),因此,大多數(shù)節(jié)點(diǎn)812在大多數(shù)時(shí)間將計(jì)算出相同的目標(biāo)目的。然后利用目標(biāo)數(shù)確定是否重新組織或重新分配存儲(chǔ)桶和存儲(chǔ)桶的大小。在步驟1215,修復(fù)守護(hù)進(jìn)程查找應(yīng)當(dāng)無條件被復(fù)制的存儲(chǔ)桶。例如,如果存儲(chǔ)桶在相同的網(wǎng)架或者具有三個(gè)以下的副本的存儲(chǔ)桶內(nèi)被復(fù)制,那么存儲(chǔ)桶要無條件被復(fù)制。例如,存儲(chǔ)桶的少于三個(gè)的副本發(fā)起節(jié)點(diǎn)請(qǐng)求以制造存儲(chǔ)桶的副本。在一些實(shí)施例中,該計(jì)數(shù)不包括已經(jīng)被標(biāo)記為“主機(jī)丟棄”或“主機(jī)故障”的存儲(chǔ)桶或節(jié)點(diǎn)。標(biāo)記為主機(jī)丟棄和主機(jī)故障的存儲(chǔ)桶由人工設(shè)定管理?xiàng)l件,從而一旦移除它們的存儲(chǔ)桶同時(shí)該移除不引起這些“故障”存儲(chǔ)桶的數(shù)目小于三個(gè)副本的警告,就停止使用主機(jī),。修復(fù)守護(hù)進(jìn)程識(shí)別需要被復(fù)制的存儲(chǔ)桶,在1220,選擇具有可用存儲(chǔ)桶空間的節(jié)點(diǎn)。在一些實(shí)施例中,在存儲(chǔ)桶的另一副本不在的位置,選擇可用的存儲(chǔ)桶空間,使得沒有兩個(gè)存儲(chǔ)桶位于相同的節(jié)點(diǎn)812上。在步驟1230,從下述節(jié)點(diǎn)復(fù)制存儲(chǔ)桶,其中該節(jié)點(diǎn)被識(shí)別為具有要拷貝的存儲(chǔ)桶,以確保存儲(chǔ)桶的三個(gè)有效副本被存儲(chǔ)。
[0145]在一些實(shí)施例中,如果沒有要制作的無條件副本,那么在步驟1235,修復(fù)守護(hù)進(jìn)程會(huì)考慮從看起來過載的節(jié)點(diǎn)復(fù)制存儲(chǔ)桶?;趯⒋鎯?chǔ)桶的目標(biāo)數(shù)和當(dāng)前主機(jī)上存儲(chǔ)桶的實(shí)際數(shù)的比較,選擇過載節(jié)點(diǎn)。節(jié)點(diǎn)812具有的實(shí)際存儲(chǔ)桶比目標(biāo)數(shù)要多,則其是過載的?’節(jié)點(diǎn)812具有的實(shí)際存儲(chǔ)桶比目標(biāo)數(shù)要少,則是欠載的。在步驟1235,如果過載節(jié)點(diǎn)被識(shí)別,那么在步驟1240選擇過載節(jié)點(diǎn)。在步驟1250,選擇位于過載節(jié)點(diǎn)的存儲(chǔ)桶進(jìn)行復(fù)制。從過載節(jié)點(diǎn)選擇一個(gè)或多個(gè)存儲(chǔ)桶。由于典型地每個(gè)存儲(chǔ)桶具有多個(gè)副本可以用于拷貝,因此修復(fù)守護(hù)進(jìn)程基于下述因素,例如該節(jié)點(diǎn)當(dāng)前參與多少拷貝或者在寫入時(shí)存儲(chǔ)桶落后多少等等,挑選從哪個(gè)節(jié)點(diǎn)拷貝。在步驟1260,從包含選擇的存儲(chǔ)桶的副本的某節(jié)點(diǎn)復(fù)制位于過載節(jié)點(diǎn)上的一個(gè)或多個(gè)存儲(chǔ)桶的拷貝。在一些實(shí)施例中,重復(fù)卸載過載的節(jié)點(diǎn)直到所有過載節(jié)點(diǎn)被服務(wù)。
[0146]在一些實(shí)施例中,在步驟1265,當(dāng)具有四個(gè)或以上相同存儲(chǔ)桶的副本時(shí),修復(fù)守護(hù)進(jìn)程也考慮丟棄存儲(chǔ)桶。在 一些實(shí)施例中,如果沒有多余的存儲(chǔ)桶,那么在步驟1270,完成修復(fù)守護(hù)進(jìn)程。在一些實(shí)施例中,每個(gè)節(jié)點(diǎn)的修復(fù)守護(hù)進(jìn)程利用相同的輸入數(shù)據(jù),完成相同的計(jì)算以識(shí)別多余的存儲(chǔ)桶,以至于具有存儲(chǔ)桶的所有節(jié)點(diǎn)都知道哪個(gè)節(jié)點(diǎn)最好丟棄多余存儲(chǔ)桶。在步驟1280,在確定哪個(gè)節(jié)點(diǎn)應(yīng)當(dāng)丟棄多余存儲(chǔ)桶時(shí),例如,修復(fù)守護(hù)進(jìn)程會(huì)考慮在特殊節(jié)點(diǎn)存儲(chǔ)桶或存儲(chǔ)桶的更新是否落后,存儲(chǔ)桶是否在相同的網(wǎng)架內(nèi)復(fù)制,或者節(jié)點(diǎn)是否過載。一旦識(shí)別出節(jié)點(diǎn),在步驟1290丟棄多余的存儲(chǔ)桶。在一些實(shí)施例中,如果多于一個(gè)的節(jié)點(diǎn)具有多余的存儲(chǔ)桶,那么重復(fù)丟棄多余存儲(chǔ)桶的過程。
[0147]刪除
[0148]圖13A是根據(jù)一些實(shí)施例,用于示意蜂群系統(tǒng)1300如何刪除文件的框圖。在一些實(shí)施例中,節(jié)點(diǎn),例如圖3和5的352,552通過減輕本地操作系統(tǒng)1320的某些很長(zhǎng)操作,能夠?qū)崿F(xiàn)快速運(yùn)行,例如從磁盤空間讀取數(shù)據(jù)行,其中該很長(zhǎng)的操作不能被中斷,例如向磁盤寫入數(shù)據(jù)行或者刪除很大的文件。在一些實(shí)施例中,蜂群系統(tǒng)352,552通過將一些操作簡(jiǎn)化為操作系統(tǒng)1320更容易領(lǐng)會(huì)的碎片,來防止本地的操作系統(tǒng)1320進(jìn)行很長(zhǎng)的操作。取代利用本地操作系統(tǒng)1320的傳統(tǒng)的刪除功能1350,該刪除功能對(duì)于多個(gè)千兆的字節(jié)文件來說需要花費(fèi)許多秒,而蜂群系統(tǒng)1300將需要?jiǎng)h除的文件移至垃圾目錄1312,垃圾目錄在各個(gè)節(jié)點(diǎn)有指定的空間。后來,垃圾守護(hù)進(jìn)程1310運(yùn)行,并緩慢的將一個(gè)或多個(gè)較大的刪除文件切割為越來越小的文件碎片1340,刪除過程稱為有禮貌地解除鏈接(polite_unlink)。有禮貌地解除鏈接操作是用戶級(jí)別的功能,其打開文件,并實(shí)質(zhì)上將刪除操作分為小塊,使得刪除操作不獨(dú)占磁盤使用很長(zhǎng)時(shí)間。當(dāng)已經(jīng)減小一個(gè)或多個(gè)刪除文件時(shí),本地操作系統(tǒng)利用其傳統(tǒng)的刪除功能1350更快地刪除較小的文件碎片1340,以移除文件1330。垃圾守護(hù)進(jìn)程1320管理大多數(shù)文件的刪除。在一些實(shí)施例中,大文件1330重新命名為垃圾目錄1312,然后垃圾守護(hù)進(jìn)程1310運(yùn)行,有禮貌地解除和其鏈接,而不是本地操作系統(tǒng)1320。因此,利用垃圾守護(hù)進(jìn)程1310刪除文件會(huì)減輕本地操作系統(tǒng)1320的壓力,以允許,例如在蜂群系統(tǒng)1300中,為了更快的響應(yīng)時(shí)間,從其他過程(例如,響應(yīng)于用戶網(wǎng)絡(luò)搜索)更快速的完成讀取。
[0149]映射作業(yè)
[0150]圖13B示意了根據(jù)一些實(shí)施例的系統(tǒng)1301中服務(wù)兩個(gè)節(jié)點(diǎn)1313,1315的并行映射作業(yè)的過程。映射作業(yè)是并行程序,通過將工作分解為“分片(shard)” 1323,1325來處理完整的表,以改善執(zhí)行時(shí)間,從而有效運(yùn)行。每個(gè)分片1323,1325從本地磁盤,示出為存儲(chǔ)桶1317,1319,讀取恰當(dāng)?shù)谋淼乃槠?。例如,?shù)據(jù)庫(kù)系統(tǒng)1301上的映射作業(yè)具有至少兩個(gè)分片1323,1325。在示例中,分片21323在節(jié)點(diǎn)11313上運(yùn)行,直接從本地磁盤讀取存儲(chǔ)桶21315a的內(nèi)容。分片31325在節(jié)點(diǎn)21315上運(yùn)行,直接從本地磁盤讀取存儲(chǔ)桶31317b的內(nèi)容。映射作業(yè)通常通過在數(shù)據(jù)庫(kù)中設(shè)置數(shù)據(jù),或者向主過程返回?cái)?shù)據(jù),從而產(chǎn)生應(yīng)答。大多數(shù)完成類似工作的其他系統(tǒng)稱為“映射化簡(jiǎn)”,這是由于它們通過向主過程返回?cái)?shù)據(jù),而只有這一種方式返回應(yīng)答。但是,映射作業(yè)允許多種方式返回應(yīng)答。映射作業(yè)的立即寫入數(shù)據(jù)庫(kù)的能力意味著映射作業(yè)的部分結(jié)果可以立即用于讀取器,并且任何化簡(jiǎn)(表示為組合算符)能夠與映射計(jì)算一起重疊計(jì)算。
[0151]在一些實(shí)施例,映射作業(yè)利用組合算符,而不是明確的化簡(jiǎn)階段,來完成化簡(jiǎn),其中組合算符將在下一部分描述。組合算符是遠(yuǎn)程基本操作,在其他用途中,組合算符可以用于從許多節(jié)點(diǎn)獲得數(shù)據(jù)并將其組合為一個(gè)應(yīng)答。例如,映射作業(yè)中的“增加”組合算符可以用于計(jì)算在表的所有行中單個(gè)列的和。可以完成這些組合算符“化簡(jiǎn)”以向調(diào)用者返回?cái)?shù)據(jù)或者在數(shù)據(jù)庫(kù)中設(shè)定數(shù)據(jù)。映射作業(yè)可作為上述的映射作業(yè)被計(jì)算,或者作為替換,在一段時(shí)間內(nèi)進(jìn)入的數(shù)據(jù)流被計(jì)算,例如,網(wǎng)頁被爬取。
[0152]映射作業(yè)對(duì)于數(shù)據(jù)庫(kù),而不是呼叫者完成化簡(jiǎn)的另一個(gè)有趣的方面是化簡(jiǎn)的工作量可以分散在映射作業(yè)的整個(gè)過程,而不是集中在最后。這產(chǎn)生了更好的性能。另外,映射作業(yè)是蜂群系統(tǒng)350,500的另一容錯(cuò)的方面。如果磁盤或節(jié)點(diǎn)的故障引起了分片,例如分片1323,1325不能完成,那么,映射作業(yè)的“分片”將在保護(hù)恰當(dāng)?shù)拇鎯?chǔ)桶的不同的節(jié)點(diǎn)上
重新運(yùn)行。
[0153]D.組合算符
[0154]概述
[0155]圖14A根據(jù)一些實(shí)施例,列出了幾個(gè)組合算符的工具1408,其可以作為應(yīng)用1838存儲(chǔ)在圖18的存儲(chǔ)器1822中。該組合算符1408將在后續(xù)部分進(jìn)一步詳細(xì)描述。這些組合算符1408可以用在各種數(shù)據(jù)庫(kù)和搜索操作中,并會(huì)在各個(gè)部分詳細(xì)描述。組合算符1408可以包括,但不限于,下述:
[0156]記錄計(jì)數(shù)(Logcount) 1422-將一組項(xiàng)目中獨(dú)特的項(xiàng)目近似計(jì)數(shù)
[0157]TopN1424-將數(shù)據(jù)項(xiàng)排名,僅保留排名最高的N個(gè)[0158]Set () 1426-將最后的值視為應(yīng)答
[0159]附加1428-將字符串附加至現(xiàn)有字符串的末端
[0160]Comb_Addl430-在現(xiàn)有的值上增加值
[0161]圖14B是根據(jù)一些實(shí)施例,用于示意分布式數(shù)據(jù)庫(kù)系統(tǒng),例如蜂群系統(tǒng)350,500中節(jié)點(diǎn)1410的增加組合算符的框圖。在一些實(shí)施例中,組合算符在蜂群系統(tǒng)350,500的許多不同級(jí)別組合任務(wù),這減少了網(wǎng)絡(luò)上傳送和寫入磁盤的數(shù)據(jù)量。例如,考慮圖14B中示意的“增加”組合算符。對(duì)于給定數(shù)量的請(qǐng)求,其中該請(qǐng)求為在節(jié)點(diǎn)31410的磁盤1412存儲(chǔ)的行中增加值,那么第一過程1438 (Pl)的第一請(qǐng)求代表向磁盤1412的行中增加+1。另一過程1442代表另一增加+1。因此,在某些級(jí)別(這里是節(jié)點(diǎn)N11432),這些增加組合為一個(gè)組合操作,即增加+2。由請(qǐng)求處理器,例如節(jié)點(diǎn)31410的存儲(chǔ)桶守護(hù)進(jìn)程1414接收求和的請(qǐng)求。在一些實(shí)施例中,從單個(gè)過程,例如P31458和P41462所示,接收對(duì)于磁盤1412中行的多于以上的增加。過程P31458具有增加+3,過程P41462具有增加+4。因此,由節(jié)點(diǎn)N21452接收的請(qǐng)求之和等于增加+7。因此,增加請(qǐng)求可以來自不同的位置(例如,N1,N2),但是可以由存儲(chǔ)桶守護(hù)進(jìn)程1414組合。因此,存儲(chǔ)桶守護(hù)進(jìn)程1414對(duì)于磁盤1412中存儲(chǔ)的行的值,接收總共增加+9。將操作組合會(huì)減少更新值所需的資源。
[0162]三個(gè)存儲(chǔ)桶復(fù)制中的組合算符
[0163]圖15是根據(jù)一些實(shí)施例,用于示意在分布式數(shù)據(jù)庫(kù)系統(tǒng),例如蜂群系統(tǒng)500中,用于寫入三個(gè)存儲(chǔ)桶復(fù)制(在節(jié)點(diǎn)1510a-c)的組合算符的框圖。節(jié)點(diǎn)11530中的過程1538包括兩個(gè)寫入請(qǐng)求,即增加表的給定行和列,以發(fā)送至寫入守護(hù)進(jìn)程1532,該進(jìn)程可以成功找到相同表中的相同行和列的更多增加,并組合它fl]。節(jié)點(diǎn)11530中的過程P21542也包括在相同行增加+3。因此,寫入守護(hù)進(jìn)程1532中總的增加是增加+5。類似地,過程P31558具有增加+2,過程P41562包括在相同行的增加+4。因此,節(jié)點(diǎn)21550的寫入守護(hù)進(jìn)程1552接收增加+6。這些增加被發(fā)送至若干遠(yuǎn)程的存儲(chǔ)桶守護(hù)進(jìn)程1514,1518,1520(每個(gè)副本一個(gè)),其依次組合存儲(chǔ)器中更多的操作,直到將數(shù)據(jù)寫入磁盤。在各自三個(gè)節(jié)點(diǎn)1510a-c的存儲(chǔ)桶守護(hù)進(jìn)程1514,1518,1520接收該增加。因此,每個(gè)存儲(chǔ)桶守護(hù)進(jìn)程1514,1518,1520向各個(gè)Inc文件1504,1506, 1508寫入總共增加+11。
[0164]由于所有這些組合算符,在集群中對(duì)于表中相同列和行的上百萬增加操作可能僅產(chǎn)生幾個(gè)或者一個(gè)磁盤處理。
[0165]組合算符可以以幾種方式存儲(chǔ)在數(shù)據(jù)庫(kù)中。一種方式是將組合算符存儲(chǔ)為數(shù)據(jù)庫(kù)的行中的列。其他方式是將組合算符嵌入在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中,例如Perl散列或Python字典,其存儲(chǔ)在數(shù)據(jù)庫(kù)的行中的列。這是特殊的組合算符,comb_hash,其是包含其他組合算符,例如 comb_add 或 comb_logcount 的 Perl 散列或 Python 字典。
[0166]組合算符也作為普通變量的對(duì)象存在,即它們可以是Perl或Python變量。
[0167]由特殊的組合算符,comb_delete代表刪除的值,其作用有點(diǎn)類似Casandra中的
“苗 T=T ”
基7h ο
[0168]在一些實(shí)施例中,記錄產(chǎn)生組合算符的時(shí)間,該時(shí)間用于確定當(dāng)情況出現(xiàn)時(shí),選擇哪個(gè)值,例如對(duì)相同值進(jìn)行的2個(gè)comb—set,或I個(gè)comb—set和一個(gè)comb—delete,或一系列comb—add和一個(gè)comb—set。這有助于組合算符計(jì)算的決定方法。例如,如果被組合的操作是在 11: 00am,comb—set 為零,在 10:35am,comb—add 為 +1,然后結(jié)果將是在 11am,comb—set為零。
[0169]在一些實(shí)施例中,利用協(xié)議,例如NTP (網(wǎng)絡(luò)時(shí)間協(xié)議),認(rèn)真同步集群中節(jié)點(diǎn)的時(shí)鐘,用以有助于前述段落中所述的過程。
[0170]SetO 操作
[0171]除了增加之外,在我們的系統(tǒng)中,已經(jīng)對(duì)非常大量的操作實(shí)現(xiàn)了組合算符的使用。一種使用是“setO”。set O組合算符1426將最后的值視為應(yīng)答。因?yàn)閟et()可以作為組合算符寫入,因此,它使用了系統(tǒng)中所有可用的組合算符的基礎(chǔ)結(jié)構(gòu)。在大多數(shù)數(shù)據(jù)庫(kù)中,如果100個(gè)節(jié)點(diǎn)上的10個(gè)過程將1000個(gè)不同的值設(shè)定到特殊表的給定行和列,那么將從節(jié)點(diǎn)向數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行1000個(gè)RPC調(diào)用,每個(gè)調(diào)用產(chǎn)生一個(gè)處理記錄的寫入。相反,節(jié)點(diǎn)1530,1550上的寫入器守護(hù)進(jìn)程1532,1552可以將10個(gè)本地的set操作組合為一個(gè),節(jié)點(diǎn)1510a-c上的存儲(chǔ)桶守護(hù)進(jìn)程1514,1518,1520可以將100個(gè)進(jìn)入的set O操作組合為一個(gè)set O,產(chǎn)生一個(gè)磁盤處理,其中該節(jié)點(diǎn)1510a_c具有該存儲(chǔ)桶的副本。這產(chǎn)生高很多的性能。
[0172]在一些實(shí)施例中,在某些情況下組合算符1408可以和不同的組合算符1408組合,例如,單元可以在set和增加組合算符1426,1430上運(yùn)行。如果兩個(gè)組合算符是連帶的,例如 comb (comb (a, b), c) =comb (a, (comb (b, c)),然后,組合算符可以一起使用。
[0173]TopN
[0174]圖16A是根據(jù)一些實(shí)施例,用于示意TopN排名1603的數(shù)據(jù)結(jié)構(gòu)的圖示。如圖16A所示,送入TopN1603的單個(gè)項(xiàng)目是(名稱,排名,備注)的元組,其中“名稱”是標(biāo)量(字符串,數(shù)值等等),“排名”是數(shù)值(越大越好),“備注”是任意的數(shù)據(jù)結(jié)構(gòu),可選擇地用于記錄有關(guān)“姓名”的附加信息。N的值設(shè)定了 TopN1603的存儲(chǔ)器使用的界限。TopN1603的示例性使用包括:記憶N個(gè)最重要(最高排名)的涉及單詞“Obama”的網(wǎng)頁,或者記憶涉及單詞“Obama”的爬取的最新的N個(gè)網(wǎng)頁。在該示例中,“網(wǎng)頁”的排名是網(wǎng)頁被爬取的時(shí)間。越大的時(shí)間值指示越近的爬取。
[0175]記錄計(jì)數(shù)(Logcount)
[0176]圖16B-16C示意了根據(jù)一些實(shí)施例的,在分布式數(shù)據(jù)庫(kù)系統(tǒng),例如蜂群系統(tǒng)350,500中來自記錄計(jì)數(shù)組合算符1422和過程1601的記錄計(jì)數(shù)結(jié)構(gòu)1600的各種實(shí)施例。記錄計(jì)數(shù)1422解決下述問題,即利用少量的存儲(chǔ)器,獲得一組項(xiàng)目中的獨(dú)特項(xiàng)目的近似計(jì)數(shù)。例如,記錄計(jì)數(shù)1422可以用于計(jì)數(shù)導(dǎo)入網(wǎng)站的鏈接的數(shù)量。可能具有O或I個(gè)該導(dǎo)入鏈接,或者諸如yahoo, com的網(wǎng)站具有上百萬個(gè)導(dǎo)入鏈接。理想的是在不必存儲(chǔ)它們?nèi)康那闆r下,計(jì)數(shù)這些鏈接。通過僅計(jì)數(shù)獨(dú)特的導(dǎo)入鏈接,數(shù)據(jù)可以重復(fù)的重新處理,而仍保持對(duì)獨(dú)特的導(dǎo)入鏈接的精確計(jì)數(shù)。
[0177]通過稱為“布隆過濾器”的技術(shù)典型地解決了對(duì)獨(dú)特的項(xiàng)目,例如訪問的網(wǎng)站進(jìn)行計(jì)數(shù)的問題,當(dāng)其被提供數(shù)十億的項(xiàng)目時(shí),其需要存儲(chǔ)上百萬字節(jié)以給出精確的答案。但是,記錄計(jì)數(shù)1422是使用了少得多的存儲(chǔ)器,但精度稍差的方法。在一個(gè)實(shí)施例中,僅利用16個(gè)字節(jié)的存儲(chǔ),對(duì)數(shù)十億的獨(dú)特項(xiàng)目進(jìn)行計(jì)數(shù),其精度大約是+-50%。該很小的存儲(chǔ)使得可以利用少的資源對(duì)單獨(dú)的多種數(shù)據(jù)進(jìn)行記錄計(jì)數(shù),其比利用布隆過濾器僅對(duì)一種數(shù)據(jù)進(jìn)行唯一計(jì)數(shù)使用的資源少。另外,記錄計(jì)數(shù)1422可以用于兩個(gè)映射作業(yè)并且是遞增的。
[0178]圖16C中示意的過程1601是一個(gè)示例,其中記錄計(jì)數(shù)1422可以用于計(jì)數(shù)一組M個(gè)輸入值vl,v2,…vM。在步驟1630,每個(gè)輸入值被散列為散列值hi,h2…h(huán)M。記錄計(jì)數(shù)算法使用了 N個(gè)中間數(shù)據(jù)il,i2,…,iN。在計(jì)數(shù)任何項(xiàng)目之前,il…iN是零。在步驟1635,為了計(jì)數(shù)第一個(gè)散列值hi,散列值hi被分為N個(gè)部分hlb-hlN。在一些實(shí)施例中,散列hi包含128位,如果N=4,那么,每個(gè)部分是32位。該實(shí)施例中的中間值il…iN每個(gè)也是32位,因此,該實(shí)施例中由記錄計(jì)數(shù)所需的總中間存儲(chǔ)是128位。[0179]在步驟1640,對(duì)于第一個(gè)散列值的每個(gè)部分1ι1_Ρ..1ι1_Ν來說,找到了最低的位組。例如,如果hl_l=6,或者二進(jìn)制0110,則最低的位組是第二位。在步驟1645,在第一個(gè)中間值il設(shè)定相同的位。對(duì)于散列值hi的N個(gè)部分中的每一個(gè)來說,重復(fù)步驟1640和1645。最終,對(duì)于每個(gè)散列值h2,h3?",hM來說,重復(fù)從1635開始的步驟直到計(jì)數(shù)所有散列值。
[0180]為了在給定中間值ib-1N的情況下計(jì)算輸出計(jì)數(shù)C,在步驟1660計(jì)算記錄變量k。為了計(jì)算k,要找到每個(gè)中間值iP"iN中的最低未設(shè)定位。例如,如果il=0111011111,則最低未設(shè)定位是6。在步驟1664,對(duì)于所有iL...iN,將最低未設(shè)定位的值一起求平均。
[0181]然后在步驟1665由方程C=2~ (k_l)確定最終輸出值。
[0182]在數(shù)學(xué)上理解該算法的關(guān)鍵是iL...iN中較大的位,比較小的位更少可能被設(shè)定。記錄計(jì)數(shù)1422與在靶面上投擲飛鏢類似,如圖16B1610-1620所示,其中取代相似大小的目標(biāo),每個(gè)框是其前面框的1/2大小。在一半的時(shí)間中,飛鏢將擊中最大的框1610,很小的一部分時(shí)間中,飛鏢將擊中一個(gè)很小的框1620。在幾次投擲之后,所有大的框1610-1616已經(jīng)被擊中,但是還有很小的框1620沒有被擊中。沒有被擊中的框越小,則計(jì)數(shù)越大。該方法僅是對(duì)計(jì)數(shù)的近似,計(jì)數(shù)的誤差可能會(huì)相當(dāng)大。但是,為了更精確地計(jì)數(shù)C,維持N個(gè)單獨(dú)的靶面il-1N,并且將它們的計(jì)數(shù)平均。
[0183]相反,繼續(xù)以靶面模擬,布隆過濾器像具有相等大小的框的靶面。因此,框的數(shù)量會(huì)非常大以計(jì)數(shù)大量的飛鏢,這比記錄計(jì)數(shù)1422使用了更多的存儲(chǔ)。
[0184]最終,注意,如果再次計(jì)數(shù)散列值hl,則將在已經(jīng)設(shè)置的iP"iN中設(shè)置位,導(dǎo)致計(jì)數(shù)沒有增加。
[0185]在一些實(shí)施例中,為了使得記錄計(jì)數(shù)更精確,N可以增加,iI...iN的大小可以增加至64位或更多。例如,可以產(chǎn)生稱為記錄計(jì)數(shù)64的變形,其中N=64,iP"iN的大小為32位。能夠?yàn)榉浅P〉挠?jì)數(shù)提供更高精度的變形算法,通過將密鑰本身(或它們的散列)存儲(chǔ)于通常用于記錄il…iN的存儲(chǔ)字節(jié),來為非常小的計(jì)數(shù)記錄精確的應(yīng)答。一個(gè)標(biāo)志指示其什么時(shí)候完成。如果計(jì)數(shù)增加至沒有更多存儲(chǔ)剩余的點(diǎn),那么算法切換至利用正常的記錄計(jì)數(shù)。
[0186]如前所述,記錄計(jì)數(shù)被表述為二次冪,因此,所有操作很容易表述為二進(jìn)制算術(shù),其是非??斓?。在一些實(shí)施例中,另一種變形是使用不同于1/2的因數(shù)來確定在ib-1N中設(shè)定哪個(gè)位。這可以認(rèn)為將圖16B中的框1610-1620減小尺寸,但減小因數(shù)不是1/2。例如,因數(shù)9/10需要iL...iN的大小增加到能夠存儲(chǔ)40億個(gè)獨(dú)特的密鑰,但是該計(jì)數(shù)更加精確。
[0187]在一些實(shí)施例中,實(shí)施附加的變形,例如,其中給定位的估算器(計(jì)數(shù))的精度取決于任意的指數(shù)式衰減€。由于記錄計(jì)數(shù)1422具有能夠相當(dāng)精確地估計(jì)獨(dú)特字符串的數(shù)量的能力,因此,其是非常有用的工具。但是,記錄計(jì)數(shù)1422受到其可以計(jì)數(shù)的最大數(shù)的限制。例如,最大的記錄計(jì)數(shù)值232通常用于快速的結(jié)果,并由于普遍使用32位而被選擇。但是,在40億次或更多次計(jì)數(shù)之后,這個(gè)大小的記錄計(jì)數(shù)不再有用。記錄計(jì)數(shù)1422也受限于大小/精度的折衷。可以發(fā)現(xiàn),32字節(jié)的存儲(chǔ)容量允許記錄計(jì)數(shù)1422存儲(chǔ)精度在+/-50%范圍內(nèi)的數(shù)字(計(jì)數(shù))。但是,如上所述,一些變形可能包括需要更高或更低精度的系統(tǒng)。為了允許更高的靈活性,構(gòu)造記錄計(jì)數(shù)1422,其中給定位的概率不再是50%,而是任意的指數(shù)式衰減。這將使記錄計(jì)數(shù)的估計(jì)變得復(fù)雜(最初通過位模式中的“洞”,其中這些“洞”不僅可能存在和承載有用的信息),但是允許以每個(gè)估算器為基礎(chǔ),平衡最大計(jì)數(shù)和大小/精度的折衷,這將在后面部分中描述。
[0188]在一些實(shí)施例中,記錄計(jì)數(shù)1422可以通過對(duì)指數(shù)式衰減因數(shù)C (上述引入的)設(shè)置要求,來進(jìn)行修改。作為另一記錄計(jì)數(shù)變形,首先需要良好的消化(散列)功能,其中d(string)一>[0,1)。給定C,在位矢量中設(shè)定位,定義如下:
[0189]
【權(quán)利要求】
1.一種在數(shù)據(jù)庫(kù)系統(tǒng)中計(jì)數(shù)項(xiàng)目的方法,包括: 在具有一個(gè)或多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)系統(tǒng)處,包括, 一個(gè)或多個(gè)處理器和存儲(chǔ)器,所述一個(gè)或多個(gè)節(jié)點(diǎn)的存儲(chǔ)器存儲(chǔ)要由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序; 識(shí)別M個(gè)項(xiàng)目; 計(jì)數(shù)M個(gè)項(xiàng)目中獨(dú)特的項(xiàng)目; 確定用于M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的記錄計(jì)數(shù);和 存儲(chǔ)獨(dú)特項(xiàng)目的記錄計(jì)數(shù), 其中確定記錄計(jì)數(shù)包括: 將M個(gè)項(xiàng)目中每個(gè)獨(dú)特的項(xiàng)目分為N個(gè)部分的集合,其中每個(gè)N個(gè)部分包括M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的子集,其中獨(dú)特項(xiàng)目的每個(gè)子集表述為位值; 對(duì)于M個(gè)項(xiàng)目的每個(gè)子集,找到N個(gè)部分中每一個(gè)的一最低未設(shè)定位; 對(duì)于N個(gè)部分的集合中獨(dú)特項(xiàng)目的每個(gè)子集,設(shè)定N個(gè)中間值中的最低位; 對(duì)于N個(gè)部分的每個(gè)集合,將N個(gè)中間值的最低未設(shè)定位的值進(jìn)行平均;以及 將平均值作為二次冪表達(dá)的對(duì)數(shù)值進(jìn)行應(yīng)用。
2.如權(quán)利要求1所述的方法,還包括: 將平均值作為二次冪表達(dá)的`對(duì)數(shù)值進(jìn)行應(yīng)用之后, 在數(shù)據(jù)庫(kù)的存儲(chǔ)器中存儲(chǔ)所述N個(gè)中間值。
3.如權(quán)利要求1所述的方法,其中確定記錄計(jì)數(shù)還包括確定該組獨(dú)特項(xiàng)目的近似計(jì)數(shù)的精度近似等于正負(fù)50%。
4.如權(quán)利要求1所述的方法,其中N個(gè)中間值中較大的位值與較小的位值相比更不可能被設(shè)置。
5.如權(quán)利要求1所述的方法,其中N個(gè)部分的集合中每個(gè)N個(gè)部分包括32位,所需的總共的記錄計(jì)數(shù)存儲(chǔ)器包括128位。
6.如權(quán)利要求1所述的方法,其中M個(gè)項(xiàng)目包括網(wǎng)站的導(dǎo)入鏈接的URL。
7.如權(quán)利要求1所述的方法,其中M個(gè)項(xiàng)目包括具有給定簽名的電子郵件的收件人,其用于檢測(cè)垃圾郵件。
8.如權(quán)利要求1所述的方法,其中M個(gè)項(xiàng)目包括具有給定簽名的電子郵件發(fā)件人的C類IP網(wǎng)絡(luò),其用于檢測(cè)來自僵尸網(wǎng)絡(luò)的垃圾郵件。
9.如權(quán)利要求1所述的方法,其中M個(gè)項(xiàng)目包括鏈接網(wǎng)頁的網(wǎng)頁地理位置。
10.如權(quán)利要求1所述的方法,其中M個(gè)項(xiàng)目包括互聯(lián)網(wǎng)服務(wù)器的IP子網(wǎng),其中該互聯(lián)網(wǎng)服務(wù)器包含鏈接網(wǎng)頁的網(wǎng)頁。
11.一種在數(shù)據(jù)庫(kù)系統(tǒng)中計(jì)數(shù)項(xiàng)目的方法,包括: 在具有一個(gè)或多個(gè)節(jié)點(diǎn)的數(shù)據(jù)庫(kù)系統(tǒng)處,包括一個(gè)或多個(gè)處理器和存儲(chǔ)器,所述一個(gè)或多個(gè)節(jié)點(diǎn)的存儲(chǔ)器存儲(chǔ)要由所述一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序; 識(shí)別M個(gè)項(xiàng)目; 計(jì)數(shù)M個(gè)項(xiàng)目中獨(dú)特的項(xiàng)目; 確定用于M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的記錄計(jì)數(shù); 存儲(chǔ)獨(dú)特項(xiàng)目的記錄計(jì)數(shù),其中確定記錄計(jì)數(shù)包括: 將M個(gè)項(xiàng)目中每個(gè)獨(dú)特的項(xiàng)目分為N個(gè)部分的集合, 其中每個(gè)N個(gè)部分包括M個(gè)項(xiàng)目中獨(dú)特項(xiàng)目的子集,和 其中獨(dú)特項(xiàng)目的每個(gè)子集表述為位值; 對(duì)于M個(gè)項(xiàng)目的每個(gè)子集,找到N個(gè)部分中每一個(gè)的一最低未設(shè)定位; 利用任意指數(shù)式衰減因數(shù),選擇在N個(gè)中間值中設(shè)定哪個(gè)位, 對(duì)于N個(gè)部分的每個(gè)集合來說,將N個(gè)中間值的最低未設(shè)定位的值進(jìn)行平均;以及 將平均值作為以與任意指數(shù)衰減因數(shù)相關(guān)的任意底數(shù)表達(dá)的對(duì)數(shù)值進(jìn)行應(yīng)用。
12.如權(quán)利要求11所述的方法,其中N個(gè)中間值中較大的位值與較小的位值相比更不可能被設(shè)置。
13.如權(quán)利要求11所述的方法,其中N個(gè)部分的集合中每個(gè)N個(gè)部分包括32位,所需的總共的記錄計(jì)數(shù)存儲(chǔ)器包括128位。
14.如權(quán)利要求11所述的方法,其中M個(gè)項(xiàng)目包括網(wǎng)站的導(dǎo)入鏈接的URL。
15.如權(quán)利要求11所述的 方法,其中M個(gè)項(xiàng)目包括具有給定簽名的電子郵件的收件人,其用于檢測(cè)垃圾郵件。
【文檔編號(hào)】G06F17/30GK103488680SQ201310356876
【公開日】2014年1月1日 申請(qǐng)日期:2010年6月21日 優(yōu)先權(quán)日:2009年6月19日
【發(fā)明者】布林·羅伯特·多爾, 格雷戈里·B·林達(dá)爾, 邁克爾·馬克森, 基思·彼得斯, 羅伯特·邁克爾·薩利巴, 里奇·斯科倫塔, 羅伯特·N·圖爾, 克利須那·斯里尼瓦桑 申請(qǐng)人:布雷克公司