2010-04-21 4 views
1

수신 한 요청 유형에 따라 구성된 활동 세트를 수행하는 서비스를 작성 중입니다. 각 활동에는 데이터베이스로 이동하여 일종의 정보를 검색/업데이트하는 작업이 포함됩니다. 각 활동에 대한 논리는 여러 요청 유형에 걸쳐 일반화되고 재사용 될 수 있습니다. 활동은 요청에 대한 서비스 기간 동안 거래에 참여해야 할 수도 있습니다.응용 프로그램 설계 : DB에 대한 단일 대 복수 조회

하나의 옵션으로, 각 활동이 DAL/데이터베이스에 대한 자체 액세스를 유지하도록하는 것이 고려 중입니다. 이것은 활동을 독립형 재사용 가능한 조각으로 완전히 캡슐화하지만 한 요청에 대해 데이터베이스를 여러 번 치는 것이 실행 가능한 옵션처럼 보이지 않습니다. 나는 여기에 여러 활동에 걸쳐 트랜잭션 개념을 쉽게 구현하는 방법을 알지 못합니다.

두 번째 옵션은 모든 활동을 하나의 큰 활동으로 캡슐화하고 데이터베이스를 한 번 치는 것입니다. 그러나 이것은 다른 요청에 대해 이러한 활동을 재사용 및 구성하는 것을 허용하지 않습니다.

아무에게도 내 문제에 접근하는 가장 좋은 방법에 대한 제안이나 의견이 있습니까? 어떤 도움을 주셔서 감사합니다.

답변

1

세부 사항없이 디자인을 선택하는 것이 조금 어렵습니다. 내 첫 번째 선택은 첫 번째 옵션을 따르는 것입니다. 그것은 더 간단한 접근처럼 들립니다. 두 번째는 더 잘 수행되는 것처럼 들리지만 조기 최적화와 악의에 대해 속삭이는 내 머리 속의 목소리가 있습니다.

이것은 실제로이 서비스가 얼마나 사용될 것인가에 달려 있습니다. 그것은 많은 하중을 받고있을 것입니까? 이 서버는 몇 가지만 실행되는 강력한 시스템에서 실행되고 있습니까? 아니면 여러 개의 VM을 실행중인 여러 VM에서 여러 개의 서비스를 실행하고 있습니까?

안전면을 원한다면 프로토 타입을 제안 할 것입니다. 응용 프로그램이 설명한 첫 번째 시나리오에서 데이터베이스를 사용하는 작은 프로그램을 작성하고 실행하십시오. 멋진 것은 없지만 데이터베이스에서 임의의 데이터를 펌핑 할 수 있습니다. 그곳에 다량의 데이터를 저장하는 방법을 잊지 마세요. 괜찮은 것 같으면 첫 번째 옵션을 선택하십시오. 그렇지 않으면 더 정교한 것으로 이동할 수 있습니다.

사이드 노트에서 원하는 데이터베이스를 선택하십시오. 당신은 그것에 무거운 짐을 두는 것을 시도하는 첫번째 것이 아니다; 대부분의 데이터베이스는 이런 종류의 문제에 대처할 수있는 메커니즘을 제공합니다.

+0

"데이터베이스에 대한 조회수"에서 2.10의 가능한 요소는 "작은 효율성"이라고 부르지 않습니다. 그것이 바로 크 누스가 말하지 않은 최적화입니다. – peterchen

0

NServiceBus을 고려해 볼 수 있습니다. 여러 메시지 핸들러를 함께 묶어 원하는 파이프 라인을 제공 할 수 있습니다. 또한 하나의 트랜잭션에서 모든 핸들러를 실행하여 트랜잭션 요구를 충족시킵니다. 각 파이프 라인은 자율적이므로 하루 종일 확장 할 수 있습니다. 유일한주의 사항은 당신이 그 모델을 유지하기 원한다면 상관 관계가있는 요청/응답을 수행해야한다는 것입니다 (NSB는 이것을 지원합니다).

0

비즈니스 논리에서 데이터 액세스 구현을 추상화하여 묶이지 않아도됩니다. .Net에 있다면 일반적으로 인터페이스를 사용합니다. 이 작업을 수행 할 때

, 당신은 인터페이스를 디자인해야합니다 - 디자인은 작업의 논리적 구획에 따라 : ISP, SRP, CRPCCP 생각합니다.

인터페이스를 정의하면 언제든지 원하는만큼 많은 구현을 구현할 수 있으며 언제든지 필요할 때마다 스왑 할 수 있습니다. 동시에 둘을 동시에 사용할 수없는 이유는 없습니다. 그리고 실행이 적절할 때 호출되거나 다른 시점에 다른 구현이 호출되도록 실행을 제어하는 ​​일부 논리를 가질 수 있습니다.

0

아마도 결정은 거래 요구 사항에 의해 결정됩니다. 모든 활동이 데이터베이스의 동일한 스냅 샷을 볼 필요가 있다면 더 이상 독립적이지 않습니다. 따라서 활동은 완전히 독립적이지 않습니다.

두 시나리오에서 데이터베이스에 대한 요청 수는 얼마나됩니까? 나는. 보통 의 전력 인 - 사용자가 시스템에 얼마나 많은 사용자를 보유하고 있는지 등의 많은 활동이 있습니다. 또한 요청이 적 으면 더 많은 데이터가 제공됩니다. 요청을 결합 할 때 어떻게 보이나요?

분당 히트가 5에서 10으로 증가하는 것은 문제가되지 않습니다. 1,000 명의 사용자에 대해 5 배 증가합니다.

요청을 일괄 처리 할 수 ​​있습니까? 요청을 일괄 처리 할 수 ​​있도록 작업과 DAL 간의 인터페이스를 만들 수 있습니다. 예 : 모든 활동은 요청을 공개하고 결과를 수신하며 요청은 처리 할 활동의 모음을 사용합니다. 간단한 request 구현은 여전히 ​​개별 요청을 실행할 수 있습니다.