基于分布式數據庫的網頁url去重方法
【專利摘要】本發明涉及分布式數據庫技術領域,特別是一種基于分布式數據庫的網頁URL去重方法,包括以下步驟,步驟S101:獲取待爬取URL,由分布式爬蟲獲取網頁待爬取的網頁URL;步驟S102:計算URL的hash值;步驟S103:查詢數據庫,分布式爬蟲將各自采集庫中的URL壓縮后統一發送到分布式數據庫做去重處理;步驟S104:反饋結果,將數據查詢結果狀態返回;步驟S105:數據采集,爬蟲節點根據返回結果狀態確定該網頁是否可以爬取。采用上述方法后,本發明的基于分布式數據庫的網頁URL去重方法,很好地解決了海量URL去重過程中的內存問題、單點問題,同時保證了高查詢效率與低碰撞率。
【專利說明】
基于分布式數據庫的網頁URL去重方法
技術領域
[0001]本發明涉及分布式數據庫技術領域,特別是一種基于分布式數據庫的網頁URL去重方法。
【背景技術】
[0002]網頁URL去重對爬蟲有著重要意義。目前的去重策略主要分為兩類:基于內存的去重方法、基于磁盤的去重方法。
[0003]基于內存的去重方法需要面對內存溢出的問題,尤其是在面對海量日益增長的網頁URL的情況下。目前通用的解決方案是采用Bloom Filter,這種方法雖然解決了內存溢出問題,但卻犧牲了準確率,隨著數據量的增大,碰撞概率也會增大。
[0004]基于磁盤的去重方法不存在內存溢出問題,這類方法一般采用數據庫去重的方式。對于傳統關系型數據庫,在處理海量URL去重時會面臨單點問題以及查詢效率隨數據量增長而下降問題。
[0005]中國發明專利CN 104809182 A公開了一種基于動態可分裂Bloom Filter的網絡爬蟲URL去重方法,該方法的基礎是一個動態可分裂Bloom Fi I ter (簡記DSBF ),它與Interner Archive爬蟲和Apoide爬蟲中均勾負擔URL存取任務的固定結構Bloom Fi I ter不同,而是具有可按需靈活分裂成多層的動態可擴展結構。雖然采用Bloom Filter可以達到節省內存的目的,但這種空間高效是以犧牲準確率為前提的。
【發明內容】
[0006]本發明需要解決的技術問題提供一種基于去中心化的分布式數據庫的去重方法。
[0007]為解決上述的技術問題,本發明的基于分布式數據庫的網頁URL去重方法,包括以下步驟,包括以下步驟,
[0008]步驟SI OI:獲取待爬取URL,由分布式爬蟲獲取網頁待爬取的網頁URL;
[0009]步驟S102:計算 URL 的 hash 值;
[0010]步驟S103:查詢數據庫,分布式爬蟲將各自采集庫中的URL壓縮后統一發送到分布式數據庫做去重處理;
[0011]步驟S104:反饋結果,將數據查詢結果狀態返回;
[0012]步驟S105:數據采集,爬蟲節點根據返回結果狀態確定該網頁是否可以爬取。
[0013]進一步的,所述步驟S104具體包括如下步驟,
[0014]步驟S1041:判斷數據庫中數據是否存在;如果不存在,則進入步驟S1042;如果存在,則進入步驟S1043;
[0015]步驟S1042:直接寫入該數據,然后返回成功,進入步驟S1044;
[0016]步驟S1043:返回失敗;
[0017]步驟S1044:將數據庫查詢結果專題返回分布式爬蟲所在節點。
[0018]進一步的,所述步驟S102中所述計算URL的hash值具體為利用MurmurHash方法將網頁URL映射為long型的hash值。
[0019]進一步的,所述步驟S103中所述分布式數據庫采用去中心化結構,所述分布式數據庫存儲時采用一致性哈希算法。
[0020]更進一步的,所述一致性哈希算法采用虛擬節點方式,所述虛擬節點就是將一個實際的物理節點劃分成多個不連續的虛擬節點,當有節點宕機時,該節點的數據會均勻分配到其他物理節點。
[0021]采用上述方法后,本發明的基于分布式數據庫的網頁URL去重方法,很好地解決了海量URL去重過程中的內存問題、單點問題,同時保證了高查詢效率與低碰撞率。
【附圖說明】
[0022]下面將結合附圖和【具體實施方式】對本發明作進一步詳細的說明。
[0023]圖1為本發明基于分布式數據庫的網頁URL去重方法的流程圖。
【具體實施方式】
[0024]如圖1所示,本發明的基于分布式數據庫的網頁URL去重方法,包括以下步驟,步驟SlOl:獲取待爬取URL,由分布式爬蟲獲取網頁待爬取的網頁URL。
[0025]步驟S102:計算URL的hash值;利用MurmurHash方法將網頁URL映射為long型的hash值。MurmurHash的優點是高運算性能,低碰撞率。此外,該算法還可以實現對數據的壓縮,進而提高通信效率,節省存儲空間。
[0026]步驟S103:查詢數據庫,分布式爬蟲將各自采集庫中的URL壓縮后統一發送到分布式數據庫做去重處理。本發明中的數據庫系統采用去中心化的結構,實現的主要技術手段是一致性哈希。
[0027]—致性哈希算法是分布式系統中常用的算法,它的優勢是穩定性高,支持動態擴展。在一個分布式的存儲系統,要將數據存儲到具體的節點上,如果采用普通的將數據hash值按節點數求余的方法,會導致擴展的問題:當有機器加入或退出這個集群,則所有的數據映射都將無效。而一致性hash則先將各個節點映射到一個虛擬的環上,環的周長為hash算法的取值范圍。數據存儲時,會根據其hash值將數據順時針分配到最近的節點上。配合備份策略,當有節點宕機時,該節點所負責的數據會順時針傳遞到最近的節點負責存儲。
[0028]—致性hash可能導致的問題之一就是“雪崩”問題,即當有節點宕機時,會導致最近節點負載急劇上升,進而使該節點宕機,如此反復,整個集群就會失效。本發明采用虛擬節點的方式來避免這一問題。虛擬節點就是將一個實際的物理節點劃分成多個不連續的虛擬節點,當有節點宕機時,該節點的數據會均勻分配到其它物理節點。
[0029]步驟S104:反饋結果,將數據查詢結果狀態返回,具體包括以下步驟,
[0030]步驟S1041:判斷數據庫中數據是否存在;如果不存在,則進入步驟S1042;如果存在,則進入步驟S1043;
[0031]步驟S1042:直接寫入該數據,然后返回成功,進入步驟S1044;
[0032]步驟S1043:返回失敗;
[0033]步驟S1044:將數據庫查詢結果專題返回分布式爬蟲所在節點。
[0034]步驟S105:數據采集,爬蟲節點根據返回結果狀態確定該網頁是否可以爬取。
[0035]本發明具有以下幾個優點:
[0036]I)采用基于磁盤的去重方式。
[0037]基于內存的去重方式雖然能達到很高的處理性能,但應對數據急速膨脹的能力不足。對像搜索引擎這樣的海量數據采集系統而言,按照常規的策略完全在內存中存放是不可能的。目前比較有效的策略是采用BloomFilter來達到節省內存的目的,但這種空間高效是以犧牲準確率為前提的。因此,本發明采用基于磁盤存儲的方式,可以完全忽略海量數據所引發的內存問題。
[0038]2)基于去中心化的分布式數據庫。
[0039]數據庫大小的線型增長,會導致查詢數據庫的響應時間以指數方式增長。傳統數據庫雖然理論上支持Sharding機制,但實際操作中卻困難重重。鑒于分布式數據庫在支持該機制上有著天然的優勢,因此,本發明采用了基于分布式數據庫的架構,以保證數據庫的在數據量急速增長的場景中的仍然保持較高的查詢效率。
[0040]此外,本發明采用去中心化的結構,通過數據冗余和一致性hash策略來保證數據的高效路由以及數據庫集群的高可用性。
[0041 ] 3)利用Murmur Hash對網頁URL進行壓縮。
[0042]網頁的URL多數比較長,直接存儲會耗費很大的存儲空間。因此,本發明采用Murmur Hash算法實現對數據的壓縮,不僅保證了去重的低碰撞率,也提高了數據采集節點與數據庫集群的通信效率,同時有效地節省了磁盤存儲空間。
[0043]雖然以上描述了本發明的【具體實施方式】,但是本領域熟練技術人員應當理解,這些僅是舉例說明,可以對本實施方式作出多種變更或修改,而不背離發明的原理和實質,本發明的保護范圍僅由所附權利要求書限定。
【主權項】
1.一種基于分布式數據庫的網頁URL去重方法,其特征在于,包括以下步驟, 步驟SlOl:獲取待爬取URL,由分布式爬蟲獲取網頁待爬取的網頁URL; 步驟S102:計算URL的hash值; 步驟S103:查詢數據庫,分布式爬蟲將各自采集庫中的URL壓縮后統一發送到分布式數據庫做去重處理; 步驟S104:反饋結果,將數據查詢結果狀態返回; 步驟S105:數據采集,爬蟲節點根據返回結果狀態確定該網頁是否可以爬取。2.按照權利要求1所述的基于分布式數據庫的網頁URL去重方法,其特征在于,所述步驟S104具體包括如下步驟, 步驟S1041:判斷數據庫中數據是否存在;如果不存在,則進入步驟S1042;如果存在,則進入步驟S1043; 步驟S1042:直接寫入該數據,然后返回成功,進入步驟S1044; 步驟S1043:返回失敗; 步驟S1044:將數據庫查詢結果專題返回分布式爬蟲所在節點。3.按照權利要求1所述的基于分布式數據庫的網頁URL去重方法,其特征在于:所述步驟S102中所述計算URL的hash值具體為利用MurmurHash方法將網頁URL映射為long型的hash 值。4.按照權利要求1所述的基于分布式數據庫的網頁URL去重方法,其特征在于:所述步驟S103中所述分布式數據庫采用去中心化結構,所述分布式數據庫存儲時采用一致性哈希算法。5.按照權利要求4所述的基于分布式數據庫的網頁URL去重方法,其特征在于:所述一致性哈希算法采用虛擬節點方式,所述虛擬節點就是將一個實際的物理節點劃分成多個不連續的虛擬節點,當有節點宕機時,該節點的數據會均勾分配到其他物理節點。
【文檔編號】G06F17/30GK105956068SQ201610277708
【公開日】2016年9月21日
【申請日】2016年4月27日
【發明人】陳丹, 黃三偉
【申請人】湖南蟻坊軟件有限公司