heritrix queue 分配策略

 

最近用heritrix 爬網站, 發現很慢,

heritrix 的QUEUE的分配策略 會影響速度, 

比如用HostnameQueueAssignmentPolicy, 一個網站只分配一個Queue, 

如果這個網站有很多頁面要爬取, 這些頁面全部放到一個queue裏面,

很多頁面就會阻塞在這個Queue裏, 要經過很長時間才能處理。

 

相比之下, 對一個網站的取用SurtAuthorityQueueAssignmentPolicy 策略會好很多,

會根據網站的URL結構放入不同的queue中, 

比如

http://www.ebookl.com/magazine/men

http://www.ebookl.com/937100-restorative-therapies-parkinsons-disease-repost

這倆個頁面會放在不同的Queue當中, 一個是category頁面(共二級), 一個是內容頁。

 有興趣可以看一下源代碼的實現。

 

但是有些網站並不能考URL 來區分, 這時候可以考慮自定一個queueAssignmentPolicy, 修改SRPING XML配置,

 

 <!-- QUEUE ASSIGNMENT POLICY -->

 <bean id="queueAssignmentPolicy" 
   class="com.spider.util.CustomQueueAssignmentPolicy">
  <property name="forceQueueAssignment" value="" />
  <property name="deferToPrevious" value="true" />
  <property name="parallelQueues" value="10" />
 </bean>
 

 

 這裏我是繼承SurtAuthorityQueueAssignmentPolicy,由於category頁面URL包含all-ebo, 我就用第六個Queue, 其他內容頁以html結尾, 我就用hashcode 取餘數來分配到哪一個Queue.

 

public class CustomQueueAssignmentPolicy extends
        SurtAuthorityQueueAssignmentPolicy {

    private static final long serialVersionUID = -282094213180482046L;

    private static final Logger logger = Logger
            .getLogger(CustomQueueAssignmentPolicy.class.getName());

    @Override
    protected int getSubqueue(UURI basisUuri, int parallelQueues) {

        if (basisUuri.toString().contains("all-ebo")) {
            return 6;
        } else if (basisUuri.toString().endsWith(".html")) {
            
            int hashCode = basisUuri.toString().hashCode();
            return Math.abs(hashCode) % 3;
        }

        return super.getSubqueue(basisUuri, parallelQueues);
    }

}

 

 雖然我寫的很簡單, 但是經過測試category和內容頁都是很公平的處理, 內容頁不會阻塞category頁面的處理, 速度自然塊了一些。

 

來自:http://laravel.iteye.com/blog/2052920

 

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章