2012-02-03 3 views
0

내 응용 프로그램의 구성원에 대한 요율을 계산해야하는 SQLServer 데이터베이스가있는 ASP.NET 응용 프로그램을 작성하고 있습니다. 이러한 계산은 10 개 이상의 데이터베이스 테이블에 영향을줍니다. 데이터 액세스 계층에서비즈니스 로직을 어디에 써야합니까? 프런트 엔드 (비즈니스 계층) 또는 저장 프로 시저에서?

  1. , 데이터베이스의 첫 번째 테이블에서 구성원에 대한 데이터를 가져 와서 비즈니스 계층에 반환 :

    가 나는 두 가지 옵션이 있습니다 생각합니다. 일단 거기에 가져온 데이터를 계산하여 두 번째 테이블에 저장할 새 데이터를 생성합니다. 마지막으로 결과를 저장하려면 데이터 액세스 레이어로 다시 전화하십시오. 그런 다음 두 번째 테이블에서 정보를 가져 와서 세 번째 테이블에 저장할 결과를 계산하고 필요한 모든 테이블에 대해이 작업을 계속 수행하면서이 전체 프로세스를 반복합니다.

  2. 데이터베이스 트랜잭션 내에서 올바른 테이블의 구성원에 대한 새 요율 계산 및 저장을 캡슐화하려면 저장 프로 시저를 사용하십시오.

어떤 옵션이 가장 좋고, 왜 그런가? 첫 번째 옵션을 사용하면 비즈니스 로직 계층에서 하나의 ADO.NET 트랜잭션으로 모든 삽입 및 업데이트를 어떻게 수행해야합니까? 현재 데이터 액세스 레이어 외부에서 ADO.NET 트랜잭션을 사용하지 못하게되었습니다.

답변

0

IMO 성능 및 모듈 형 디자인에 어느 정도 우선 순위를 부여해야하는지에 따라 다릅니다.

이 내가 다른 테이블에서 즉시 가격을 계산해야 무역 응용 프로그램이라면, 나는 부하의 일정 시간 동안 저장 프로 시저

  • 더 나은 성능을 사용하지만 것이다 너무 많은 쿼리를 얻을 때, 다음 분산 데이터베이스는 (대부분의 경우 사람들이하지 않는) 미래에 다른 데이터베이스로 이동하려는 경우, 다음 포트에 새에 저장된 프로 시저를 가지고
  • 하나의 단점은 필수가된다

내가 가진 다른 옵션은 memcache와 같은 분산 캐시에 대부분의 값을 유지하고 비즈니스 계층에서 계산을 수행하는 것입니다.

  • 값은 캐시에 미리 채워지고 변경 사항이있을 때 캐시가 새로 고쳐집니다.
  • 이렇게하면 데이터베이스 종속성을 제거하는 측면에서 유연성이 제공됩니다.

그러나 귀하의 작업은 DB가 기능에 상당히 의존하고 있으며 저장 프로 시저 경로를 제안합니다. 캐시의 두 번째 옵션이 가능하다고 생각하면 시도해 볼 가치가 있습니다.

관련 문제