如何存储和不断计算数据点的滚动平均值

时间:2015-05-19 20:14:23

标签: python database nosql

我即将开发一个配额跟踪工具,需要考虑每个用户在过去60分钟内触发的事件数量。

我可以自由选择存储方法(rdbms,nosql,内存,等等)以及其他任何东西,但它应该可以通过网络访问多个节点。

我已经看过几个如何根据文件输入等计算平均值的例子,我相信我可以对那部分进行排序 - 但是还必须决定一种存储数据的好方法,这会使我的膝盖弯曲。 / p>

到目前为止,我已经考虑过redis和memcached,但我仍然对如何存储和访问平均数据感到困惑。

对于我来说,无论是在后端还是在代码中进行平均计算都无关紧要。

示例python代码,大致显示了我想要实现的目标:

def registerUserEvent(username):
  updateUserEvents(username, getUserEvents() + 1)

def getUserEvents(username):
  return fetchDataFromSomeBackend(username)

def getUserEventsPerHour(username):
  userEvents = getUserEvents(username)
  hourlyAverage = doSomeCalculations(userEvents) # how do I do this?
  return hourlyAverage

def updateUserEvents(username):
  updateBackendSomehow(username, getUserEvents() + 1)

1 个答案:

答案 0 :(得分:0)

我建议使用时间戳存储事件。记录看起来像<timestamp,username,eventid>。 然后,您可以通过以下方式计算小时平均值:

(number of events with username=some_username)/(max_timestamp-min_timestamp).hour()