데이터 로깅 응용 프로그램이 있습니다. 30 초마다 10,000 개의 온도를 기록합니다. 매시간/매일/매주 기준으로 10,000 개 항목 각각의 최소/최대/평균 온도를 계산할 수 있어야합니다. 최소/최대/평균 계산을 서버에서 수행 할 수 있습니까? 아니면 계산을 수행하기 위해 각 문서를 클라이언트에 다운로드해야합니까?최소/최대/평균 계산은 어디에서 발생합니까?
앤드류
데이터 로깅 응용 프로그램이 있습니다. 30 초마다 10,000 개의 온도를 기록합니다. 매시간/매일/매주 기준으로 10,000 개 항목 각각의 최소/최대/평균 온도를 계산할 수 있어야합니다. 최소/최대/평균 계산을 서버에서 수행 할 수 있습니까? 아니면 계산을 수행하기 위해 각 문서를 클라이언트에 다운로드해야합니까?최소/최대/평균 계산은 어디에서 발생합니까?
앤드류
DB/서버에 요약을 계산하거나 저장하십시오. 중요한 경우 원본 데이터도 보관하십시오.
초반에 요약을 계산하여 클라이언트/사람 수준으로 보내면 보통 아무도 조사하지 않으려는 약 10,000 개의 샘플을 트래킹하는 것보다 훨씬 효율적입니다.
평균, 최소, 최대 & 표준 편차를 갖는 정말 좋은 요약은 거의 모든 목적에 대해 통계적으로 포괄적입니다.
클라이언트가 정말로 원하는 경우 큰 데이터 세트 (10k 샘플)를 내리고 표시 할 수 있습니다.
은 확실히 당신은 서버에를 계산하려면,하지만 당신은 고려해 여러 방법이 있습니다 :
당신이 저장할 수 수동으로 각 샘플로 업데이트 특정 문서는. 이 방법이 효과적 일 수 있지만 단일 문서에 많은 스트레스를 가하면 동시성 문제가 발생할 수 있습니다.
Map/Reduce 인덱스를 작성하여 합계를 계산할 수 있습니다. 새 문서를 작성할 때마다 RavenDB는 색인을 새 합계로 업데이트합니다. 전체 값을 평균값으로 나눌 수 있으며 min 및 max 함수를 쉽게 사용할 수 있습니다. 이러한 결과를 다른 시간 간격으로보고 싶기 때문에 여러 개의 색인이 필요합니다.
저는 실제로 정확하게하는 작은 데모 프로그램을 작성했습니다. 온도 대신 시뮬레이트 된 압력계의 PSI 값을 기록합니다. 그러나 개념은 동일합니다. 거기에 몇 가지 바로 가기가 당신이 아마 당신이 코멘트를 면밀히 읽을 수 있습니다.
프로젝트 사이트 : RavenDB의 현재 버전은 2.0.2261 때
Raven Sensors 내가이 썼다. 나는 그것을 잠시 동안 업데이트하지는 않았지만 여전히 효과가 있어야하고 관련성이 있어야합니다.
RavenDB 2.5에는 아직 많은 기능이 없지만 Dynamic Aggregation이라는 기능이 추가되었습니다. 스튜디오를 통해 Dynamic Reporting으로 노출됩니다. 본질적으로 이것은 쿼리 시간에 집계를 수행합니다. 관심있는 집계를 표현하는 것이 훨씬 쉬울 수도 있지만 map-reduce 접근보다 상당히 느릴 수 있습니다. 실험하고 싶을 수도 있습니다. 성능 차이는 집합에 포함되는 항목의 수에 따라 결정됩니다.