2010-06-05 4 views
0

에 따라 작업 설명의 마틴 파울러의 단위 :소프트웨어 아키텍처 : 작업 디자인 패턴 토론의 단위

" 은 비즈니스 트랜잭션에 의해 영향을 변경 중 쓰기를 좌표있는 개체의 목록을 유지 및 병행 성의 해상도는 입니다. " 내가 궁금하네요

매우 느린 될 수있을 테니까요 데이터베이스, 에

아주 작은 호출을 방지

. 우리가 데이터베이스 트랜잭션 관리를 제한한다면, 진술서를 준비하지 않아도됩니다.

+0

당신이 제안하고있는 것에 더 자세하게 추가 할 필요가 있다고 생각합니다. 그리고 이전 질문으로 돌아가서 대답을 수락하십시오. –

답변

1

준비 문은 트랜잭션과 아무 관련이 없습니다.

Fowler가 언급 한 것은 네트워크 지연입니다. 데이터베이스를 앞뒤로 이동하면 매번 네트워크가 지연됩니다.

이 질문에는 거래와 배치라는 두 가지 생각이 있습니다. 여러 데이터베이스 작업을 한꺼번에 일괄 처리하고 처리 할 데이터베이스에 모두 보내면 파울러 (Fowler)가 말하는 내용을 처리 할 수 ​​있습니다.

여기에서 정말로 신경 써주시는 분은 어느 것입니까?

1

좋은 데이터 액세스 레이어 구현으로이 작업을 수행 할 수 있습니다. 예를 들어, Hibernate/NHibernate는 트랜잭션이 끝날 때까지 또는 변경 사항을 명시 적으로 삭제하도록 요청할 때 플러시 변경을 연기 할 수 있습니다. 또는 낙관적 잠금을 사용하여 한 트랜잭션에서 데이터를 가져 와서 변경 내용을 다른 트랜잭션에 저장할 수 있습니다. 이렇게하면 긴 데이터베이스 트랜잭션을 피할 수 있습니다.

액세스 레이어를 롤링하는 경우 많은 작은 업데이트/삽입 요청의 대기 시간 오버 헤드를 줄이기 위해 JDBC 연결에 일괄 처리를 추가 할 수 있습니다. 그럼에도 불구하고이 패턴은 좋은 아이디어라고 생각합니다. 한 곳에서 모든 변화를 잘 볼 수 있기 때문입니다. 따라서 비즈니스 트랜잭션 기간 동안 db에 대한 쓰기 작업을 수행하는 대신 데이터베이스 트랜잭션에서 한 번에 모든 변경 사항을 신속하게 제출할 수 있습니다. 오랜 시간이 걸릴 수 있으며 일반적으로 긴 db 트랜잭션은 일반적으로 좋은 생각.

PreparedStatement는이 패턴과 직각을 이루며 직접적으로 도움이되거나 방해가되지 않습니다. 패턴은 네트워크 대기 시간을 줄이고 짧은 트랜잭션을 수행하는 것뿐만 아니라 비즈니스 운영의 모든 엔티티 변경 사항에 대한 개요를 포함합니다.

1

패턴은 단순한 데이터베이스보다 일반적입니다. 여러 개의 작은 작업을 하나로 묶을 수 있으면 작업 단위 패턴이 적용될 수 있습니다.

예를 들어, 클라이언트에서 수행 한 특정 작업을 서버에 알리려는 AJAX 앱을 생각해보십시오. 이러한 작업을 하나의 큰 작업으로 묶을 수 있습니다. 서버는 데이터를 데이터베이스로 전달할 수도 있고 전달하지 않을 수도 있습니다.

서버 측에서는 작업 단위 (UOW)가 데이터를 데이터베이스에 저장하고 동일한 데이터로 작업하는 다른 클라이언트로 푸시해야 할 수 있습니다.

중요한 것은 "비즈니스 트랜잭션"과 DB 트랜잭션이 서로 다른 점입니다.

관련 문제