2011-10-14 1 views
0

나는 거의 15,000 개의 제품을 가지고있는 전자 상거래 사이트를 크롤링하는 프로젝트를 가지고 있으며 페이지 수는 25 만 개에 이르지 못했다. 나는 C#에서 multithreading을 사용하는 프로그램을 작성했다. 총 20 개의 스레드를 사용했다. 하지만 단지 5 개의 실을 사용했을 때 높은 성과는 없습니다. 내가 잘못 생각한가요? 크롤링하는 동안 증가 할 수 없었습니까?SQL Server에서 C# 프로그래밍으로 멀티 스레드를 사용하여 한 시간에 몇 페이지를 크롤링 할 수 있습니까?

나는 500 페이지를 크롤링하고 html을 10 분만에 db로 가져갑니다. 정상입니까? 또는 그것을 늘릴 수 있습니까?

또한 SQL Server는 20 스레드 동시 삽입, 업데이트 작업에 적합하지만 해당 스레드 수를 100 스레드로 늘리면 문제가 발생합니까? ... 좀 더 컴퓨터를 사용하지 않는 ..

나는 .. 나는이 기간을 줄일 도움이 필요합니다 .. 사이트 프로세스가 10 스레드와 5 시간 걸릴 것입니다 완전히 계산하거나 정상이다

내 PC의 자세한 사항 2 기가 바이트 RAM, 1.87 기가 헤르쯔 인텔 t2130 ...입니다

난 내가, 내 CPU가 90 % 인 프로그램이 실행되는 동안, 나는 인터넷에서 사이트를 크롤링, 내 램이 75 %이며, 매 초마다 확인

/초당 70kb를 차지합니다. 크롤링 속도를 높이려면 어떻게해야합니까?

+0

신뢰할 수있는 답변이 너무 많습니다. WebRequests는 도메인 당 동시 6 개로 제한됩니다. 아마 시작하기 좋은 곳 일거야. – spender

답변

1

인터넷을 통해 사이트를 크롤링하고 있습니까? 그렇다면 인터넷 연결 속도는 얼마나 빠릅니까? 작업 관리자를 확인하십시오. CPU가 최대한으로 사용되면 더 빠른 머신을 얻거나 페이지를 더 효율적으로 파싱하기위한 알고리즘을 만들어야합니다. CPU가 아무 것도하지 않으면 빠른 연결이 필요할 것입니다. 또한 인터넷을 통해 사이트를 크롤링하는 경우 도메인 제한 1 개에 대한 최대 요청 수가 있다고 생각합니다. 기본적으로 2로 설정되어 있지만 변경 될 수 있습니다. 또한 귀하의 사이트가 아닌 경우 robots.txt 파일을 준수하여 귀하를 차단하지 못하도록하십시오. 아마도 사이트 자체가 탐지하는 트래픽 양 때문에 사용자를 제한하고 있습니다.

0

논리 코어 수보다 많은 스레드 수를 늘리는 것은 의미가 없습니다. 4 개의 스레드가 작동 중이고 다른 96 개가 대기중인 경우 어떤 이점도 나타나지 않습니다.

또한 실제 병목 현상이 발생한 위치를 파악하려면 프로필을 만들어야합니다. 각 페이지에서 처리 할 데이터가 거의없는 경우 네트워크 대기 시간이 원시 처리보다 더 중요 할 수 있습니다. 또한 프로파일 링을하면 알고리즘을 개선해야 할 수도 있습니다.

스레드를 무기한으로 늘리거나 프로필을 잊어 버리는 것을 잊어 버리십시오. EQATEC은 예를 들어 사용할 수있는 무료 .NET 프로파일 러를 제공합니다.

2

글쎄, 당신이 도전 할 가장 큰 문제는 당신의 환경이 아니라 너무 빠른 속도로 기어 가기 위해 다른 사이트가 당신을 막을 것이라는 사실입니다.

SQL Server가 대처하지 않으면, html을 처음부터 파일에 쓸 수 있으며 자신의 페이스대로 DB로 가져올 수 있습니다. 또한 html이 변경되면 크롤링 코드를 변경하는 옵션이 제공됩니다.

강한 조언 : 고속으로 돌지 마십시오. 다른 사이트가 곤경에 처하게됩니다.

관련 문제