我即将开发一个配额跟踪工具,需要考虑每个用户在过去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)
答案 0 :(得分:0)
我建议使用时间戳存储事件。记录看起来像<timestamp,username,eventid>
。
然后,您可以通过以下方式计算小时平均值:
(number of events with username=some_username)/(max_timestamp-min_timestamp).hour()