2017-01-08 2 views
7

두 개의 차이가있는 값의 집계 (최소/최대/평균)를 사전 계산 (캐시) 할 수 있습니까?캐시의 시계열 누적 집합

나는 여러 채널 (예 : 50)을 사용하며 매초마다 하나 이상의 측정 값이 표시되며 빠른 계산을 위해 미리 계산 된 1 분 또는 15 분 집계를 쉽게 저장할 수 있습니다.

그러나 요구 사항 중 하나는 상대 값 차트를 표시하는 것입니다. 예 : 채널이 C1이고 C2C3 인 사용자는 평균이 C1이고 평균이 (C2 - C3) (또는 최소/최대 15 분) 인 별도 차트를보고 싶습니다.

t(min) 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 
C1  0.0 0.1 0.2 -0.1 0.0 0.1 0.3 0.5 0.7 0.9 0.2 
C2  0.1 0.4 0.2 0.1 -0.1 0.5 0.6 0.1 0.2 0.3 0.0 

내가 미리 계산하고 저장 5 분 집계 :

t(min) 0 to +4 +5 to +10 
C1_min  -0.1   0.1 
C1_max  0.2   0.9 
C2_min  -0.1   0.0 
C2_max  0.4   0.6 

그리고 쉽게 얻을 10 분 예를 들어

, 이제 나는이 2 개 채널 (48 이상)이 있다고 가정하자 또는 이것으로부터 15 분의 집합체.

하지만 사용자가 min(C2-C1) 또는 max(C2-C1) 5 분계를보고 싶다면이 50 개의 채널을 조합하여이 정보를 재사용 할 수없는 것 같습니다.

즉,이 튜플의 가능한 조합을 별도로 저장하는 것 외에는 이것을 미리 계산할 수 없습니다. min(C2-C3)min(C2)-min(C3)과 같지 않습니다.

이 값을 더 빨리 계산하는 데 도움이되는 몇 가지 아이디어가 누락 되었습니까?

+0

샘플 데이터와 원하는 결과가 도움이 될 것이라고 생각합니다. –

+0

@GordonLinoff : 질문을 업데이트했습니다.이 질문이 약간 더 명확하게되기를 바랍니다. – Lou

+2

저는 여러분이 min과 max에 대해 옳다고 생각합니다. (두 개의 동일한 신호를 고려해보십시오. 그 차이는 0이 될 것입니다). 평균은 괜찮습니다. ave (AB) = ave (A) -ave (B) (http://math.stackexchange.com/questions/1360311/why-is-the-average-of-a-sum- 평균 합계와 같음) – danh

답변

1

집합 번호 min(C2-C3)을 얻으려면 모든 데이터가 C2C3 일 필요가 있습니다.

: - 당신의 목표는이 계산을 수행하는 데 필요한 데이터를 최소화하는 경우

하지만, 난 당신이 다음과 같은 방식으로 그것을 제안 (채널 수에 따라이 솔루션은 큰 숫자를 다루는이 필요합니다) 모든 채널이 특정 값을 초과하는 값이 없습니다 알고 있다면

의 그것 C

계산하기 위해 이름을하자, 우리는 1 개 채널의 모든 채널의 데이터를 결합 할 수 있습니다 (의 그것 10을 말할 수 있습니다) C :

C = (C1 * 10^1) + (C2 * 10^2) + (C3 * 10^3) + .. + (Cn * 10^n). 

결국 모든 채널 값이 포함 된 C 채널을 갖게됩니다. p가의 소수점 정밀도

C1 = floor((C mod 10^1)/10^(1-p))/10^p 
C2 = floor((C mod 10^2)/10^(2-p))/10^p 
... 
Cn = floor((C mod 10^n)/10^(n-p))/10^p 

: 다음

은 당신이해야 할 모든 비행에 C에서 해당 2 개 채널 값을 "추출"하는 것입니다, 어떤 점에서 2 개 채널 사이의 차이를 계산 추출 된 채널 값

min(Cy-Cx) = min((floor((C mod 10^y)/10^(y-p))/10^p) - (floor((C mod 10^x)/10^(x-p))/10^p)) 

을 그리고 당신은 시간의 간격을 통해 그 값을 집계 할 수 있습니다 DIFF이 경우 계산에

사용 x 채널이 사이 y C 될 것이라고 미리 계산. 희망이 도움이됩니다.

+0

그러나 이것은 여전히 ​​모든 단일 'C'를 읽을 필요가 있음을 의미하며, 각 C는 모든 채널의 합계만큼 커야합니다. 나는 더 많은 데이터를이 방법으로 읽어야한다는 것을 의미한다. (글쎄, 테이블 접근은 적지 만 데이터의 총량은 더 많다.) – Lou

+0

확실히 자원 경계에 달려 있습니다.이 경우'C'는 큰 숫자 일 것입니다.하지만 분과 최대 값과 함께 계산 전 단계에서 한 번만 계산하고 있습니다. 그러나 diff 집계를 생성하려면 집계 기간의 모든 채널 데이터에 액세스 할 필요가 없으며 해당 시간 슬롯의 'C'값에만 액세스해야합니다. –

+0

예를 들어, 50 개의 채널이 있다면이 채널 데이터의 모든 조합을 반복하여 저장하고 'C'값만 액세스하여 diff를 가져올 수 있습니다. 메모리 크기에 제한이 있습니까? –