문제

따라서 온라인 사람들이 조직과 상호 작용하는 데 사용할 수있는 사이트를 구축해야합니다. : ASP.NET MVC 고객 애플리케이션

요구 사항 중 하나는 재무 처리 및 회계입니다.

SQL 트랜잭션과 저장 절차를 사용하여이를 수행하는 데 매우 편안합니다. IE CreateCustomer는 또한 엔티티와 계정 기록을 만듭니다. 우리는이 작업을 수행하기위한 저장된 절차를 가지고 있으며, 이는 트랜잭션을 시작하고 필요한 일부 설정 레코드를 작성한 다음 커밋을 수행합니다. 나는 orm과 함께 이것을하는 좋은 방법을보고 있지 않으며, 좋은 것을 읽은 후 블로그 기사 나는 잘못된 길을 가고 있는지 궁금해하기 시작했다.

여기의 복잡성의 일부는 데이터 자체입니다.

  1. 내 앱에는 자체 데이터 저장소도 있지만 X 데이터베이스 (기존 고객 당 하나)를 쿼리하고 있습니다. X 데이터베이스를 쿼리하고 X 데이터베이스에서 저장 프로 시저를 실행하고 내 데이터 저장소로도 실행해야합니다.

  2. 저장된 절차 및 거래가 존재하는 것 같습니다.

어쩌면 나는 단지 내 앱을 여기서 못으로 만들려고 노력하고 있습니다. 물론 Raw Ado.net에 충분히 편안하지만 C#에 LINQ 코드를 작성하는 표현적인 느낌을 좋아하며 오히려 포기하지 않겠습니다.

질문까지 :

이것이 나쁜 생각입니까? LINQ / 엔티티 프레임 워크 또는 nhibernate와 같은 것을 사용하고 ORM 패턴을 고수해야합니까?

편집하다: 규모에 대한 메모; 초당 쿼리 에서이 앱은 "거대한"것이 아닙니다. 그러나 데이터 복잡성 관점에서 외부 애플리케이션의 데이터를 읽고 해당 응용 프로그램에 데이터를 게시하려면 50 개 이상의 데이터베이스 (모두 동일하거나 가까운)에 대해 쿼리해야합니다. ORM은 "My"데이터 스토어를 다룰 때 옳다고 생각하지만 외부 응용 프로그램에서 데이터에 액세스하는 데 매우 잘못된 느낌이 듭니다.

도움이 되었습니까?

해결책 3

내가 선택한 것은 엔티티 프레임 워크를 사용하여 응용 프로그램의 기본 데이터 저장에 액세스 할 수 있도록하고 외부 응용 프로그램 데이터에 액세스하고 응용 프로그램 내에서 저장된 프로 시저에 액세스 할 수있는 사용자 정의 DAL을 작성하는 것입니다.

다음은 Entity Framework 4.0이 문제를 해결하는 것을 희망합니다. 지금은 여기에 나열된 개념을 사용하고 있습니다.

http://social.msdn.microsoft.com/forums/en-us/adodotnetentityframework/44a0a7c2-7c1b-43bc-98e0-4d072b94b2ab/

다른 팁

특정 크기 (데이터베이스 수)에서 패러다임을 변경해야합니다. 당신은 그 크기에 있습니까?

궁극적으로 분산 애플리케이션이지만 일반적인 로컬 애플리케이션으로 제어하려고 시도하면 가용성, 확장 성 및 정확성과 관련하여 일련의 기본 문제를 해결할 것입니다. '분산 트랜잭션', '링크 된 서버'및 'orm'과 같은 개념을 사용하는 경우 잘못된 경로입니다. 실제 분산 응용 프로그램은 '메시지', '큐'및 '서비스'와 같은 용어를 사용합니다. LINQ, EF, NHibernate와 같은 용어는 모두 훌륭하고 훌륭하지만 없음 간단한 Transact-SQL에서 추가 정보를 제공합니다. SELECT 성명서를 가져옵니다. 다시 말해서, 선택이 문제를 해결하면 클라이언트 측 Dariple ORM이 작동합니다. 그렇지 않다면, 그들은 기적 가치를 추가하지 않습니다.

나는 당신이 슬라이드를 넘어가는 것이 좋습니다 SQLCAT : 실제 배포에서 고성능 분산 응용 프로그램 MySpace와 같은 사이트가 거의 500 개의 서버와 수천 개의 데이터베이스를 읽고 쓰는 방법을 설명합니다.

궁극적으로 내재화에 필요한 것은 다음과 같습니다. 하나의 데이터베이스는 95% 가용성을 가질 수 있습니다 (상향 시간 그리고 허용 가능한 서비스 응답 시간). 가용성이 95% 인 10 개의 데이터베이스를 구성하는 시스템은 59% 가용성을 가지고 있습니다. 가용성이 99.5% 인 100 개의 데이터베이스 시스템은 60% 가용성을 가지고 있습니다. 99.95%의 가용성 (주당 5 분 다운 타임)을 가진 1000 개의 데이터베이스에는 60% 가용성이 있습니다. 그리고 이것은입니다 이상적인 상황. 실제로 자원 소비로 인한 눈덩이 효과 (예 : 사용할 수 없거나 느린 자원에 액세스하려고 시도한 스레드)로 인해 눈덩이가 훨씬 악화됩니다.

이는 동기식, 엄격하게 결합 된 Operatiosn 및 Transactions에 의존하는 대규모 분산 시스템을 작성할 수 없음을 의미합니다. 단순히 불가능합니다. 당신은 항상 비동기 작업 (일반적으로 메시징 및 대기열)에 의존하며, 이는 밀링 데이터베이스 응용 프로그램과 완전히 다른 것입니다.

사용 트랜잭션 스코프 System.Transaction에서 사용 가능한 객체.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top