2017-01-08 4 views
7

Возможно ли предварительное вычисление (кеш) агрегатов (мин/макс/среднее) значений, которые являются Разница двух сигналов?Кэширование временных рядов агрегатов разностей

У меня есть несколько каналов (например, 50) с одним или несколькими измерениями каждую секунду, и я могу легко хранить предварительно рассчитанные 1-минутные или 15-минутные агрегаты для более быстрого отображения.

Но одним из требований является отображение диаграммы относительных значений. Например. если у меня есть каналы C1, C2 и C3, пользователь хотел бы видеть средние значения C1 и средние значения (C2 - C3) (или 15-минутный минимум/максимум) на отдельной диаграмме.

Для примера, скажем, у меня есть эти 2 канала (и больше 48):

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-минутных или 15-минутные агрегаты от этого.

Но если пользователь хочет видеть min(C2-C1) или max(C2-C1) 5-минутные агрегаты, для любой комбинации этих 50 каналов кажется, что я не могу повторно использовать эту информацию.

Другими словами, мне кажется, что невозможно предусмотреть это, кроме хранения каждой возможной комбинации этих кортежей, потому что min(C2-C3) не равно min(C2)-min(C3).

У меня отсутствует какая-то идея, которая может помочь мне рассчитать эти значения быстрее?

+0

Я думаю, что образцы данных и желаемые результаты помогут. –

+0

@GordonLinoff: Я обновил вопрос, я надеюсь, что это немного улучшится. – Lou

+2

Я думаю, что вы правы в отношении min и max (рассмотрите два идентичных сигнала .. их разница будет равна нулю). в среднем, все равно, ave (AB) = ave (A) -ave (B) (см. http://math.stackexchange.com/questions/1360311/why-is-the-average-of-a-sum- равный сумме средних значений) – danh

ответ

1

Чтобы получить агрегирование min(C2-C3), вам просто нужно будет иметь все данные C2 и C3.

Однако, если ваша цель состоит в том, чтобы минимизировать данные, необходимые, чтобы сделать этот расчет, я предлагаю вам сделать это следующим образом (это решение потребует решения больших чисел - в зависимости от количества каналов):

Если вы знаете, все каналы не будут иметь значения, что превышает определенное значение (скажем, это 10), то мы можем объединить все данные каналов в 1 канал, давайте назовем его C

Для расчета C:

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

В итоге у вас будет канал C, который имеет все значения каналов.

Тогда для вычисления разницы между 2 каналами в какой-то момент, все, что вам нужно сделать, это «извлечь» эти 2 канала значения из C на лету:

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 

Где p десятичное точность извлеченное значение канала.

В этом случае вычисление дифференциала между двумя каналами x и y использованием предварительно рассчитанных C будет:

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

И тогда вы можете объединить эти значения через промежутки времени. Надеюсь, поможет.

+0

Но это все равно означает, что мне нужно прочитать каждый «C», и каждый 'C' по крайней мере равен сумме всех каналов. Значит, мне пришлось бы читать еще больше данных таким образом (ну, меньше доступа к таблице, но больший общий объем данных). – Lou

+0

Это, безусловно, зависит от ваших границ ресурсов, в этом случае 'C' будет большим числом да, но вы вычисляете его только один раз на этапе предварительного расчета вместе с mins и maxes. Но тогда, когда вы хотите сгенерировать агрегирование различий, вам не нужно обращаться ко всем каналам данных периода агрегации, и это только вопрос доступа к значениям 'C' соответствующего временного интервала. –

+0

Итак, для вашего примера: если у вас есть 50 каналов, это избавит вас от цикличности всех комбинаций данных этих каналов и позволит вам получить различия, просто получив значения 'C'. Вы ограничены размером памяти? –

 Смежные вопросы

  • Нет связанных вопросов^_^