2012-06-19 4 views
0

웹 크롤러에서 원하는 특정 정보를 찾고 반환합니다. 이것은 매일 실행됩니다.어느 쪽이 더 효율적입니까? 내 DB를 치거나 여분의 웹 크롤링을 수행하고 배열을 치는 중 어느 것입니까?

문제점은 내 크롤러가 두 가지 작업을 수행해야한다는 것입니다.

  1. 크롤링해야하는 링크를 가져옵니다.
  2. 해당 링크를 크롤링하고 DB에 푸시합니다.

# 1 문제는 총 700 개가 넘는 링크입니다. 이러한 링크는 매우 자주 변경되지 않습니다 - 한 달에 한 번?

하나의 옵션은 '링크 목록'에 대해 한 달에 한 번씩 별도의 크롤링을 수행하고 링크를 db로 덤프하는 것입니다.

그런 다음 매일 700 개의 링크 각각에 대해 크롤러가 db hit를 수행하게하십시오.

또는 크롤러 내에서 크롤링을 중첩 할 수 있습니다. 크롤러가 매주 실행될 때마다 (일별)이 700 개의 URL 목록을 업데이트하고 배열에 저장하고이 배열에서 가져옵니다. 각 링크를 크롤링합니다.

Heroku 또는 어느 호스트에 대해 더 효율적이며 세금이 적습니까?

+0

자주 변경되지 않는 항목 : 크롤링 할 링크의 콘텐츠 또는 크롤링해야하는 링크 집합? 귀하의 질문이나 대안을 잘 모르겠습니다. – Phrogz

+0

크롤링 링크 집합은 많이 변경되지 않습니다. – marcamillion

+0

질문 : 로컬 데이터베이스에서 700 개의 행을 가져 오거나 해당 700 개의 적중을 반환하는 HTTP 요청을 수행하는 것이 "더 나은"것인가? – Phrogz

답변

3

"효율"과 "과세"를 측정하는 방법에 따라 다르지만 로컬 데이터베이스 조회는 HTTP 요청 + 링크에 대한 응답 구문 분석보다 빠르고 빠르다는 것이 거의 확실합니다.

더 중요하지는 않지만 데이터베이스 및 어댑터가이를 지원한다고 가정하면 DB 요청 결과를 반복하고 전체 세트를 메모리로 가져 오거나 가져 오지 않고 처리 할 수 ​​있습니다.

네트워크 대기 시간과 리소스는 이미 이미 앉아 있고 실행 중이며 효율적으로 신속하게 쿼리 할 수 ​​있도록 설계된 DB를 파킹하는 것보다 훨씬 나 빠지게됩니다.

그러나 하루에 한 번? 이 작업을 최적화하기 위해 어떤 에너지를 소비해야 할 충분한 이유가 있습니까?

+0

재미있군, db 요청 결과를 통해 페이징에 대해 더 자세히 알려주시겠습니까? 프로덕션 환경에서 PostgreSQL, ActiveRecord 및 Heroku를 사용하고 있습니다. – marcamillion

+0

700 개의 링크가 페이징을 필요로하지 않습니다. –

+0

@marcamillion ['Sequel :: Dataset # each'] (http://sequel.rubyforge.org/rdoc/classes/Sequel/Dataset.html#method)를 생각하고있었습니다. -i-each). _ 전체 집합을 가져 와서로드해야하는 'my_dataset.all.each'와는 달리 _ 데이터베이스 어댑터에서 생성 된 데이터 집합의 레코드를 반복합니다. 반복 전에 루비 배열을 시작할 수 있습니다. – Phrogz

관련 문제