0

HTML 컨텐트가 바이너리 직렬화 된 BLOB로 저장된 데이터베이스 테이블이 있습니다. 하나씩 콘텐츠를 검색하고 콘텐츠의 특정 키워드를 찾고 (발견 된 일치를보고해야 함) 콘텐츠를 HTML 파일로 디스크에 저장해야합니다. Parallel.ForEach를 사용하여 이것을 parallize 할 수 있습니까? 이것은 좋은 생각입니까 아니면 더 좋은 것이 있습니까? 도움에 미리데이터베이스에서 내용 검색을 병렬 처리하여 HTML로 검색 및 저장

감사합니다, 인 Ashish

답변

1

데이터베이스에서 행 집합을 하나의 쿼리로 가져 와서 병렬로 처리하여 키워드를 찾은 다음 일괄 적으로 한 번에 디스크에 저장하면 문제가 발생할 수 있습니다. 은혜. 하나씩 선택하고 선형 방식으로 처리하는 경우 병행 작업을 수행 할 때 얻을 수있는 이점이 최소화됩니다.

두 가지 방법을 시도해보고 차이점을 측정하여 실제로 작동하는지 확인해야합니다. 분명히, 그것은 하나의 핵심 기계에서 차이가 없지만 두 개의 파일 만 처리하는 8 코어 기계는 핵심 단어 검색이 파일 당 긴 시간이 걸리는 경우를 제외하고는 큰 이점을 볼 수 없을 것입니다. :) 최선의 방법은 다양한 기법에 대해 몇 가지 다른 스파이크를 시도하고 자신과 상황에 가장 적합한 것이 무엇인지 파악하는 것입니다. 버퍼에 (가능하면 그것을 하나 하나를 수행 할 수 있도록 커서 어떤 종류의를 통해)

하나의 스레드가 데이터베이스를 쿼리, 장소 각 행 :

+0

Parallel.ForEach()는 정상적인 foreach보다 거의 4 배 빠른 처리 속도로 작동합니다. –

1

데이터베이스 및 디스크에 대한 I/O 성능이 당신이 가능성 병렬화에서 눈에 띄는 효과를 볼 수 없습니다 것을, 프로세서 속도보다 훨씬 느립니다.

+0

답장을 보내 주셔서 감사합니다. 당신은 입출력을 포함하거나 당신이이 질문에 대해 이야기하고있는 어떤 것도 평행해서는 안된다는 것을 일반화 (showness)하고 있습니까? 설명해 주시겠습니까? –

+0

예, 일반적으로 디스크 I/O와 수퍼 컴퓨팅/병렬 처리가 잘 어울리지 않습니다. 몇 가지 시나리오가 있습니다. 예를 들어, 독자와 작가의 문제 (많은 독자가 모두 동일한 데이터, 가능한 한 작가를 원할 경우)가 있다면 말이 될 수 있습니다. –

+0

나는 동의하지 않는다. I/O가 많은 경우 병렬화하는 것이 가장 좋습니다. 하나의 스레드가 I/O 작업을 기다리는 동안 다른 스레드가 처리 될 수 있습니다. 그것은 큰 개선을해야합니다. – Suncat2000

0

나는 생산자 소비자 접근 방식 (http://en.wikipedia.org/wiki/Producer-consumer_problem을) 할 것 .

다른 스레드 (또는 검색에 많은 처리가 필요한 경우 둘 이상)가 데이터베이스의 한 행 (HTML Blob 포함)을 가져 와서 검색을 처리 중입니다.

이 경우 쿼리와 처리를 동시에 수행 할 수 있습니다.

나는 쿼리 처리가 처리보다 훨씬 오래 걸릴 가능성이 높다는 단 한 가지 사실로 인해 많은 성능 향상을 얻지는 않을 것이라고 생각합니다. 문제는 쿼리 부분에 병목 현상으로 인한 디스크 읽기가 있다는 것입니다. 결국 디스크 성능은 전체 성능을 제한하는 것일 수 있습니다.

이 방법인지 확인하려면 두 개 이상의 제작자 (데이터베이스를 쿼리하는 둘 이상의 스레드)가있는 제작자/소비자를 수행 할 수 있습니다.

도움이되기를 바랍니다.

에두아르도

관련 문제