문제

한 세션에서 500000 데이터 레코드를 업로드하고 처리하는 경우 정보 관리 시스템의 DB 계층, 비즈니스 로직 및 크로스 플랫폼 API를 어떻게 구성합니까 (C# .NET 3.5 + MS SQL 2005).

나는 동시성, 확장 성 및 신뢰성과 잘 작동하는 생산으로 입증 된 페이징 패턴에 특히 관심이 있습니다.

아무도 어떤 방향으로 파헤칠 방향으로 아이디어가 있습니까?

  • 오픈 소스 프로젝트 (OOK가 아닌 한 언어 나 플랫폼에 신경 쓰지 마십시오)
  • 서적
  • 조항
  • Google 키워드
  • 포럼 또는 뉴스 그룹

모든 도움이 크게 감사하겠습니다!

업데이트:

  • 간단한 페이징 (예 : SQL 2005의 Rownumber)은 작동하지 않습니다. 병발 사정 데이터베이스 변경. 페이지 요청 사이에 삭제되거나 삽입되는 항목은 자동으로 현재 페이지 인덱스를 잘못 사용합니다.
도움이 되었습니까?

해결책 3

구현을 완료했습니다. 나는 최근 업로드 중 하나가 약 2148849 레코드라는 사실을 알게되었습니다. Tiers는이 업로드 중에 DB 레벨에서 몇 개의 깨진 연결과 수십 개의 교착 상태를 성공적으로 처리했습니다.

다른 사람이 정보가 필요한 경우 :

다른 팁

이것은 시작하기에 좋은 책입니다.

엔터프라이즈 애플리케이션 아키텍처 패턴 Martin Fowler

엄청난 양의 데이터에 대한 DB 최적화와 관련하여 "Bigtable"기술을 사용하면 이점이 있습니다. 나는 찾았다 여기에 기사 매우 유용한. 곧 아이디어는 DB 탈피를 사용하여 더 나은 성능을 위해 디스크 공간을 거래하는 것입니다.

MS SQL 2005의 페이징의 경우 Row_number 기능 사용에 대한 추가 정보를 찾으십시오. 여기 간단한 예입니다, Google (Keywords : Row_Number Paging SQL 2005)을 사용하여 많은 톤을 찾을 수 있습니다. 그래도 많이 파지 마십시오 - 구현에는 마법이 없습니다. 오히려 페이징 자체를 어떻게 사용/제시 할 것인가. Google 검색이 좋은 예입니다.

참고 : 우리는 솔루션에 NHibernate 프레임 워크 네이티브 페이징 지원이 충분하지 않다는 것을 발견했습니다.

또한 전체 텍스트 색인을 작성하고 전체 텍스트 검색을 사용하는 데 관심이있을 것입니다. 다음은 MSDN 기사입니다 전체 텍스트 색인 생성 및 일부 정보 전체 텍스트 검색에서.

행운을 빕니다.

단 디카,

부분 피식을 언급해 주셔서 감사합니다. 그렇습니다. 이것이 일부 쿼리의 성능을 향상시키기위한 접근 방식입니다.

불행히도, Nhibernate ORM은 추가 된 성능 오버 헤드로 인해 솔루션에 맞지 않습니다. SQL 페이징과 동일합니다 - 수많은 동시 편집 시나리오에서는 작동하지 않습니다 ( 스트레스 테스트)

나는 수십만 개의 레코드의 일부 피드를 업로드하는 엔터프라이즈 데이터웨어 하우스를 돌보고 있습니다.
이것이 당신의 시나리오인지 확실하지 않지만 우리는 다음과 같습니다.

  • Sybase 데이터베이스에 업로드하면 텍스트 파일을받습니다.
  • AWK를 사용하여 다른 피드를 형식화하여 공통 형식이됩니다.
  • BCP를 사용하여 비정규 화 중간 테이블에로드하십시오.
  • 정규화 된 데이터베이스 structre를 채우기위한 저장 절차를 실행합니다.
  • 비정규 화 중간 테이블에서 삭제하십시오.

이것은 상당히 잘 작동하지만 업로드를 순차적으로 강요합니다. 즉, 피드가 도착하면 대기열로 들어가고, 우리는 나머지를보기 전에 대기열의 헤드에서 피드를 완전히 처리합니다.

그 중 도움이 있습니까?

SQL 페이징과 동일합니다 - 스트레스 테스트에 의해 감지 된 수많은 동시 편집 시나리오에서는 작동하지 않습니다.

앞서 언급했듯이 페이징 구현에는 마법이 없습니다. Row_number 또는 임시 테이블을 사용합니다. 여기의 마법은 가장 일반적인 실제 사용 시나리오를 평가하는 것입니다. 사용자 추적과 함께 임시 테이블을 사용하면 동시 편집 시나리오를 극복하는 데 도움이 될 수 있습니다. 질문에 대답함으로써 더 많은 이길 것이라고 생각하지만 :

  1. 사용자가 다른 페이지로 이동하기 전에 한 페이지에 얼마나 오래 머물러 있습니까?
  2. 사용자가 먼저 다른 페이지로 얼마나 자주 이동합니까?
  3. 사용자가 살펴볼 공통 페이지 수는 무엇입니까?
  4. 사용자가 한 페이지에서 다른 페이지로 이동하는 동안 일부 정보가 변경되는 경우에는 얼마나 중요합니까?
  5. 사용자가 정보를 표시하는 페이지에있는 동안 일부 정보가 삭제되는 경우 얼마나 중요합니까?

"페이징 동안 가능한 동시 편집 시나리오를 처리하는 방법은 무엇입니까?"와 같은 질문에 집중하지 마십시오. 위의 질문에 먼저 대답하고 실제로 중요한 상황 만 처리하기 전에.

또 다른 메모는 ui입니다. 오른쪽과 왼쪽 화살표 또는 페이지 번호가 줄 지어있는 것보다 훨씬 더 나은 솔루션이 있으므로 찾을 수있는만큼 많은 페이징 UI를 확인하십시오. 일부 솔루션은 기술적으로 해결할 수없는 페이징 시나리오를 숨기거나 극복하는 데 도움이됩니다.

추신이 답변이 유용하다면 첫 번째 답변과 결합하겠습니다.

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