문제

나는 웹 서비스에 있는 잠재력 있는 결과를 반환될 수 있는 매우 큰(>5 메가바이트).

그것은 완벽하게 유효한 이 설정의 데이터를 이 큰 및 웹 서비스라고 할 수 있거나 동기식 또는 비동기식지만,나는 무슨 사람들의 생각은 다음과 같다:

  1. 의 연결이 끊어진 경우에, 전체 resultset 어야 할 것이다 다시 생성되며 다시 전송.가 어떤 방법으로 나는 할 수 있는 어떤 종류의 "이력서"의 연결이 끊어진 경우 또는 리셋?

  2. 보내는 결과이 큰도 적절한가?는 것이 더 나을 구현하는 어떤 종류의"페이징"는 결과가 생성되고 서버에 저장하고 클라이언트 다운로드할 수 있습니다 덩어리의 결과에 적은 양하고 다시 조립하는 설정에서 자신의 끝?

도움이 되었습니까?

해결책

본 세 가지 모두 접근법 페이징, 저장하고 검색, 고 대규모 푸시.

나는 생각한 문제에 대한 해결책은 어느 정도 따라 달라집에 왜 당신의 결정은 그렇게 크고 어떻게 그것이 생성됩니다.당신의 결과 시간이 지남에 따라 성장,그들은 그 계산의 모든 단번에는 다음 수행할 스트림을 다시 그들을 곧바로 당신은 그들이 있습니까?

페이 접근법

내 경험에서 사용하는 페이징 방법은 적절한 경우 클라이언트에 빠르게 액세스 할 필요를 합리적으로 크기의 결과로 설정과 유사한 페이지를 검색 결과입니다.고려 사항 여기에는 전반적으로 활성도가 높아집의 프로토콜,캐싱의 전체 결과 사이에 설정 클라이언트가 페이지 요청,그리고/또는 처리하는데 걸리는 시간을 생성한 페이지의 결과입니다.

저장하고 검색

저장하고 검색할 때 유용한 결과하지 않은 랜덤 액세스하고 그 결과 세트의 크기가 증가 쿼리로 처리됩니다.문제를 고려하 여기에는 복잡한 클라이언트을 제공할 수 있는 경우에는 사용자의 부분적인 결과는 필요하신 경우에는 모든 계산 결과를 반환하기 전에게 아무것도 클라이언트(생각해의 분류에서 결과 분산 검색 엔진).

대규모 푸시

대규모 푸 접근 방식은 거의 확실히 잘못되어 있습니다.는 경우에도 클라이언트에 필요한 모든 정보를 밀어서 결과 모놀리식 집에,나는 추천의 접근 방식 WS-ReliableMessaging (직접 또는 당신의 자신의 단순화 버전)청크의 결과입니다.이렇게 함으로써 당신

  1. 는지 확인에 도달 할 수있는 클라이언트
  2. 할 수 있는 폐기 덩어리로 당신은 영수증을 받는 클라이언트에서
  3. 을 줄일 수 있다는 가능한 문제에 메모리가 소비하는 데에서 유지하 5 메가바이트,XML,DOM,또는 어떤 메모리에(한다고 가정하지 않은 처리 결과를 스트리밍 방식으로)에서 서버와 클라이언트 측면입니다.

다른 사람처럼 말했지만 아무것도하지 않는,당신이 알고 있을 때까지 당신의 결과로 설정 크기,생성,그리고 전반적인 성능을 실제 문제입니다.

다른 팁

이 없다 하는 법에 대해 5Mb 결과적으로 설정 크기입니다.400Mb 수 있습니다 를 보.

당신은 자동적으로 얻는 비동기 처리기(있기 때문에 사용합니다.net)

일부를 구현하는 종류의"페이"어디에 resultset 생성 및 저장 에 서버와 클라이언트가 다음 다운로드의 덩어리에서 resultset 작은 양하고 다시 조립하는 설정에서 자신의 종료

이미 일어나는 당신을 위해-그것은이라는 tcp/ip;-)Re-구현할 수 있는 것입니다.

마찬가지로--

전체 resultset 어야 할 것이다 다시 생성되며 다시 전송

의 경우 MS-SQL,예를 들어를 생성하는 대부분의 resultset--다시 생성하는 그것을 활용할 것입니다 일부는 묵시적 캐시에 저장하는 작업에서 SQL 서버 및 후속 세대가 빨리 될 것입니다.

어느 정도 당신은 멀리 얻을 수 있습니다 걱정하지 않게 이러한 문제까지,그들은 표면으로는'진짜'문제이기 때문에 플랫폼(s)를 사용하의 돌은 많은 성능 병목 현상을 위한 당신.

내가 다소에 동의하지 않 secretGeek 의 코멘트:

이미 일어나는 당신을 위해-그것은이라는 tcp/ip;-)Re-구현할 수 있는 것입니다.

시간이 있을 때 당신은 작업을 수행 할 수 있습니다 이지만,정말에서만 UI 관점입니다.를 구현하는 경우에는 몇 가지 방법 중 하나로 스트림 데이터는 클라이언트(via 같은 것 pushlets 기계장치),또는 덩어리로 페이지로 당신을 제안할 수 있습니다 다음 로드 중 일부는 정말 작은 하위 클라이언트에 천천히 다음을 구축 UI 전체 양의 데이터입니다.

이를 위해 청량,속도가 빠른 UI(사용자의 관점에서),하지만 당신을 평가하면 별도의 노력이 가치가있을 것입니다...기 때문에 나는 생각하지 않는 것이 미미한 양의 작동합니다.

그래서 그것을 소리고 싶어하는 사람들을위한 것에 관심이 있는 솔루션을 추가'는 시작을 기록번호'과'최종 기록 번호를 매개 변수를 귀하의 웹 방법입니다.(또는'페이지 번호와'당 결과 페이지')

이 어렵진 않는 경우 백업장은 sql 서버(또는 mysql)그들은 그를 지원하는 기능이 내장되어있는 행 번호.

이것에도 불구하고 당신이해야 할 수 있을 피하고 세션 관리,서버에서 피하기 위해 어떤 명시적인 캐싱의 결과로 설정,그리고 그에 의존하는 백업장의 캐싱 당신의 생명을 유지하는 간단하다.

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