2013-10-01 2 views
0

데이터 로깅 응용 프로그램이 있습니다. 30 초마다 10,000 개의 온도를 기록합니다. 매시간/매일/매주 기준으로 10,000 개 항목 각각의 최소/최대/평균 온도를 계산할 수 있어야합니다. 최소/최대/평균 계산을 서버에서 수행 할 수 있습니까? 아니면 계산을 수행하기 위해 각 문서를 클라이언트에 다운로드해야합니까?최소/최대/평균 계산은 어디에서 발생합니까?

앤드류

답변

0

DB/서버에 요약을 계산하거나 저장하십시오. 중요한 경우 원본 데이터도 보관하십시오.

초반에 요약을 계산하여 클라이언트/사람 수준으로 보내면 보통 아무도 조사하지 않으려는 약 10,000 개의 샘플을 트래킹하는 것보다 훨씬 효율적입니다.

평균, 최소, 최대 & 표준 편차를 갖는 정말 좋은 요약은 거의 모든 목적에 대해 통계적으로 포괄적입니다.

클라이언트가 정말로 원하는 경우 큰 데이터 세트 (10k 샘플)를 내리고 표시 할 수 있습니다.

0

은 확실히 당신은 서버에를 계산하려면,하지만 당신은 고려해 여러 방법이 있습니다 :

  • 당신이 저장할 수 수동으로 각 샘플로 업데이트 특정 문서는. 이 방법이 효과적 일 수 있지만 단일 문서에 많은 스트레스를 가하면 동시성 문제가 발생할 수 있습니다.

  • Map/Reduce 인덱스를 작성하여 합계를 계산할 수 있습니다. 새 문서를 작성할 때마다 RavenDB는 색인을 새 합계로 업데이트합니다. 전체 값을 평균값으로 나눌 수 있으며 min 및 max 함수를 쉽게 사용할 수 있습니다. 이러한 결과를 다른 시간 간격으로보고 싶기 때문에 여러 개의 색인이 필요합니다.

    저는 실제로 정확하게하는 작은 데모 프로그램을 작성했습니다. 온도 대신 시뮬레이트 된 압력계의 PSI 값을 기록합니다. 그러나 개념은 동일합니다. 거기에 몇 가지 바로 가기가 당신이 아마 당신이 코멘트를 면밀히 읽을 수 있습니다.

    프로젝트 사이트 : RavenDB의 현재 버전은 2.0.2261 때

    Raven Sensors 내가이 썼다. 나는 그것을 잠시 동안 업데이트하지는 않았지만 여전히 효과가 있어야하고 관련성이 있어야합니다.

  • RavenDB 2.5에는 아직 많은 기능이 없지만 Dynamic Aggregation이라는 기능이 추가되었습니다. 스튜디오를 통해 Dynamic Reporting으로 노출됩니다. 본질적으로 이것은 쿼리 시간에 집계를 수행합니다. 관심있는 집계를 표현하는 것이 훨씬 쉬울 수도 있지만 map-reduce 접근보다 상당히 느릴 수 있습니다. 실험하고 싶을 수도 있습니다. 성능 차이는 집합에 포함되는 항목의 수에 따라 결정됩니다.

관련 문제