2016-09-28 7 views
-2

데이터베이스에서 데이터를 읽고 파일에 쓰는 프로그램을 개발하고 싶습니다. 더 나은 성능을 위해 멀티 스레딩을 사용하고 싶습니다.데이터베이스에서 데이터 읽기 및 멀티 스레드를 사용하여 파일에 쓰기

내가 구현할 계획 솔루션은 이러한 가정을 기반으로합니다

  1. 는 DBMS에 의해 관리 될 수있는 동시성 문제가 있기 때문에 유사 (데이터베이스에서 읽을 수있는 다중 스레드를 넣을 필요가 없습니다 파일에 쓰는 것). 데이터베이스의 각 읽기 요소가 동일한 트랜잭션에서 삭제된다는 것을 감안할 때.
  2. 모델 producer-consumer를 사용하여 데이터를 읽는 스레드 (주 프로그램). 파일에 데이터를 쓰는 다른 스레드.
  3. 구현을 위해 executor 프레임 워크, 즉 소비자 스레드를 나타내는 스레드 풀 (크기 = 1)을 사용합니다.

이러한 가정은 좋은 해결책이 될 수 있습니까? 이 문제는 멀티 스레딩을 기반으로하는 솔루션이 필요합니까? 첫 번째 가정에 대한

:

+0

나는이 질문에 대한 글쓰기 장소라고 생각하지 않습니다. –

+1

하나의 파일을 작성하는 것은 거의 항상 단일 스레드 문제로 처리하는 것이 가장 좋습니다. – erickson

+0

@SamOrozco 작성 하시겠습니까? 나는 이해하지 못했다! –

답변

1

이것은 주석의 더 당신은 https://dba.stackexchange.com/에 DB 부분을 게시해야한다.

간단한 검색 결과가 반환되었습니다. https://dba.stackexchange.com/questions/2918/about-single-threaded-versus-multithreaded-databases-performance - 읽기 작업이 충분히 복잡하고 다중 스레드가 db 연결을 필요로하는지 확인해야합니다.

또한 프로그램은 순차적으로 읽고 쓰는 것 같습니다. 나는 같은 파일에 동시에 여러 번 쓰지 않는 한 멀티 스레딩이 필요하다고 생각하지 않는다.

1

JSR 352 사양과 관련된 스프링 배치 인 http://projects.spring.io/spring-batch/을 살펴 봐야합니다.

이 프레임 워크 등 멀티 스레드 처리, 데이터 파티션을 포함하여 ETL 관련 작업을 관리 할 수있는 아주 좋은 패턴, 함께 제공

2

가 있기 때문에 데이터베이스에서 읽어 다중 스레드를 넣을 필요가 없습니다 DBMS에 의해 관리 될 동시성 문제

Ok. 따라서 데이터베이스에서 읽는 하나의 스레드가 필요합니다.

이러한 가정은 좋은 해결책이 될 수 있습니까? 이 문제는 멀티 스레딩을 기반으로하는 솔루션이 필요합니까?

당신의 솔루션은 효과가 있지만 다른 사람들이 언급 한 것처럼 성능 향상에 관한 질문이있을 경우 이에 대한 질문이 있습니다. 스레딩 프로그램은 컴퓨터에서 여러 프로세서 (또는 코어) 하드웨어를 사용할 수 있기 때문에 작동합니다. 귀하의 경우, 스레드가 데이터베이스에 의해 차단되거나 파일 시스템에 의해 차단되는 경우, 성능 향상은 전혀 없을 수 있습니다. 데이터를 많이 처리하는 경우 여러 스레드에서 작업을 처리하는 것이 효과적입니다.

관련 문제