不重複的關鍵在於爬蟲記住爬行的歷史.只有記住過去才可能不重複。爬蟲記錄歷史的方式是雜湊表(也稱為」雜湊表,』).每一條記錄是否被抓取的資訊存放在雜湊表的某乙個槽位上。如果某網頁在過去的某個時刻已經被抓取,則將其對應的槽位的值置i;反之置0,而具體對映到哪乙個槽位,則由雜湊函式決定。
i . md5簽名函式
在介紹雜湊表前,首先簡單了解一下md5簽名函式。md5簽名是乙個雜湊函式,可以將任意長度的資料流轉換為乙個固定長度的數字(通常為4個整型數,即128位)。這個數字稱為.『資料流的簽名」或者『·指紋」.並且資料流中的任意乙個微小的變化都會導致簽名值發生變化。
將url字串數位化是通過某種計算將任何乙個url字串唯一地計算成乙個整數。在乙個url雜湊函式對映下.任意乙個字串都唯一地對應乙個整數。乙個64位整數可以表達!.8x 10000000 tb (i tb= 1000 gb),而字串空串3的大小遠遠大於64位整數所表達的整數空間大小,因此碰撞是不可避免的。所謂碰撞是指那些字串不同.而計算出相同的簽名值的情況。然而如果雜湊函式設計得足夠好,則相互碰撞的機會可以小到忽略不計。
標準md5簽名的整數空間很大.128位整數能表達2的128次方個不同的數.這是十分巨大的,而實際分配的雜湊表空間十分有限,乙個普通32位處理器.理論上最多可以分配2的32次方大小的記憶體,即4g大小的記憶體。
因此,在實際處理中將簽名值進行模運算對映到實際的雜湊表中(可以理解為雜湊表存放在記憶體中)。因此實際的雜湊函式是md5(url%n%表示取模運算),這樣使得乙個url被對映到大小為n的雜湊表的某個槽位上。
bitmap
hash table
boom filter
hibernate 抓取策略
1.單端 對端是one,即many2one 1.1 在用many2one時,fetch可以採取select或者join.用select時,會另發一條語句載入關聯物件。用join時,用一條語句就查上來,相當於資料庫裡面的連線,內連線外連線取決於外來鍵是否允許為空。注意 這個規則僅適用於get或者loa...
Hibernate抓取策略
抓取策略指的是我們在獲取資料時,告訴hibernate以何種sql的方式去獲取,hibernate有三種抓取方式可供選擇,分別是select join subselect 該屬性只能在集合標籤和關聯關係標籤上使用。xml version 1.0 encoding utf 8 cn.hibernate...
hibernate 抓取策略
抓取策略 fetching strategy 抓取策略 fetching strategy 是指 當應用程式需要在 hibernate實體物件圖的 關聯關係間進行導航的時候,hibernate如何獲取關聯物件的策略。抓取策略可以在o r對映的元資料中宣告,也可以在特定的hql 或條件查詢 crite...