2016-02-25 6 views
-1

J'ai une fenêtre glissante de 15 min, et peut agréger à tout moment sur ces données dans cette fenêtre. En raison de contraintes de mémoire, je ne peux pas augmenter la taille de la fenêtre. Je pense toujours que je devrais être en mesure d'obtenir des agrégats (comme les éléments de tendance qui est essentiellement compteur freq etc.) sur une journée/une semaine.Si j'ai une fenêtre coulissante de 15 min, comment puis-je prélever des agrégats quotidiens/hebdomadaires?

Il ne doit pas être un compte très précis, il suffit de filtrer le haut 3-5.

  1. Exécuter un travail cron toutes les 15 minutes et le mettre dans 4 compteurs (15min) de travail? Puis-je mettre à jour une sorte de compteur roulant sur l'agrégat?
  2. Existe-t-il une autre méthode pour cela?
+1

Quelles sont les données? (Une série de valeurs numériques?) Quels "agrégats" voulez-vous calculer? Certains (comme la somme ou la moyenne) sont faciles à calculer dans l'espace O (1) avec un seul passage, tandis que d'autres (comme la médiane) sont impossibles à calculer dans l'espace O (1) avec un seul passage. –

+0

Pouvez-vous fournir des détails supplémentaires? –

Répondre

0

Ma suggestion est une moyenne mobile décroissante exponentiellement. Comme c'est le cas pour la moyenne de chargement Unix. (Voir http://www.howtogeek.com/194642/understanding-the-load-average-on-linux-and-other-unix-like-systems/ pour une explication.)

Ce que vous faites est de choisir une 0 < k < 1 constante puis mettre à jour toutes les 5 minutes comme suit:

moving_average = k * average_over_last_5_min + (1-k) * moving_average 

Cela se comportera quelque chose comme une moyenne au cours des dernières 5/k minutes. Donc, si vous définissez k = 1/(24.0 * 60.0/5.0) = 0.00347222222222222, vous obtenez à peu près une moyenne mobile quotidienne. Divisez cela par 7 et vous obtenez à peu près une moyenne mobile hebdomadaire.

Les moyennes ne seront pas exactes, mais devraient parfaitement fonctionner pour identifier les tendances récentes.