멀티 스레드 응용 프로그램에 승인 된 연습이 있는지 궁금합니다. 스레드 당 하나의 DAO를 갖거나 단순히 하나의 DAO를 스레드 안전 싱글 톤으로 만들어야합니다.스레드 당 하나의 DAO 또는 스레드 안전 DAO?
5
A
답변
4
이것은 실제로 데이터 액세스에 사용하는 메커니즘에 많이 달려 있습니다. 당신은 아주 확장 성있는 데이터 접근과 많은 스레드를 가지고 있다면, 어떤 형태의 스레드 정적 데이터 접근을 사용하는 것이 유리할 수 있습니다.
확장 가능한 데이터 액세스 권한이없는 경우 공급자는 프로세스 당 여러 스레드를 지원하지 않거나 해당 지점에서 확장 성이 필요하지 않습니다. 적절한 동기화가 적용된 단일 톤을 사용하면 더 간단하고 쉽게 구현할 수 있습니다 .
대부분의 비즈니스 스타일 응용 프로그램에서 나는 개인적으로 싱글 톤 접근법을 유지 관리하기가 더 쉽다고 생각합니다. 다른 점이 없으면 효과적으로 테스트하는 것이 훨씬 쉽습니다. 데이터 액세스를 위해 여러 개의 스레드가 필요하지는 않습니다. 데이터 액세스가 유용성에 영향을 미치는 병목 현상이되지는 않을 것입니다 (올바르게 설계하고 배치 요청을 적절하게 수행 한 경우).
0
를 사용하여 최고의, 응용 프로그램 아키텍처에 맞는 접근하지 않는 :
1) 귀하의 데이터 액세스 개체가있는 경우에 당신이 스레드 안전 싱글 톤으로 의지해야 만들 비싸다.
2) 객체는 Active Record pattern처럼 변경 가능한 상태를 유지합니다. (시간 제한 임계 값과 같이 변경할 수없는 DAO 구성 상태는 계산되지 않습니다.)
관련 문제
- 1. 하나의 큰 DAO 또는 여러 개의 작은 DAO?
- 2. 스레드 안전
- 3. Timer (System.Threading) 스레드 안전
- 4. 세션과 NHibernate 스레드 안전
- 5. .NET에서 선언적 스레드 안전
- 6. 스레드 안전 리팩토링
- 7. 배열의 스레드 안전 컨테이너
- 8. 다중 스레드 안전 JDBC 저장 또는 업데이트
- 9. 자바 - DAO 레이어 또는 플러그인
- 10. Stream.Write 메서드의 스레드 안전
- 11. 스레드 안전 로케일 기술
- 12. 스레드 안전 C++ 스택
- 13. 스레드 안전 또는 스레드 안전하지 않은 PHP를 사용 하시겠습니까?
- 14. , 비 스레드 안전 클래스
- 15. Qt를 사용하여 스레드 당 하나의 타이머
- 16. 스레드 당 하나의 인스턴스 할당 (부스트 환경)
- 17. 스레드 안전 보장
- 18. 문자 당 스레드 대 맵당 스레드 디자인
- 19. PHP 모듈 스레드 안전/비 스레드 안전 일치를 어떻게 수정합니까?
- 20. 서비스와 DAO 사이의 관계가 일대일 또는 일대일이어야합니까?
- 21. java 배열 스레드 안전
- 22. Java 클래스의 스레드 안전
- 23. 스레드 안전 타이머가 있습니까?
- 24. SolrJ 스레드 안전
- 25. httpurlconnection 스레드 안전
- 26. CDatabase 스레드 안전
- 27. 스레드 안전 nsdictionary
- 28. DLL 스레드 안전
- 29. Python의 불변성과 스레드 안전
- 30. 스레드 안전 Form.Show
내 DAO는 실제로 SimpleDB와 RPC를 통한 PHP API의 두 소스에 연결합니다. 내 생각 엔 병목 현상을 피하기 위해 약 100 개의 스레드가있는 스레드마다 DAO를 사용해야합니다. 이런 경우가 아니라면 분명한 이유가 있습니까? – pondermatic
아마도 DAO를 싱글 톤으로 만들고 내부적으로는 비동기로 작업하는 것이 좋습니다. 그런 다음 필요에 따라 ThreadPool을 사용하여 확장 할 수 있습니다. 웹 요청이 비동기 적으로 잘 작동하므로 PHP API의 경우 특히 그렇습니다. 대부분의 웹 프레임 워크는이 기능을 잘 지원합니다 ... –