문제

.NET O/R (Object/Relational) Mappers가 상자 밖에서 비동기 방법을 제공합니까?

가능하면 비동기 방법으로 보일러 플레이트를 쓰고 싶지 않습니다.

나는 CCR 프레임 워크를 사용하여 비동기 방법으로 내 자신의 dal을 굴 렸습니다. CCR은 기본적으로 IO 응답을 기다리는 스레드를 차단하지 말 것을 요구합니다.

지금까지 내 솔루션의 좋은 부분은 그것이 최소한으로 줄어든다는 것입니다. 그러나이 프로젝트는 규모와 기능 측면에서 성장함에 따라 원시 SQL 쿼리 및 보일러 플레이트 코드를 유지하는 약간 어려운 작업에 직면하고 있습니다.

그러나 다른 한편으로 O/R Mapper 비동기 방법이 실제로 복잡성의 홀수를 더하는 지저분한 해킹이라면 더 나은 것은 아닙니다.

비동기 프로그래밍에 대한 대안에 집중하지 마십시오.

도움이 되었습니까?

해결책

그들 중 누구도 상자에서 그것을할지 확실하지 않지만 사용할 수 있습니다. .NETTIERS, 템플릿 기반입니다. 템플릿에 비동기 부품을 추가 할 수 있습니다. 그러면 최소한 보일러 플레이트 코드와 베어 SQL 쿼리를 유지해야합니다. 이것 블로그 MS Enterprise Library에 비동기 호출을 추가하는 방법을 보여줍니다 (선택한 경우 Nettiers가 사용할 수 있음).

2008 년 12 월 중순부터 Llblgen Pro는 기본적으로 비동기 호출을 지원하지 않습니다. 현재 게놈 둘 중 하나가 아닙니다. 그것은 나타나지 않습니다 텔레릭 하나도. 거의 방금 문서를 검색하고 시작부터 시작하는 비동기 또는 메소드가 패턴이기 때문에 시작하는 방법을 찾았습니다.

나는 다른 대답이 그것이 좋은 생각인지 아닌지에 대해 말하게했다 ...

다른 팁

예, sqlalchemy (최고의 ORM 중 하나)의 경우 sasync가 있습니다.

http://foss.eepatents.com/sasync

그리고 nadbapi :

http://developer.berlios.de/projects/nadbapi/

나는 당신이 잘못되었다고 생각합니다. 내 이해는 귀하의 경우 비동기 실행은 ORM 레벨 IE 메시지 대기열 아키텍처 대신 아키텍처 수준에서 처리해야한다는 것입니다. 내가 보는 것은 웹 서적이 대기열에만 메시지를 놓고 큐에서 비동기 처리를 수행한다는 것입니다.

댓글을 달 수있는 명성이 충분하지 않아서 stackoverflow가 다른 "답변"을 삽입하는 데 경고하고 있기 때문에 여기에 내 의견을 남겨 드리겠습니다.

Lee B : Sqlalchemy? .net과 함께 어떻게 사용합니까 ???

비동기적인 방식으로 데이터를 가져 오는 것은 다양한 방식으로 달성 될 수 있습니다. O/R Mapper에이를 아웃소싱하면 코드가 실제로 덜 복잡하게 만들지 않기 때문에 처리하고 싶지 않은 도전에 도전합니다. 주요 문제는 O/R Mapper에 의해 페치를 완료 할 때 알림을받는 메커니즘이 있어야한다는 것입니다. 따라서 발신자에게 데이터가 준비되었음을 알립니다.

이것은 스레드를 직접 작성하고 해당 스레드에서 O/R Mapper의 페치 논리를 호출하는 것보다 덜 복잡하지 않습니다.

응답 해야하는 웹 서비스를 만들고 싶다고 말하면 발신자가 웹 서비스 외부에 있고 데이터를 기다린다는 것을 깨달아야합니다. IOW : 발신자가 데이터를 가져 오기 위해 웹 서비스를 사용하는 경우 다른 클라이언트도 여전히 웹 서비스를 호출 할 수 있으므로 이미 비동기식입니다. 원래 발신자의 요청은 다른 스레드에서 처리되며, 데이터를 가져 오는 논리는 그 내부에서 실행되었습니다. 스레드와 데이터는 발신자에게 반환됩니다.

데이터가 준비 될 때 발신자에게 알림을 받아야하기 때문에 비동기 메소드를 사용하지 않으므로 웹 서비스에서 클라이언트로의 푸시가 필요하므로 클라이언트는 페치까지 웹 서비스에 연결해야합니다. 어쨌든 가져갑니다.

비동기 DB 상호 작용은 당신이 무언가를 던질 수있는 마법의 것이 아닙니다. 비동기 DB 상호 작용은 발신자가 그 동안 다른 일을하게 할 수 있습니다. 그러나 이미 필요하지 않은 경우 처음에는 비동기 DB 상호 작용이 필요하지 않으므로 코드를 훨씬 덜 복잡하게 만듭니다.

nhibernate LINQTOSQL보다 비동기를 구현하는 것이 상대적으로 더 쉽습니다. 보다 이것

개인적으로 내가 할 수있는 것은 내가 편안한 것을 사용하는 것입니다 (nhibernate를 사용하지 않았기 때문에 학습 곡선과 잠재적 문제에 대해 걱정하므로 LinqToSQL 또는 맞춤형 데이터 액세스 계층과 같은 것을 사용하고 래핑합니다. 자체 웹 서비스 WCF LOB 어댑터.

당신이 정말로 자신을 코딩하고 싶지 않다면 당신은 그냥 사용할 수 있습니다. ado.net 데이터 서비스 기본적으로 엔티티 프레임 워크를 위해.

인덱스가없는 것 같습니다.

또는 데이터베이스 디자인을 OLAP 모델로 전환해야합니다.

그렇지 않은 경우.

  1. 더 많은 램을 얻으십시오.
  2. 더 많은 CPU를 얻으십시오.
  3. 테이블을 분할하십시오.
  4. 비동기 요청을 처리 할 수있는 DB의 래퍼를 구축하십시오. 대기열처럼 보일 것입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top